]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ARM: 7541/1: Add ARM ERRATA 775420 workaround
authorSimon Horman <horms@verge.net.au>
Fri, 28 Sep 2012 01:12:45 +0000 (02:12 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 28 Sep 2012 20:11:49 +0000 (21:11 +0100)
arm: Add ARM ERRATA 775420 workaround

Workaround for the 775420 Cortex-A9 (r2p2, r2p6,r2p8,r2p10,r3p0) erratum.
In case a date cache maintenance operation aborts with MMU exception, it
might cause the processor to deadlock. This workaround puts DSB before
executing ISB if an abort may occur on cache maintenance.

Based on work by Kouei Abe and feedback from Catalin Marinas.

Signed-off-by: Kouei Abe <kouei.abe.cp@rms.renesas.com>
[ horms@verge.net.au: Changed to implementation
  suggested by catalin.marinas@arm.com ]
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/Kconfig
arch/arm/mm/cache-v7.S

index 2f88d8d9770116014f7ff55e80d98c65fbb191ed..48c19d44be9a4a9ef4db74ffadd6f0132c459546 100644 (file)
@@ -1413,6 +1413,16 @@ config PL310_ERRATA_769419
          on systems with an outer cache, the store buffer is drained
          explicitly.
 
+config ARM_ERRATA_775420
+       bool "ARM errata: A data cache maintenance operation which aborts, might lead to deadlock"
+       depends on CPU_V7
+       help
+        This option enables the workaround for the 775420 Cortex-A9 (r2p2,
+        r2p6,r2p8,r2p10,r3p0) erratum. In case a date cache maintenance
+        operation aborts with MMU exception, it might cause the processor
+        to deadlock. This workaround puts DSB before executing ISB if
+        an abort may occur on cache maintenance.
+
 endmenu
 
 source "arch/arm/common/Kconfig"
index 39e3fb3db80123b1f276f811f8b26921e77564ee..3b172275262e2c87070af4047a1123c2a6a1a6aa 100644 (file)
@@ -211,6 +211,9 @@ ENTRY(v7_coherent_user_range)
  * isn't mapped, fail with -EFAULT.
  */
 9001:
+#ifdef CONFIG_ARM_ERRATA_775420
+       dsb
+#endif
        mov     r0, #-EFAULT
        mov     pc, lr
  UNWIND(.fnend         )