From: James S. <jsi...@us...> - 2002-02-19 17:43:07
|
Update of /cvsroot/linux-mips/linux/arch/mips64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv7093/arch/mips64/kernel Modified Files: traps.c Log Message: Unify show_regs() for all 64-bit processors. Index: traps.c =================================================================== RCS file: /cvsroot/linux-mips/linux/arch/mips64/kernel/traps.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- traps.c 28 Jan 2002 20:31:57 -0000 1.12 +++ traps.c 19 Feb 2002 17:43:02 -0000 1.13 @@ -166,6 +166,50 @@ } } +void show_regs(struct pt_regs *regs) +{ + printk("Cpu %d\n", smp_processor_id()); + /* Saved main processor registers. */ + printk("$0 : %016lx %016lx %016lx %016lx\n", + 0UL, regs->regs[1], regs->regs[2], regs->regs[3]); + printk("$4 : %016lx %016lx %016lx %016lx\n", + regs->regs[4], regs->regs[5], regs->regs[6], regs->regs[7]); + printk("$8 : %016lx %016lx %016lx %016lx\n", + regs->regs[8], regs->regs[9], regs->regs[10], regs->regs[11]); + printk("$12 : %016lx %016lx %016lx %016lx\n", + regs->regs[12], regs->regs[13], regs->regs[14], regs->regs[15]); + printk("$16 : %016lx %016lx %016lx %016lx\n", + regs->regs[16], regs->regs[17], regs->regs[18], regs->regs[19]); + printk("$20 : %016lx %016lx %016lx %016lx\n", + regs->regs[20], regs->regs[21], regs->regs[22], regs->regs[23]); + printk("$24 : %016lx %016lx\n", + regs->regs[24], regs->regs[25]); + printk("$28 : %016lx %016lx %016lx %016lx\n", + regs->regs[28], regs->regs[29], regs->regs[30], regs->regs[31]); + printk("Hi : %016lx\n", regs->hi); + printk("Lo : %016lx\n", regs->lo); + + /* Saved cp0 registers. */ + printk("epc : %016lx %s\nbadvaddr: %016lx\n", + regs->cp0_epc, print_tainted(), regs->cp0_badvaddr); + printk("Status : %08x [ ", (unsigned int) regs->cp0_status); + if (regs->cp0_status & ST0_KX) printk("KX "); + if (regs->cp0_status & ST0_SX) printk("SX "); + if (regs->cp0_status & ST0_UX) printk("UX "); + switch (regs->cp0_status & ST0_KSU) { + case KSU_USER: printk("USER "); break; + case KSU_SUPERVISOR: printk("SUPERVISOR "); break; + case KSU_KERNEL: printk("KERNEL "); break; + default: printk("BAD_MODE "); break; + } + if (regs->cp0_status & ST0_ERL) printk("ERL "); + if (regs->cp0_status & ST0_EXL) printk("EXL "); + if (regs->cp0_status & ST0_IE) printk("IE "); + printk("]\n"); + + printk("Cause : %08x\n", (unsigned int) regs->cp0_cause); +} + static spinlock_t die_lock; void die(const char * str, struct pt_regs * regs) @@ -545,6 +589,7 @@ { unsigned long handler = (unsigned long) addr; exception_handlers[n] = handler; + if (n == 0 && mips_cpu.options & MIPS_CPU_DIVEC) { *(volatile u32 *)(KSEG0+0x200) = 0x08000000 | (0x03ffffff & (handler >> 2)); @@ -618,7 +663,7 @@ /* Enable timer interrupt and scd mapped interrupt */ clear_cp0_status(0xf000); set_cp0_status(0xc00); - break; + goto nocache; case CPU_R10000: case CPU_R4000MC: @@ -632,19 +677,20 @@ case CPU_R4600: case CPU_R5000: case CPU_NEVADA: + /* Cache error vector */ + memcpy((void *)(KSEG0 + 0x100), (void *) KSEG0, 0x80); + +nocache: /* Debug TLB refill handler. */ memcpy((void *)KSEG0, &except_vec0, 0x80); memcpy((void *)KSEG0 + 0x080, &except_vec1_r10k, 0x80); - /* Cache error vector */ - memcpy((void *)(KSEG0 + 0x100), (void *) KSEG0, 0x80); - if (mips_cpu.options & MIPS_CPU_VCE) { memcpy((void *)(KSEG0 + 0x180), &except_vec3_r4000, - 0x180); + 0x80); } else { memcpy((void *)(KSEG0 + 0x180), &except_vec3_generic, - 0x100); + 0x80); } set_except_vector(1, __xtlb_mod); |