Commit 9a27916f authored by Catalin Marinas's avatar Catalin Marinas

Enable partial low interrupt latency mode for ARM1136

This patch is a workaround for the 364296 ARM1136 r0pX errata
(possible cache data corruption with hit-under-miss enabled). It sets
the undocumented bit 31 in the auxiliary control register and the FI bit in
the control register, thus disabling hit-under-miss without putting the
processor into full low interrupt latency mode.
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>


parent 2690a0df
......@@ -514,6 +514,19 @@ if !MMU
source "arch/arm/Kconfig-nommu"
endif
config ARM_ERRATA_364296
bool "Enable partial low interrupt latency mode for ARM1136"
depends on CPU_V6 && !SMP
default n
help
This options enables the workaround for the 364296 ARM1136
r0pX errata (possible cache data corruption with
hit-under-miss enabled). It sets the undocumented bit 31 in
the auxiliary control register and the FI bit in the control
register, thus disabling hit-under-miss without putting the
processor into full low interrupt latency mode. ARM11MPCore
is not affected.
endmenu
source "arch/arm/common/Kconfig"
......
......@@ -204,6 +204,22 @@ __v6_setup:
mrc p15, 0, r0, c1, c0, 0 @ read control register
bic r0, r0, r5 @ clear bits them
orr r0, r0, r6 @ set them
#ifdef CONFIG_ARM_ERRATA_364296
/* Workaround for the 364296 ARM1136 r0pX errata (possible cache data
* corruption with hit-under-miss enabled). The conditional code below
* (setting the undocumented bit 31 in the auxiliary control register
* and the FI bit in the control register) disables hit-under-miss
* without putting the processor into full low interrupt latency mode.
*/
ldr r6, =0x4107b360 @ id for ARM1136 r0pX
mrc p15, 0, r5, c0, c0, 0 @ get processor id
bic r5, r5, #0xf @ mask out part bits [3:0]
teq r5, r6 @ check for the faulty core
mrceq p15, 0, r5, c1, c0, 1 @ load aux control reg
orreq r5, r5, #(1 << 31) @ set the undocumented bit 31
mcreq p15, 0, r5, c1, c0, 1 @ write aux control reg
orreq r0, r0, #(1 << 21) @ low interrupt latency configuration
#endif
mov pc, lr @ return to head.S:__ret
/*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment