
On 10/06/2015 02:55 PM, Thomas Chou wrote:
Convert copy_exception_trampoline() to use dm cpu data.
Signed-off-by: Thomas Chou thomas@wytron.com.tw
v2 fix exception address references.
arch/nios2/cpu/cpu.c | 24 ++++++++++++++++++++++++ arch/nios2/cpu/start.S | 24 +----------------------- 2 files changed, 25 insertions(+), 23 deletions(-)
Applied to u-boot-nios.
diff --git a/arch/nios2/cpu/cpu.c b/arch/nios2/cpu/cpu.c index 229a07b..5403c0d 100644 --- a/arch/nios2/cpu/cpu.c +++ b/arch/nios2/cpu/cpu.c @@ -44,6 +44,27 @@ void dcache_disable(void) flush_dcache(CONFIG_SYS_DCACHE_SIZE, CONFIG_SYS_DCACHELINE_SIZE); }
+/*
- COPY EXCEPTION TRAMPOLINE -- copy the tramp to the
- exception address. Define CONFIG_ROM_STUBS to prevent
- the copy (e.g. exception in flash or in other
- softare/firmware component).
- */
+#ifndef CONFIG_ROM_STUBS +static void copy_exception_trampoline(void) +{
- extern int _except_start, _except_end;
- void *except_target = (void *)gd->arch.exception_addr;
- if (&_except_start != except_target) {
memcpy(except_target, &_except_start,
&_except_end - &_except_start);
flush_cache(gd->arch.exception_addr,
&_except_end - &_except_start);
- }
+} +#endif
- int arch_cpu_init_dm(void) { struct udevice *dev;
@@ -56,6 +77,9 @@ int arch_cpu_init_dm(void) return -ENODEV;
gd->ram_size = CONFIG_SYS_SDRAM_SIZE; +#ifndef CONFIG_ROM_STUBS
- copy_exception_trampoline();
+#endif
return 0; } diff --git a/arch/nios2/cpu/start.S b/arch/nios2/cpu/start.S index 6c7c777..90e0310 100644 --- a/arch/nios2/cpu/start.S +++ b/arch/nios2/cpu/start.S @@ -14,7 +14,7 @@ ************************************************************************/
.text
- .global _start
.global _start, _except_start, _except_end
_start: wrctl status, r0 /* Disable interrupts */
@@ -89,28 +89,6 @@ _cur: movhi r5, %hi(_cur - _start) jmp r4 _reloc:
- /* COPY EXCEPTION TRAMPOLINE -- copy the tramp to the
* exception address. Define CONFIG_ROM_STUBS to prevent
* the copy (e.g. exception in flash or in other
* softare/firmware component).
*/
-#if !defined(CONFIG_ROM_STUBS)
- movhi r4, %hi(_except_start)
- ori r4, r4, %lo(_except_start)
- movhi r5, %hi(_except_end)
- ori r5, r5, %lo(_except_end)
- movhi r6, %hi(CONFIG_SYS_EXCEPTION_ADDR)
- ori r6, r6, %lo(CONFIG_SYS_EXCEPTION_ADDR)
- beq r4, r6, 7f /* Skip if at proper addr */
-6: ldwio r7, 0(r4)
- stwio r7, 0(r6)
- addi r4, r4, 4
- addi r6, r6, 4
- bne r4, r5, 6b
-7: -#endif
- /* STACK INIT -- zero top two words for call back chain. */ movhi sp, %hi(CONFIG_SYS_INIT_SP)