|
@@ -28,6 +28,7 @@
|
|
#include <linux/elfcore.h>
|
|
#include <linux/elfcore.h>
|
|
#include <linux/pm.h>
|
|
#include <linux/pm.h>
|
|
#include <linux/tick.h>
|
|
#include <linux/tick.h>
|
|
|
|
+#include <linux/utsname.h>
|
|
|
|
|
|
#include <asm/leds.h>
|
|
#include <asm/leds.h>
|
|
#include <asm/processor.h>
|
|
#include <asm/processor.h>
|
|
@@ -199,16 +200,19 @@ void machine_restart(char * __unused)
|
|
|
|
|
|
void __show_regs(struct pt_regs *regs)
|
|
void __show_regs(struct pt_regs *regs)
|
|
{
|
|
{
|
|
- unsigned long flags = condition_codes(regs);
|
|
|
|
|
|
+ unsigned long flags;
|
|
|
|
+ char buf[64];
|
|
|
|
|
|
- printk("CPU: %d\n", smp_processor_id());
|
|
|
|
|
|
+ printk("CPU: %d %s (%s %.*s)\n",
|
|
|
|
+ smp_processor_id(), print_tainted(), init_utsname()->release,
|
|
|
|
+ (int)strcspn(init_utsname()->version, " "),
|
|
|
|
+ init_utsname()->version);
|
|
print_symbol("PC is at %s\n", instruction_pointer(regs));
|
|
print_symbol("PC is at %s\n", instruction_pointer(regs));
|
|
print_symbol("LR is at %s\n", regs->ARM_lr);
|
|
print_symbol("LR is at %s\n", regs->ARM_lr);
|
|
- printk("pc : [<%08lx>] lr : [<%08lx>] %s\n"
|
|
|
|
|
|
+ printk("pc : [<%08lx>] lr : [<%08lx>] psr: %08lx\n"
|
|
"sp : %08lx ip : %08lx fp : %08lx\n",
|
|
"sp : %08lx ip : %08lx fp : %08lx\n",
|
|
- instruction_pointer(regs),
|
|
|
|
- regs->ARM_lr, print_tainted(), regs->ARM_sp,
|
|
|
|
- regs->ARM_ip, regs->ARM_fp);
|
|
|
|
|
|
+ regs->ARM_pc, regs->ARM_lr, regs->ARM_cpsr,
|
|
|
|
+ regs->ARM_sp, regs->ARM_ip, regs->ARM_fp);
|
|
printk("r10: %08lx r9 : %08lx r8 : %08lx\n",
|
|
printk("r10: %08lx r9 : %08lx r8 : %08lx\n",
|
|
regs->ARM_r10, regs->ARM_r9,
|
|
regs->ARM_r10, regs->ARM_r9,
|
|
regs->ARM_r8);
|
|
regs->ARM_r8);
|
|
@@ -218,36 +222,39 @@ void __show_regs(struct pt_regs *regs)
|
|
printk("r3 : %08lx r2 : %08lx r1 : %08lx r0 : %08lx\n",
|
|
printk("r3 : %08lx r2 : %08lx r1 : %08lx r0 : %08lx\n",
|
|
regs->ARM_r3, regs->ARM_r2,
|
|
regs->ARM_r3, regs->ARM_r2,
|
|
regs->ARM_r1, regs->ARM_r0);
|
|
regs->ARM_r1, regs->ARM_r0);
|
|
- printk("Flags: %c%c%c%c",
|
|
|
|
- flags & PSR_N_BIT ? 'N' : 'n',
|
|
|
|
- flags & PSR_Z_BIT ? 'Z' : 'z',
|
|
|
|
- flags & PSR_C_BIT ? 'C' : 'c',
|
|
|
|
- flags & PSR_V_BIT ? 'V' : 'v');
|
|
|
|
- printk(" IRQs o%s FIQs o%s Mode %s%s Segment %s\n",
|
|
|
|
- interrupts_enabled(regs) ? "n" : "ff",
|
|
|
|
|
|
+
|
|
|
|
+ flags = regs->ARM_cpsr;
|
|
|
|
+ buf[0] = flags & PSR_N_BIT ? 'N' : 'n';
|
|
|
|
+ buf[1] = flags & PSR_Z_BIT ? 'Z' : 'z';
|
|
|
|
+ buf[2] = flags & PSR_C_BIT ? 'C' : 'c';
|
|
|
|
+ buf[3] = flags & PSR_V_BIT ? 'V' : 'v';
|
|
|
|
+ buf[4] = '\0';
|
|
|
|
+
|
|
|
|
+ printk("Flags: %s IRQs o%s FIQs o%s Mode %s%s Segment %s\n",
|
|
|
|
+ buf, interrupts_enabled(regs) ? "n" : "ff",
|
|
fast_interrupts_enabled(regs) ? "n" : "ff",
|
|
fast_interrupts_enabled(regs) ? "n" : "ff",
|
|
processor_modes[processor_mode(regs)],
|
|
processor_modes[processor_mode(regs)],
|
|
thumb_mode(regs) ? " (T)" : "",
|
|
thumb_mode(regs) ? " (T)" : "",
|
|
get_fs() == get_ds() ? "kernel" : "user");
|
|
get_fs() == get_ds() ? "kernel" : "user");
|
|
-#if CONFIG_CPU_CP15
|
|
|
|
|
|
+#ifdef CONFIG_CPU_CP15
|
|
{
|
|
{
|
|
unsigned int ctrl;
|
|
unsigned int ctrl;
|
|
- __asm__ (
|
|
|
|
- " mrc p15, 0, %0, c1, c0\n"
|
|
|
|
- : "=r" (ctrl));
|
|
|
|
- printk("Control: %04X\n", ctrl);
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ buf[0] = '\0';
|
|
#ifdef CONFIG_CPU_CP15_MMU
|
|
#ifdef CONFIG_CPU_CP15_MMU
|
|
- {
|
|
|
|
- unsigned int transbase, dac;
|
|
|
|
- __asm__ (
|
|
|
|
- " mrc p15, 0, %0, c2, c0\n"
|
|
|
|
- " mrc p15, 0, %1, c3, c0\n"
|
|
|
|
- : "=r" (transbase), "=r" (dac));
|
|
|
|
- printk("Table: %08X DAC: %08X\n",
|
|
|
|
- transbase, dac);
|
|
|
|
- }
|
|
|
|
|
|
+ {
|
|
|
|
+ unsigned int transbase, dac;
|
|
|
|
+ asm("mrc p15, 0, %0, c2, c0\n\t"
|
|
|
|
+ "mrc p15, 0, %1, c3, c0\n"
|
|
|
|
+ : "=r" (transbase), "=r" (dac));
|
|
|
|
+ snprintf(buf, sizeof(buf), " Table: %08x DAC: %08x",
|
|
|
|
+ transbase, dac);
|
|
|
|
+ }
|
|
#endif
|
|
#endif
|
|
|
|
+ asm("mrc p15, 0, %0, c1, c0\n" : "=r" (ctrl));
|
|
|
|
+
|
|
|
|
+ printk("Control: %08x%s\n", ctrl, buf);
|
|
|
|
+ }
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|