microblaze_mmu_v2: Traps MMU update
Signed-off-by: Michal Simek <monstr@monstr.eu>
This commit is contained in:
parent
65504a47e0
commit
17f3324c3e
2 changed files with 42 additions and 16 deletions
|
@ -1,8 +1,8 @@
|
|||
/*
|
||||
* Preliminary support for HW exception handing for Microblaze
|
||||
*
|
||||
* Copyright (C) 2008 Michal Simek
|
||||
* Copyright (C) 2008 PetaLogix
|
||||
* Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu>
|
||||
* Copyright (C) 2008-2009 PetaLogix
|
||||
* Copyright (C) 2005 John Williams <jwilliams@itee.uq.edu.au>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General
|
||||
|
@ -64,21 +64,13 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
|
|||
void die(const char *str, struct pt_regs *fp, long err);
|
||||
void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr);
|
||||
|
||||
#if defined(CONFIG_XMON)
|
||||
extern void xmon(struct pt_regs *regs);
|
||||
extern int xmon_bpt(struct pt_regs *regs);
|
||||
extern int xmon_sstep(struct pt_regs *regs);
|
||||
extern int xmon_iabr_match(struct pt_regs *regs);
|
||||
extern int xmon_dabr_match(struct pt_regs *regs);
|
||||
extern void (*xmon_fault_handler)(struct pt_regs *regs);
|
||||
#ifdef CONFIG_MMU
|
||||
void __bug(const char *file, int line, void *data);
|
||||
int bad_trap(int trap_num, struct pt_regs *regs);
|
||||
int debug_trap(struct pt_regs *regs);
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
void (*debugger)(struct pt_regs *regs) = xmon;
|
||||
int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt;
|
||||
int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep;
|
||||
int (*debugger_iabr_match)(struct pt_regs *regs) = xmon_iabr_match;
|
||||
int (*debugger_dabr_match)(struct pt_regs *regs) = xmon_dabr_match;
|
||||
void (*debugger_fault_handler)(struct pt_regs *regs);
|
||||
#elif defined(CONFIG_KGDB)
|
||||
#if defined(CONFIG_KGDB)
|
||||
void (*debugger)(struct pt_regs *regs);
|
||||
int (*debugger_bpt)(struct pt_regs *regs);
|
||||
int (*debugger_sstep)(struct pt_regs *regs);
|
||||
|
|
|
@ -97,3 +97,37 @@ void dump_stack(void)
|
|||
show_stack(NULL, NULL);
|
||||
}
|
||||
EXPORT_SYMBOL(dump_stack);
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
void __bug(const char *file, int line, void *data)
|
||||
{
|
||||
if (data)
|
||||
printk(KERN_CRIT "kernel BUG at %s:%d (data = %p)!\n",
|
||||
file, line, data);
|
||||
else
|
||||
printk(KERN_CRIT "kernel BUG at %s:%d!\n", file, line);
|
||||
|
||||
machine_halt();
|
||||
}
|
||||
|
||||
int bad_trap(int trap_num, struct pt_regs *regs)
|
||||
{
|
||||
printk(KERN_CRIT
|
||||
"unimplemented trap %d called at 0x%08lx, pid %d!\n",
|
||||
trap_num, regs->pc, current->pid);
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
int debug_trap(struct pt_regs *regs)
|
||||
{
|
||||
int i;
|
||||
printk(KERN_CRIT "debug trap\n");
|
||||
for (i = 0; i < 32; i++) {
|
||||
/* printk("r%i:%08X\t",i,regs->gpr[i]); */
|
||||
if ((i % 4) == 3)
|
||||
printk(KERN_CRIT "\n");
|
||||
}
|
||||
printk(KERN_CRIT "pc:%08lX\tmsr:%08lX\n", regs->pc, regs->msr);
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue