aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2009-04-30 12:06:15 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-04-30 15:12:59 -0400
commit855c551f5b8cc3815d58e1056c1f1e7c461e2d24 (patch)
treec2a84666b3a86c3e5cb5272ed42b802f9411ec33 /arch
parent7ce236fcd6fd45b0441a2d49acb2ceb2de2e8a47 (diff)
[ARM] 5490/1: ARM errata: Processor deadlock when a false hazard is created
This patch adds a workaround for the 458693 Cortex-A8 (r2p0) erratum. It sets the corresponding bits in the auxiliary control register so that the PLD instruction becomes a NOP. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/Kconfig13
-rw-r--r--arch/arm/mm/proc-v7.S6
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
768config 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
768endmenu 781endmenu
769 782
770source "arch/arm/common/Kconfig" 783source "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