Port-arm archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
L2 cache has to be disabled in the efi boot case
Hi,
the DE0 nano soc refuses to boot since it has been switched to an EFI
boot. The reason is that the L2 cache is used by u-boot in EFI mode and
remains active when the kernel is launched. This results in random
chunks of 32 bytes to contain random code, notably in the kernel.
I suspect at least any Cortex A9(/A5?) platform will have this problem.
The following quick and dirty patch in sys/arch/arm/arm/armv6_start.S
makes the kernel boot for me from EFI. However, the 0xfffef000 base
address is Cyclone V specific and at this point in the boot process, we
haven't yet decided which platform we run on.
Is there an EFI way to flush and disable the L2 cache or do we need to
find another way around?
Regards,
Aymeric
tst r0, #CPU_CONTROL_DC_ENABLE
blne armv7_dcache_wbinv_all
+ movw r1, #:lower16:0xfffef000
+ movt r1, #:upper16:0xfffef000
+ mov r2, #0x1
+ ldr r0, [r1, #0x100]
+ tst r0, r2
+ beq 1f
+
+ mov r2, #0xff
+ str r2, [r1, #0x7fc] // flush and inval all ways
+2:
+ ldr r0, [r1, #0x7fc] // wait for completion
+ tst r0, r2
+ bne 2b
+
+ ldr r0, [r1, #0x100] // disable L2$
+ mov r2, #0x1
+ bic r0, r2
+ str r0, [r1, #0x100]
+1:
+
// TeX remap
#define ARMV7_SCTLR_CLEAR ( \
Home |
Main Index |
Thread Index |
Old Index