2 * (C) Copyright 2011, Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
3 * (C) Copyright 2011, Julius Baxter <julius@opencores.org>
4 * (C) Copyright 2014, Franck Jullien <franck.jullien@gmail.com>
6 * SPDX-License-Identifier: GPL-2.0+
10 #include <asm-offsets.h>
11 #include <asm/spr-defs.h>
13 #define EXCEPTION_STACK_SIZE (128+128)
15 #define HANDLE_EXCEPTION \
16 l.addi r1, r1, -EXCEPTION_STACK_SIZE ;\
19 l.movhi r2,hi(_exception_handler) ;\
20 l.ori r2,r2,lo(_exception_handler) ;\
24 l.addi r1, r1, EXCEPTION_STACK_SIZE ;\
28 .section .vectors, "ax"
34 /* there is no guarantee r0 is hardwired to zero, clear it here */
36 /* reset stack and frame pointers */
40 /* set supervisor mode */
47 l.ori r8, r9, 0 /* Get _cur current address */
50 l.ori r3, r3, lo(_cur)
51 l.sfeq r8, r3 /* If we are running at the linked address */
52 l.bf _no_vector_reloc /* there is not need for relocation */
55 l.mfspr r4, r0, SPR_CPUCFGR
56 l.andi r4, r4, SPR_CPUCFGR_EVBARP /* Exception Vector Base Address Register present ? */
59 l.movhi r5, 0 /* Destination */
61 l.mfspr r4, r0, SPR_EVBAR
66 l.movhi r5, 0 /* Destination */
67 l.movhi r6, hi(__start) /* Length */
68 l.ori r6, r6, lo(__start)
82 l.movhi r3,hi(__start) /* source start offset */
83 l.ori r3,r3,lo(__start)
86 l.movhi r4,hi(_stext) /* dest start address */
87 l.ori r4,r4,lo(_stext)
88 l.movhi r5,hi(__end) /* dest end address */
97 l.addi r4,r4,4 /* delay slot */
100 l.ori r4,r4,lo(_start)
108 /* data page fault */
112 /* instruction page fault */
124 /* illegal instruction */
128 /* external interrupt */
220 /* Startup routine */
224 /* Init stack and frame pointers */
225 l.movhi r1, hi(CONFIG_SYS_INIT_SP_ADDR)
226 l.ori r1, r1, lo(CONFIG_SYS_INIT_SP_ADDR)
229 /* clear BSS segments */
230 l.movhi r4, hi(_bss_start)
231 l.ori r4, r4, lo(_bss_start)
232 l.movhi r5, hi(_bss_end)
233 l.ori r5, r5, lo(_bss_end)
240 /* Reset registers before jumping to board_init */
273 .size _start, .-_start
276 * Store state onto stack and call the real exception handler
279 .extern exception_handler
280 .type _exception_handler,@function
283 /* Store state (r2 and r9 already saved)*/
313 /* Save return address */
315 /* Call exception handler with the link address as argument */
316 l.jal exception_handler
318 /* Load return address */