On Wed, May 15, 2013 at 3:26 PM, Albert ARIBAUD <[email protected]> wrote: > Hi Rob, > > On Wed, 15 May 2013 14:56:07 -0500, Rob Herring <[email protected]> > wrote: > >> From: Rob Herring <[email protected]> >> >> interrupt_init also sets up the abort stack, but is not setup before >> relocation. So any aborts during relocation will hang and not print out >> any useful information. Fix this by moving the interrupt_init to after >> the stack setup in board_init_f. >> >> Signed-off-by: Rob Herring <[email protected]> >> --- >> arch/arm/lib/board.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c >> index 09ab4ad..6dbe7e2 100644 >> --- a/arch/arm/lib/board.c >> +++ b/arch/arm/lib/board.c >> @@ -447,6 +447,7 @@ void board_init_f(ulong bootflag) >> addr_sp += 128; /* leave 32 words for abort-stack */ >> gd->irq_sp = addr_sp; >> #endif >> + interrupt_init(); >> >> debug("New Stack Pointer is: %08lx\n", addr_sp); >> > > I fail to understand how this is even supposed to work through > relocation: exception vectors are not relocated, so if they work before > relocation, then they won't work any more afterward unless some code is > added to relocate them.
They work before and after in my testing. The vectors are relocated along with the rest of u-boot and the vector base is updated by c_runtime_cpu_setup. I'm simply setting up the abort stack earlier. An alternative would be to setup a different abort handler and stack before relocation. I'm open to suggestions, but as it stands now aborts before or during relocation will simply hang without this. > Also: if this patch is moving interrupt_init(), then where is the line > where a call to interrupt_init() is removed? Yes, the later call to interrupt_init should be removed assuming we keep this approach. Rob _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

