[U-Boot] ELF_RELOC causes strange I-cache issues
Albert Aribaud
albert.aribaud at free.fr
Thu Oct 21 11:18:01 CEST 2010
Wolfgang (and others who can/want),
Please test this patch; it should add a complete barrier to make
sure that all fixups are written to RAM before jumping there, and
that no remnants subsist of the old unfixed code in the instruction
paths. However, I cannot even do basic testing on it as I have
no 1136 board, so I cannot rule out even basic mistakes.
When this works I'll do a proper [PATCH].
Amicalement,
Albert.
diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
index 8b63192..f49f1de 100644
--- a/arch/arm/cpu/arm1136/start.S
+++ b/arch/arm/cpu/arm1136/start.S
@@ -257,6 +257,11 @@ fixloop:
add r2, r2, #4
cmp r2, r3
bne fixloop
+ /* fixups done, cleanup caches if used and prefetch buffer */
+ mov r3, #0
+ mcr p15, 0, r3, c7, c10, 4 /* data synchronization barrier */
+ mcr p15, 0, r3, c7, c5, 0 /* invalidate instruction cache */
+ mcr p15, 0, r3, c7, c5, 4 /* flush prefetch buffer */
#endif
#endif /* #ifndef CONFIG_SKIP_RELOCATE_UBOOT */
--
1.7.1
More information about the U-Boot
mailing list