summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/Kconfig9
-rw-r--r--arch/arm/mm/proc-v7.S6
2 files changed, 15 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index c5aa77fe42b0..973dbbb63f11 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1312,6 +1312,15 @@ config ARM_ERRATA_720791
This workaround disables gating the Core clock when the Instruction
side is waiting for a Page Table Walk answer or linefill completion.
+config ARM_ERRATA_752520
+ bool "ARM errata: Faulty arbitration between PLD and Cacheable TLB requests may create a system deadlock"
+ depends on CPU_V7
+ help
+ Under rare circumstances, PLDs may interfere with a Cacheable page table walk,
+ creating a processor deadlock. The erratum can only happen when the Data Cache
+ and MMU are enabled, with the TLB descriptors marked as L1 cacheable,
+ so that Page Table Walks are performed as cache linefills.
+
endmenu
source "arch/arm/common/Kconfig"
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 8c165d905461..f85116d422d8 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -551,6 +551,12 @@ __v7_setup:
orrlt r10, r10, #1 << 11 @ set bit #11
mcrlt p15, 0, r10, c15, c0, 1 @ write diagnostic register
#endif
+#ifdef CONFIG_ARM_ERRATA_752520
+ cmp r6, #0x29 @ present prior to r2p9
+ mrclt p15, 0, r10, c15, c0, 1 @ read diagnostic register
+ orrlt r10, r10, #1 << 20 @ set bit #20
+ mcrlt p15, 0, r10, c15, c0, 1 @ write diagnostic register
+#endif
3: mov r10, #0
#ifdef HARVARD_CACHE