From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Chou Date: Tue, 13 Oct 2015 21:16:28 +0800 Subject: [U-Boot] [PATCH v2] nios2: convert copy_exception_trampoline to use dm cpu data In-Reply-To: <1444114536-21999-1-git-send-email-thomas@wytron.com.tw> References: <1444016343-8234-1-git-send-email-thomas@wytron.com.tw> <1444114536-21999-1-git-send-email-thomas@wytron.com.tw> Message-ID: <561D042C.7080304@wytron.com.tw> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 10/06/2015 02:55 PM, Thomas Chou wrote: > Convert copy_exception_trampoline() to use dm cpu data. > > Signed-off-by: Thomas Chou > --- > 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) >