diff options
| -rw-r--r-- | arch/arm/Kconfig | 13 | ||||
| -rw-r--r-- | arch/arm/mm/proc-v7.S | 6 |
2 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 84e4816362b3..49f85664083d 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -765,6 +765,19 @@ config ARM_ERRATA_430973 | |||
| 765 | Note that setting specific bits in the ACTLR register may not be | 765 | Note that setting specific bits in the ACTLR register may not be |
| 766 | available in non-secure mode. | 766 | available in non-secure mode. |
| 767 | 767 | ||
| 768 | config ARM_ERRATA_458693 | ||
| 769 | bool "ARM errata: Processor deadlock when a false hazard is created" | ||
| 770 | depends on CPU_V7 | ||
| 771 | help | ||
| 772 | This option enables the workaround for the 458693 Cortex-A8 (r2p0) | ||
| 773 | erratum. For very specific sequences of memory operations, it is | ||
| 774 | possible for a hazard condition intended for a cache line to instead | ||
| 775 | be incorrectly associated with a different cache line. This false | ||
| 776 | hazard might then cause a processor deadlock. The workaround enables | ||
| 777 | the L1 caching of the NEON accesses and disables the PLD instruction | ||
| 778 | in the ACTLR register. Note that setting specific bits in the ACTLR | ||
| 779 | register may not be available in non-secure mode. | ||
| 780 | |||
| 768 | endmenu | 781 | endmenu |
| 769 | 782 | ||
| 770 | source "arch/arm/common/Kconfig" | 783 | source "arch/arm/common/Kconfig" |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index fc81159596fe..370baa7a0f08 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
| @@ -188,6 +188,12 @@ __v7_setup: | |||
| 188 | orr r10, r10, #(1 << 6) @ set IBE to 1 | 188 | orr r10, r10, #(1 << 6) @ set IBE to 1 |
| 189 | mcr p15, 0, r10, c1, c0, 1 @ write aux control register | 189 | mcr p15, 0, r10, c1, c0, 1 @ write aux control register |
| 190 | #endif | 190 | #endif |
| 191 | #ifdef CONFIG_ARM_ERRATA_458693 | ||
| 192 | mrc p15, 0, r10, c1, c0, 1 @ read aux control register | ||
| 193 | orr r10, r10, #(1 << 5) @ set L1NEON to 1 | ||
| 194 | orr r10, r10, #(1 << 9) @ set PLDNOP to 1 | ||
| 195 | mcr p15, 0, r10, c1, c0, 1 @ write aux control register | ||
| 196 | #endif | ||
| 191 | mov r10, #0 | 197 | mov r10, #0 |
| 192 | #ifdef HARVARD_CACHE | 198 | #ifdef HARVARD_CACHE |
| 193 | mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate | 199 | mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate |
