b920de1b77
Add architecture support for the MN10300/AM33 CPUs produced by MEI to the kernel. This patch also adds board support for the ASB2303 with the ASB2308 daughter board, and the ASB2305. The only processor supported is the MN103E010, which is an AM33v2 core plus on-chip devices. [akpm@linux-foundation.org: nuke cvs control strings] Signed-off-by: Masakazu Urade <urade.masakazu@jp.panasonic.com> Signed-off-by: Koichi Yasutake <yasutake.koichi@jp.panasonic.com> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
121 lines
4.8 KiB
C
121 lines
4.8 KiB
C
/* MN10300 Microcontroller core exceptions
|
|
*
|
|
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
|
|
* Written by David Howells (dhowells@redhat.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public Licence
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the Licence, or (at your option) any later version.
|
|
*/
|
|
#ifndef _ASM_EXCEPTIONS_H
|
|
#define _ASM_EXCEPTIONS_H
|
|
|
|
#include <linux/linkage.h>
|
|
|
|
/*
|
|
* define the breakpoint instruction opcode to use
|
|
* - note that the JTAG unit steals 0xFF, so we want to avoid that if we can
|
|
* (can use 0xF7)
|
|
*/
|
|
#define GDBSTUB_BKPT 0xFF
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
/*
|
|
* enumeration of exception codes (as extracted from TBR MSW)
|
|
*/
|
|
enum exception_code {
|
|
EXCEP_RESET = 0x000000, /* reset */
|
|
|
|
/* MMU exceptions */
|
|
EXCEP_ITLBMISS = 0x000100, /* instruction TLB miss */
|
|
EXCEP_DTLBMISS = 0x000108, /* data TLB miss */
|
|
EXCEP_IAERROR = 0x000110, /* instruction address */
|
|
EXCEP_DAERROR = 0x000118, /* data address */
|
|
|
|
/* system exceptions */
|
|
EXCEP_TRAP = 0x000128, /* program interrupt (PI instruction) */
|
|
EXCEP_ISTEP = 0x000130, /* single step */
|
|
EXCEP_IBREAK = 0x000150, /* instruction breakpoint */
|
|
EXCEP_OBREAK = 0x000158, /* operand breakpoint */
|
|
EXCEP_PRIVINS = 0x000160, /* privileged instruction execution */
|
|
EXCEP_UNIMPINS = 0x000168, /* unimplemented instruction execution */
|
|
EXCEP_UNIMPEXINS = 0x000170, /* unimplemented extended instruction execution */
|
|
EXCEP_MEMERR = 0x000178, /* illegal memory access */
|
|
EXCEP_MISALIGN = 0x000180, /* misalignment */
|
|
EXCEP_BUSERROR = 0x000188, /* bus error */
|
|
EXCEP_ILLINSACC = 0x000190, /* illegal instruction access */
|
|
EXCEP_ILLDATACC = 0x000198, /* illegal data access */
|
|
EXCEP_IOINSACC = 0x0001a0, /* I/O space instruction access */
|
|
EXCEP_PRIVINSACC = 0x0001a8, /* privileged space instruction access */
|
|
EXCEP_PRIVDATACC = 0x0001b0, /* privileged space data access */
|
|
EXCEP_DATINSACC = 0x0001b8, /* data space instruction access */
|
|
EXCEP_DOUBLE_FAULT = 0x000200, /* double fault */
|
|
|
|
/* FPU exceptions */
|
|
EXCEP_FPU_DISABLED = 0x0001c0, /* FPU disabled */
|
|
EXCEP_FPU_UNIMPINS = 0x0001c8, /* FPU unimplemented operation */
|
|
EXCEP_FPU_OPERATION = 0x0001d0, /* FPU operation */
|
|
|
|
/* interrupts */
|
|
EXCEP_WDT = 0x000240, /* watchdog timer overflow */
|
|
EXCEP_NMI = 0x000248, /* non-maskable interrupt */
|
|
EXCEP_IRQ_LEVEL0 = 0x000280, /* level 0 maskable interrupt */
|
|
EXCEP_IRQ_LEVEL1 = 0x000288, /* level 1 maskable interrupt */
|
|
EXCEP_IRQ_LEVEL2 = 0x000290, /* level 2 maskable interrupt */
|
|
EXCEP_IRQ_LEVEL3 = 0x000298, /* level 3 maskable interrupt */
|
|
EXCEP_IRQ_LEVEL4 = 0x0002a0, /* level 4 maskable interrupt */
|
|
EXCEP_IRQ_LEVEL5 = 0x0002a8, /* level 5 maskable interrupt */
|
|
EXCEP_IRQ_LEVEL6 = 0x0002b0, /* level 6 maskable interrupt */
|
|
|
|
/* system calls */
|
|
EXCEP_SYSCALL0 = 0x000300, /* system call 0 */
|
|
EXCEP_SYSCALL1 = 0x000308, /* system call 1 */
|
|
EXCEP_SYSCALL2 = 0x000310, /* system call 2 */
|
|
EXCEP_SYSCALL3 = 0x000318, /* system call 3 */
|
|
EXCEP_SYSCALL4 = 0x000320, /* system call 4 */
|
|
EXCEP_SYSCALL5 = 0x000328, /* system call 5 */
|
|
EXCEP_SYSCALL6 = 0x000330, /* system call 6 */
|
|
EXCEP_SYSCALL7 = 0x000338, /* system call 7 */
|
|
EXCEP_SYSCALL8 = 0x000340, /* system call 8 */
|
|
EXCEP_SYSCALL9 = 0x000348, /* system call 9 */
|
|
EXCEP_SYSCALL10 = 0x000350, /* system call 10 */
|
|
EXCEP_SYSCALL11 = 0x000358, /* system call 11 */
|
|
EXCEP_SYSCALL12 = 0x000360, /* system call 12 */
|
|
EXCEP_SYSCALL13 = 0x000368, /* system call 13 */
|
|
EXCEP_SYSCALL14 = 0x000370, /* system call 14 */
|
|
EXCEP_SYSCALL15 = 0x000378, /* system call 15 */
|
|
};
|
|
|
|
extern void __set_intr_stub(enum exception_code code, void *handler);
|
|
extern void set_intr_stub(enum exception_code code, void *handler);
|
|
extern void set_jtag_stub(enum exception_code code, void *handler);
|
|
|
|
struct pt_regs;
|
|
|
|
extern asmlinkage void __common_exception(void);
|
|
extern asmlinkage void itlb_miss(void);
|
|
extern asmlinkage void dtlb_miss(void);
|
|
extern asmlinkage void itlb_aerror(void);
|
|
extern asmlinkage void dtlb_aerror(void);
|
|
extern asmlinkage void raw_bus_error(void);
|
|
extern asmlinkage void double_fault(void);
|
|
extern asmlinkage int system_call(struct pt_regs *);
|
|
extern asmlinkage void fpu_exception(struct pt_regs *, enum exception_code);
|
|
extern asmlinkage void nmi(struct pt_regs *, enum exception_code);
|
|
extern asmlinkage void uninitialised_exception(struct pt_regs *,
|
|
enum exception_code);
|
|
extern asmlinkage void irq_handler(void);
|
|
extern asmlinkage void profile_handler(void);
|
|
extern asmlinkage void nmi_handler(void);
|
|
extern asmlinkage void misalignment(struct pt_regs *, enum exception_code);
|
|
|
|
extern void die(const char *, struct pt_regs *, enum exception_code)
|
|
ATTRIB_NORET;
|
|
|
|
extern int die_if_no_fixup(const char *, struct pt_regs *, enum exception_code);
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* _ASM_EXCEPTIONS_H */
|