mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-17 22:49:02 +00:00
microblaze: cache: introduce flush_cache_all()
All flush_cache() calls in microblaze code are supposed to flush the entire instruction and data caches, so introduce flush_cache_all() helper to handle this. Also, provide implementations for flush_dcache_all() and invalidate_icache_all() so that icache and dcache u-boot commands can work. Signed-off-by: Ovidiu Panait <ovpanait@gmail.com> Link: https://lore.kernel.org/r/20220531181435.3473549-9-ovpanait@gmail.com Signed-off-by: Michal Simek <michal.simek@amd.com>
This commit is contained in:
parent
84488fc693
commit
b195134984
4 changed files with 26 additions and 9 deletions
|
@ -24,6 +24,11 @@ static void __invalidate_icache(ulong addr, ulong size)
|
|||
}
|
||||
}
|
||||
|
||||
void invalidate_icache_all(void)
|
||||
{
|
||||
__invalidate_icache(0, CONFIG_XILINX_MICROBLAZE0_ICACHE_SIZE);
|
||||
}
|
||||
|
||||
static void __flush_dcache(ulong addr, ulong size)
|
||||
{
|
||||
if (CONFIG_IS_ENABLED(XILINX_MICROBLAZE0_USE_WDC)) {
|
||||
|
@ -38,6 +43,11 @@ static void __flush_dcache(ulong addr, ulong size)
|
|||
}
|
||||
}
|
||||
|
||||
void flush_dcache_all(void)
|
||||
{
|
||||
__flush_dcache(0, CONFIG_XILINX_MICROBLAZE0_DCACHE_SIZE);
|
||||
}
|
||||
|
||||
int dcache_status(void)
|
||||
{
|
||||
int i = 0;
|
||||
|
@ -65,7 +75,7 @@ void icache_enable(void)
|
|||
|
||||
void icache_disable(void)
|
||||
{
|
||||
__invalidate_icache(0, CONFIG_XILINX_MICROBLAZE0_ICACHE_SIZE);
|
||||
invalidate_icache_all();
|
||||
|
||||
MSRCLR(0x20);
|
||||
}
|
||||
|
@ -77,7 +87,7 @@ void dcache_enable(void)
|
|||
|
||||
void dcache_disable(void)
|
||||
{
|
||||
__flush_dcache(0, CONFIG_XILINX_MICROBLAZE0_DCACHE_SIZE);
|
||||
flush_dcache_all();
|
||||
|
||||
MSRCLR(0x80);
|
||||
}
|
||||
|
@ -87,3 +97,9 @@ void flush_cache(ulong addr, ulong size)
|
|||
__invalidate_icache(addr, size);
|
||||
__flush_dcache(addr, size);
|
||||
}
|
||||
|
||||
void flush_cache_all(void)
|
||||
{
|
||||
invalidate_icache_all();
|
||||
flush_dcache_all();
|
||||
}
|
||||
|
|
|
@ -98,9 +98,7 @@ uboot_sym_start:
|
|||
#endif
|
||||
|
||||
/* Flush cache before enable cache */
|
||||
addik r5, r0, 0
|
||||
addik r6, r0, CONFIG_XILINX_MICROBLAZE0_DCACHE_SIZE
|
||||
brlid r15, flush_cache
|
||||
brlid r15, flush_cache_all
|
||||
nop
|
||||
|
||||
/* enable instruction and data cache */
|
||||
|
@ -349,9 +347,7 @@ relocate_code:
|
|||
#endif
|
||||
|
||||
/* Flush caches to ensure consistency */
|
||||
addik r5, r0, 0
|
||||
addik r6, r0, CONFIG_XILINX_MICROBLAZE0_DCACHE_SIZE
|
||||
brlid r15, flush_cache
|
||||
brlid r15, flush_cache_all
|
||||
nop
|
||||
|
||||
2: addi r5, r31, 0 /* gd is initialized in board_r.c */
|
||||
|
|
|
@ -18,4 +18,9 @@
|
|||
#define ARCH_DMA_MINALIGN 16
|
||||
#endif
|
||||
|
||||
/**
|
||||
* flush_cache_all - flush the entire instruction/data caches
|
||||
*/
|
||||
void flush_cache_all(void);
|
||||
|
||||
#endif /* __MICROBLAZE_CACHE_H__ */
|
||||
|
|
|
@ -57,7 +57,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
|
|||
"(fake run for tracing)" : "");
|
||||
bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
|
||||
|
||||
flush_cache(0, CONFIG_XILINX_MICROBLAZE0_DCACHE_SIZE);
|
||||
flush_cache_all();
|
||||
|
||||
if (!fake) {
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue