Skip to content

Commit 0fc03d4

Browse files
author
Russell King
committed
ARM: SMP enable of cache maintanence broadcast
Masahiro Yamada reports that we can fail to set the FW bit in the auxiliary control register, which enables broadcasting the cache maintanence operations. This occurs because we only check that the SMP/nAMP bit is set, rather than checking whether all the bits we want to be set are set. Rearrange the code to ensure that all desired bits are set, and only update the register if we discover some required bits are not set. Tested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
1 parent f55532a commit 0fc03d4

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

arch/arm/mm/proc-v7.S

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,12 @@ __v7_ca17mp_setup:
281281
bl v7_invalidate_l1
282282
ldmia r12, {r1-r6, lr}
283283
#ifdef CONFIG_SMP
284+
orr r10, r10, #(1 << 6) @ Enable SMP/nAMP mode
284285
ALT_SMP(mrc p15, 0, r0, c1, c0, 1)
285-
ALT_UP(mov r0, #(1 << 6)) @ fake it for UP
286-
tst r0, #(1 << 6) @ SMP/nAMP mode enabled?
287-
orreq r0, r0, #(1 << 6) @ Enable SMP/nAMP mode
288-
orreq r0, r0, r10 @ Enable CPU-specific SMP bits
289-
mcreq p15, 0, r0, c1, c0, 1
286+
ALT_UP(mov r0, r10) @ fake it for UP
287+
orr r10, r10, r0 @ Set required bits
288+
teq r10, r0 @ Were they already set?
289+
mcrne p15, 0, r10, c1, c0, 1 @ No, update register
290290
#endif
291291
b __v7_setup_cont
292292

0 commit comments

Comments
 (0)