[U-Boot] [PATCH] nios2: flush dcache after relocating code in start.S

If we relocate the code, the data cache must be flushed before we jump to the new code.
Signed-off-by: Thomas Chou thomas@wytron.com.tw --- cpu/nios2/start.S | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/cpu/nios2/start.S b/cpu/nios2/start.S index 4b4c560..b0a51a8 100644 --- a/cpu/nios2/start.S +++ b/cpu/nios2/start.S @@ -106,6 +106,17 @@ _cur: movhi r5, %hi(_cur - _start) bne r5, r6, 2b 3:
+ /* DCACHE FLUSH -- after relocating code and data + */ + movhi r4, %hi(CONFIG_SYS_DCACHELINE_SIZE) + ori r4, r4, %lo(CONFIG_SYS_DCACHELINE_SIZE) + movhi r5, %hi(CONFIG_SYS_DCACHE_SIZE) + ori r5, r5, %lo(CONFIG_SYS_DCACHE_SIZE) + mov r6, r0 +1: flushd 0(r6) + add r6, r6, r4 + bltu r6, r5, 1b + /* ZERO BSS/SBSS -- bss and sbss are assumed to be adjacent * and between __bss_start and _end. */

If we relocate the code, the data cache must be flushed before we jump to the new code.
Signed-off-by: Thomas Chou thomas@wytron.com.tw --- cpu/nios2/start.S | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/cpu/nios2/start.S b/cpu/nios2/start.S index 31cd5b0..61784d8 100644 --- a/cpu/nios2/start.S +++ b/cpu/nios2/start.S @@ -98,6 +98,17 @@ _cur: movhi r5, %hi(_cur - _start) stwio r7, 0(r5) addi r5, r5, 4 bne r5, r6, 2b + + /* DCACHE FLUSH -- after relocating code and data + */ + movhi r4, %hi(CONFIG_SYS_DCACHELINE_SIZE) + ori r4, r4, %lo(CONFIG_SYS_DCACHELINE_SIZE) + movhi r5, %hi(CONFIG_SYS_DCACHE_SIZE) + ori r5, r5, %lo(CONFIG_SYS_DCACHE_SIZE) + mov r6, r0 +1: flushd 0(r6) + add r6, r6, r4 + bltu r6, r5, 1b 3:
/* ZERO BSS/SBSS -- bss and sbss are assumed to be adjacent

Hi Thomas,
Patch is reject.
diff --git a/cpu/nios2/start.S b/cpu/nios2/start.S index 31cd5b0..61784d8 100644 --- a/cpu/nios2/start.S +++ b/cpu/nios2/start.S @@ -98,6 +98,17 @@ _cur: movhi r5, %hi(_cur - _start) stwio r7, 0(r5)
--------^^^^^
The existing code uses stxio instructions, which by their very purpose, bypass the cache. So there's no need to flush the data cache.
One could argue that invalidating the _instruction_ cache may be necessary ... but I doubt it, given that first instructions after reset invalidate the entire instruction cache. It would be a defensive nevertheless.
Regards, --Scott
participants (2)
-
Scott McNutt
-
Thomas Chou