diff options
author | vdumpa <vdumpa@nvidia.com> | 2011-04-27 11:11:44 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:48:58 -0800 |
commit | eabc12e1afe0bfc2f9e6f7bacae03985439df1a2 (patch) | |
tree | 0ede98e6d08da13df83e341c0af5916d8d716f73 /arch/arm | |
parent | cef66e78ac6ff7973d894ae6476b17268de3ff19 (diff) |
ARM: errata: 752520: Faulty arbitration between PLD and Cacheable TLB requests may create a system deadlock.
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.
This workaround sets a bit in the diagnostic register of the Cortex-A9,
causing PLD operations treated as NOP.
(cherry-picked from b501cafea7328bc578f67e3e846ab9d25b7ec1b0)
Change-Id: Ic4039b83de43530bae7ce705162441bea74e1e98
Reviewed-on: http://git-master/r/54095
Reviewed-by: Krishna Reddy <vdumpa@nvidia.com>
Tested-by: Krishna Reddy <vdumpa@nvidia.com>
Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
Reviewed-by: Scott Williams <scwilliams@nvidia.com>
Rebase-Id: Ra35e48e21c1d62b6480a9d67d1413dd5d0df3f53
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7.S | 6 |
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 |