embeded/ARM2015. 1. 28. 16:41

cortex-A8 / i.MX515 개발환경에서 커널 빌드하려고 패치하고 설정을 보니

CPU 설정에서 다음과 같은 ARM errata 관련 설정이 보인다.


  │ │        [*] ARM errata: Stale prediction on replaced interworking branch               │ │   

  │ │        [*] ARM errata: Processor deadlock when a false hazard is created              │ │  

  │ │        [*] ARM errata: Data written to the L2 cache can be overwritten with stale data│ │  


음.. 이건 ARM/Thumb 섞어서 쓸때 분기문에서 주소 충돌이 나는 버그 같은데..

Thumb를 활성화 안해준다면 크게 걱정안해도 될 버그 같고

  ┌ ARM errata: Stale prediction on replaced interworking branch ───────────────┐

  │ CONFIG_ARM_ERRATA_430973:                                                                 │  

  │                                                                                           │  

  │ This option enables the workaround for the 430973 Cortex-A8                               │  

  │ (r1p0..r1p2) erratum. If a code sequence containing an ARM/Thumb                          │  

  │ interworking branch is replaced with another code sequence at the                         │  

  │ same virtual address, whether due to self-modifying code or virtual                       │  

  │ to physical address re-mapping, Cortex-A8 does not recover from the                       │  

  │ stale interworking branch prediction. This results in Cortex-A8                           │  

  │ executing the new code sequence in the incorrect ARM or Thumb state.                      │  

  │ The workaround enables the BTB/BTAC operations by setting ACTLR.IBE                       │  

  │ and also flushes the branch target cache at every context switch.                         │  

  │ Note that setting specific bits in the ACTLR register may not be                          │  

  │ available in non-secure mode.                                                             │  

  │                                                                                           │  

  │ Symbol: ARM_ERRATA_430973 [=y]                                                            │  

  │ Prompt: ARM errata: Stale prediction on replaced interworking branch                      │  

  │   Defined at arch/arm/Kconfig:1004                                                        │  

  │   Depends on: CPU_V7 [=y]                                                                 │  

  │   Location:                                                                               │  

  │     -> System Type                                                                        │  

[링크 : http://cateee.net/lkddb/web-lkddb/ARM_ERRATA_430973.html]


매우 특정한 순서의 메모리 연산을 할 경우 캐시 라인이 엉겨서 cpu가 데드락에 빠질수 있다는데.

드물게 죽는(?) 이유가 이 녀석 이었으려나?

  ┌ ARM errata: Processor deadlock when a false hazard is created ──────────────┐

  │ CONFIG_ARM_ERRATA_458693:                                                                 │  

  │                                                                                           │  

  │ This option enables the workaround for the 458693 Cortex-A8 (r2p0)                        │  

  │ erratum. For very specific sequences of memory operations, it is                          │  

  │ possible for a hazard condition intended for a cache line to instead                      │  

  │ be incorrectly associated with a different cache line. This false                         │  

  │ hazard might then cause a processor deadlock. The workaround enables                      │  

  │ the L1 caching of the NEON accesses and disables the PLD instruction                      │  

  │ in the ACTLR register. Note that setting specific bits in the ACTLR                       │  

  │ register may not be available in non-secure mode.                                         │  

  │                                                                                           │  

  │ Symbol: ARM_ERRATA_458693 [=y]                                                            │  

  │ Prompt: ARM errata: Processor deadlock when a false hazard is created                     │  

  │   Defined at arch/arm/Kconfig:1020                                                        │  

  │   Depends on: CPU_V7 [=y]                                                                 │  

  │   Location:                                                                               │  

  │     -> System Type                                                                        │  

[링크 : http://cateee.net/lkddb/web-lkddb/ARM_ERRATA_458693.html]


L2 캐시에 신선한 데이터가 상한 데이터로 바꿔치기 되는 버그.

죽는다고는 안하지만.. 캐시 히트를 못하는 걸까.. 히트했는데 이상한 데이터를 주는 걸까?

  ┌ ARM errata: Data written to the L2 cache can be overwritten with stale data ───────┐

  │ CONFIG_ARM_ERRATA_460075:                                                                 │  

  │                                                                                           │  

  │ This option enables the workaround for the 460075 Cortex-A8 (r2p0)                        │  

  │ erratum. Any asynchronous access to the L2 cache may encounter a                          │  

  │ situation in which recent store transactions to the L2 cache are lost                     │  

  │ and overwritten with stale memory contents from external memory. The                      │  

  │ workaround disables the write-allocate mode for the L2 cache via the                      │  

  │ ACTLR register. Note that setting specific bits in the ACTLR register                     │  

  │ may not be available in non-secure mode.                                                  │  

  │                                                                                           │  

  │ Symbol: ARM_ERRATA_460075 [=y]                                                            │  

  │ Prompt: ARM errata: Data written to the L2 cache can be overwritten with stale data       │  

  │   Defined at arch/arm/Kconfig:1033                                                        │  

  │   Depends on: CPU_V7 [=y]                                                                 │  

  │   Location:                                                                               │  

  │     -> System Type                                                                        │  

[링크 : http://cateee.net/lkddb/web-lkddb/ARM_ERRATA_460075.html]


음.. 요약하면

ACTLR의 특정 레지스터 값은 non-secure mode에서 사용이 불가능해지고

반대로 말하면.. secure mode 라면 발생하지 않을 버그라는 걸까나?

'embeded > ARM' 카테고리의 다른 글

i.mx515 kernel cross compile  (0) 2015.02.02
i.mx515 SDMA  (0) 2015.02.02
NEON enabled?  (0) 2015.01.28
armel / armhf  (0) 2015.01.26
ltib on ubuntu  (0) 2015.01.12
Posted by 구차니