ARM: errata: 716044: an uncacheable load multiple can cause a deadlock.
Krishna Reddy [Wed, 11 Apr 2012 18:20:20 +0000 (11:20 -0700)]
Under some rare circumstances, an uncacheable load multiple
instruction (LDRD, LDM, VLDM, VLD1, VLD2, VLD3, VLD4) can cause
a processor deadlock.

Change-Id: Ibd79aa8182dce37d0be9892f2310735e1123618a
Signed-off-by: Krishna Reddy <vdumpa@nvidia.com>
Reviewed-on: http://git-master/r/95914
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>

arch/arm/Kconfig
arch/arm/mm/proc-v7.S

index 79f63ef..e48d5ad 100644 (file)
@@ -1242,6 +1242,14 @@ config ARM_ERRATA_460075
          ACTLR register. Note that setting specific bits in the ACTLR register
          may not be available in non-secure mode.
 
+config ARM_ERRATA_716044
+       bool "ARM errata: an uncacheable load multiple instruction can cause a deadlock"
+       depends on CPU_V7
+       help
+        Under some rare circumstances, an uncacheable load multiple
+        instruction (LDRD, LDM, VLDM, VLD1, VLD2, VLD3, VLD4) can cause
+        a processor deadlock.
+
 config ARM_ERRATA_742230
        bool "ARM errata: DMB operation may be faulty"
        depends on CPU_V7 && SMP
index 0120b92..e8107e7 100644 (file)
@@ -421,6 +421,12 @@ __v7_setup:
        mrcge   p15, 0, r10, c15, c0, 0         @ read power control register
        orrge   r10, r10, #1                    @ enable dynamic clock gating
        mcrge   p15, 0, r10, c15, c0, 0         @ write power control register
+#ifdef CONFIG_ARM_ERRATA_716044
+       cmp     r6, #0x12                       @ present in r1p0 - r1p2
+       mrcle   p15, 0, r10, c1, c0, 0
+       orrle   r10, r10, #(1 << 14)            @ set SCTLR.RR
+       mcrle   p15, 0, r10, c1, c0, 0
+#endif
 #ifdef CONFIG_ARM_ERRATA_720791
        teq     r5, #0x00100000                 @ only present in r1p*
        mrceq   p15, 0, r10, c15, c0, 2         @ read "chicken power ctrl" reg