microblaze: Fix microblaze init vectors
authorMichal Simek <monstr@monstr.eu>
Thu, 10 Mar 2011 09:51:27 +0000 (10:51 +0100)
committerMichal Simek <monstr@monstr.eu>
Tue, 15 Mar 2011 09:58:34 +0000 (10:58 +0100)
Microblaze vector table stores several vectors (reset, user exception,
interrupt, debug exception and hardware exception).
All these functions can be below address 0x10000. If they are, wrong
vector table is genarated because jump is not setup from two instructions
(imm upper 16bit and brai lower 16bit).
Adding specific offset prevent problem if address is below 0x10000.
For this case only brai instruction is used.

Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/kernel/entry.S

index e3c8d69e248bdfde220ccd588cbdb859bf76c2c3..d68a397e39361ee8ff144b9f28f8584f183393f2 100644 (file)
@@ -998,10 +998,13 @@ ENTRY(_reset)
        /* in current MMU branch you don't care what is here - it is
         * used from bootloader site - but this is correct for FS-BOOT */
        brai    0x70
-       nop
+       .org    0x8
        brai    TOPHYS(_user_exception); /* syscall handler */
+       .org    0x10
        brai    TOPHYS(_interrupt);     /* Interrupt handler */
+       .org    0x18
        brai    TOPHYS(_debug_exception);       /* debug trap handler */
+       .org    0x20
        brai    TOPHYS(_hw_exception_handler);  /* HW exception handler */
 
 .section .rodata,"a"