arm: Turn of d-cache before i-cache
Booting the kernel fails on RK3288 (and probably other rockchip SoCs) when the i-cache is disabled/flushed before d-cache. I have not investigated whether this is due to U-Boot hanging or whether it's very early in the linux boot, but following the approach of the various rockchip U-Boot forks (first disable d-cache then i-cache) makes things work. Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
6460fc42a1
commit
81b0618ddf
|
|
@ -36,12 +36,6 @@ int cleanup_before_linux_select(int flags)
|
||||||
disable_interrupts();
|
disable_interrupts();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Turn off I-cache and invalidate it
|
|
||||||
*/
|
|
||||||
icache_disable();
|
|
||||||
invalidate_icache_all();
|
|
||||||
|
|
||||||
if (flags & CBL_DISABLE_CACHES) {
|
if (flags & CBL_DISABLE_CACHES) {
|
||||||
/*
|
/*
|
||||||
* turn off D-cache
|
* turn off D-cache
|
||||||
|
|
@ -61,7 +55,16 @@ int cleanup_before_linux_select(int flags)
|
||||||
* to avoid coherency problems for kernel
|
* to avoid coherency problems for kernel
|
||||||
*/
|
*/
|
||||||
invalidate_dcache_all();
|
invalidate_dcache_all();
|
||||||
|
|
||||||
|
icache_disable();
|
||||||
|
invalidate_icache_all();
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
|
* Turn off I-cache and invalidate it
|
||||||
|
*/
|
||||||
|
icache_disable();
|
||||||
|
invalidate_icache_all();
|
||||||
|
|
||||||
flush_dcache_all();
|
flush_dcache_all();
|
||||||
invalidate_icache_all();
|
invalidate_icache_all();
|
||||||
icache_enable();
|
icache_enable();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue