We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello everyone, I'm analysing u-boot for s3c2440(arm920t), and at the first stage u-boot does something like this:
mov R0, #0 mcr P15, 0, R0, C7, C7, 0 ; flush v3/v4 caches mcr P15, 0, R0, C8, C7, 0 ; flush v4 TLB mrc P15, 0, R0, C1, C0, 0 bic R0, R0, #0x00000087 ; clear bits 7, 2:0, disable MMU, D-cache, Data Address Alignement ... mcr P15, 0, R0, C1, C0, 0
mov R0, #0
mcr P15, 0, R0, C7, C7, 0 ; flush v3/v4 caches
mcr P15, 0, R0, C8, C7, 0 ; flush v4 TLB
mrc P15, 0, R0, C1, C0, 0
bic R0, R0, #0x00000087 ; clear bits 7, 2:0, disable MMU, D-cache, Data Address Alignement
...
mcr P15, 0, R0, C1, C0, 0
what's the difference between flush and disable cache? And v3/v4 caches mean what? Thank you in advance for any information.
> But the bootloader is initialising the hardware, there may not be anything important in the cache.
U-boot is rarely the first level of boot in an ARM system - there is usually some form of ROM-based bootloader which runs first and sets up DDR controllers, flash controllers, etc. In many systems this may enable caches to accelerate the boot process.
If caches are not enabled, then the steps u-boot takes to "disable them" are benign and do nothing.
HTH,
Pete