Răsfoiți Sursa

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
Wolfgang Denk 13 ani în urmă
părinte
comite
636f77a5a6

+ 19 - 3
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,12 +500,26 @@ 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
 
 /*

+ 2 - 0
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 */

+ 1 - 1
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",