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 |