diff options
author | Wolfgang Denk <wd@denx.de> | 2012-03-23 21:57:50 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2012-03-23 21:57:50 +0100 |
commit | 636f77a5a6cd40581a9faf16c0fa748e30c48ade (patch) | |
tree | c3e38e93fd783a4772f60b2d1d9f245df2f15ca0 | |
parent | 3fa4977a9ec7a2e1c7f8c098cbd857dec13936d1 (diff) | |
parent | 1a05bb3c2804980fa4fbcd2b7a05a2203308af55 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot-nds32
* 'master' of git://git.denx.de/u-boot-nds32:
nds32/n1213: correct vector table in start.S
nds32: fix ptrace and interrupt register overflow
-rw-r--r-- | arch/nds32/cpu/n1213/start.S | 22 | ||||
-rw-r--r-- | arch/nds32/include/asm/ptrace.h | 2 | ||||
-rw-r--r-- | arch/nds32/lib/interrupts.c | 2 |
3 files changed, 22 insertions, 4 deletions
diff --git a/arch/nds32/cpu/n1213/start.S b/arch/nds32/cpu/n1213/start.S index 1d1fcf77e4..889bf8b871 100644 --- a/arch/nds32/cpu/n1213/start.S +++ b/arch/nds32/cpu/n1213/start.S @@ -68,15 +68,17 @@ _start: j reset j tlb_not_present j tlb_misc j tlb_vlpt_miss - j cache_parity_error + j machine_error j debug j general_exception + j syscall j internal_interrupt ! H0I j internal_interrupt ! H1I j internal_interrupt ! H2I j internal_interrupt ! H3I j internal_interrupt ! H4I j internal_interrupt ! H5I + j software_interrupt ! S0I .balign 16 @@ -477,7 +479,7 @@ tlb_vlpt_miss: bal do_interruption .align 5 -cache_parity_error: +machine_error: SAVE_ALL move $r0, $sp ! To get the kernel stack li $r1, 5 ! Determine interruption type @@ -498,13 +500,27 @@ general_exception: bal do_interruption .align 5 -internal_interrupt: +syscall: SAVE_ALL move $r0, $sp ! To get the kernel stack li $r1, 8 ! Determine interruption type bal do_interruption .align 5 +internal_interrupt: + SAVE_ALL + move $r0, $sp ! To get the kernel stack + li $r1, 9 ! Determine interruption type + bal do_interruption + + .align 5 +software_interrupt: + SAVE_ALL + move $r0, $sp ! To get the kernel stack + li $r1, 10 ! Determine interruption type + bal do_interruption + + .align 5 /* * void reset_cpu(ulong addr); diff --git a/arch/nds32/include/asm/ptrace.h b/arch/nds32/include/asm/ptrace.h index 4336083ea8..ee181b2671 100644 --- a/arch/nds32/include/asm/ptrace.h +++ b/arch/nds32/include/asm/ptrace.h @@ -38,6 +38,8 @@ struct pt_regs { NDS32_REG d1hi; NDS32_REG d1lo; NDS32_REG r[26]; /* r0 - r25 */ + NDS32_REG p0; /* r26 - used by OS */ + NDS32_REG p1; /* r27 - used by OS */ NDS32_REG fp; /* r28 */ NDS32_REG gp; /* r29 */ NDS32_REG lp; /* r30 */ diff --git a/arch/nds32/lib/interrupts.c b/arch/nds32/lib/interrupts.c index 974d52a1a1..ca8c227b05 100644 --- a/arch/nds32/lib/interrupts.c +++ b/arch/nds32/lib/interrupts.c @@ -91,7 +91,7 @@ void show_regs(struct pt_regs *regs) printf("D1H: %08lx D1L: %08lx D0H: %08lx D0L: %08lx\n", regs->d1hi, regs->d1lo, regs->d0hi, regs->d0lo); printf("r27: %08lx r26: %08lx r25: %08lx r24: %08lx\n", - regs->r[27], regs->r[26], regs->r[25], regs->r[24]); + regs->p1, regs->p0, regs->r[25], regs->r[24]); printf("r23: %08lx r22: %08lx r21: %08lx r20: %08lx\n", regs->r[23], regs->r[22], regs->r[21], regs->r[20]); printf("r19: %08lx r18: %08lx r17: %08lx r16: %08lx\n", |