diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-12-29 09:51:18 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-12-29 09:51:18 +0000 |
commit | 644448f8401368d0614bc4e296e966031a97bef4 (patch) | |
tree | 69649eab626c36d2885bf0aaf77c619dcadceb06 /c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c | |
parent | 2010-12-29 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-644448f8401368d0614bc4e296e966031a97bef4.tar.bz2 |
2010-12-29 Sebastian Huber <sebastian.huber@embedded-brains.de>
* shared/include/cpuIdent.c, shared/include/cpuIdent.h: Added support
for e500v2. Removed IVPR/IVOR/HWIVOR features since they are included
in Book E.
* new-exceptions/bspsupport/vectors.h,
new-exceptions/bspsupport/ppc_exc.S,
new-exceptions/bspsupport/ppc_exc_address.c,
new-exceptions/bspsupport/ppc_exc_categories.c,
new-exceptions/bspsupport/ppc_exc_initialize.c,
new-exceptions/bspsupport/ppc_exc_prologue.c: Added support for
e500v2. Added exception vector defines for Book E types. Removed
e200 exception vector defines. Added e500 exception vector defines.
Unified IVOR calculation for e200 and e500 (e200z1 has hard wired
IVOR values).
Diffstat (limited to 'c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c')
-rw-r--r-- | c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c | 71 |
1 files changed, 33 insertions, 38 deletions
diff --git a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c index d71ba7be07..b88a0bfcea 100644 --- a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c +++ b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c @@ -150,29 +150,6 @@ static const ppc_exc_categories mpc_860_category_table = { [ASM_8XX_DEVPORT_VECTOR] = PPC_EXC_CLASSIC, }; -static const ppc_exc_categories e200_category_table = { - [ASM_MACH_VECTOR] = PPC_EXC_BOOKE_CRITICAL | PPC_EXC_ASYNC, - [ASM_PROT_VECTOR] = PPC_EXC_CLASSIC, - [ASM_ISI_VECTOR] = PPC_EXC_CLASSIC, - [ASM_EXT_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, - [ASM_ALIGN_VECTOR] = PPC_EXC_CLASSIC, - [ASM_PROG_VECTOR] = PPC_EXC_CLASSIC, - [ASM_FLOAT_VECTOR] = PPC_EXC_CLASSIC, - [ASM_SYS_VECTOR] = PPC_EXC_CLASSIC, - [ASM_BOOKE_DEC_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, - [ASM_BOOKE_FIT_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, - [ASM_BOOKE_WDOG_VECTOR] = PPC_EXC_BOOKE_CRITICAL | PPC_EXC_ASYNC, - [ASM_BOOKE_ITLBMISS_VECTOR] = PPC_EXC_CLASSIC, - [ASM_BOOKE_DTLBMISS_VECTOR] = PPC_EXC_CLASSIC, - - /* FIXME: Depending on HDI0 [DAPUEN] this is a critical or debug exception */ - [ASM_TRACE_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_BOOKE_CRITICAL, - - [ASM_E200_SPE_UNAVAILABLE_VECTOR] = PPC_EXC_CLASSIC, - [ASM_E200_SPE_DATA_VECTOR] = PPC_EXC_CLASSIC, - [ASM_E200_SPE_ROUND_VECTOR] = PPC_EXC_CLASSIC, -}; - static const ppc_exc_categories e300_category_table = { [ASM_RESET_VECTOR] = PPC_EXC_CLASSIC, [ASM_MACH_VECTOR] = PPC_EXC_CLASSIC, @@ -195,32 +172,49 @@ static const ppc_exc_categories e300_category_table = { [ASM_E300_SYSMGMT_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, }; -static const ppc_exc_categories e500_category_table = { - [ASM_MACH_VECTOR] = PPC_EXC_E500_MACHCHK, - +static const ppc_exc_categories e200_category_table = { [ASM_BOOKE_CRIT_VECTOR] = PPC_EXC_BOOKE_CRITICAL | PPC_EXC_ASYNC, - [ASM_BOOKE_WDOG_VECTOR] = PPC_EXC_BOOKE_CRITICAL | PPC_EXC_ASYNC, - [ASM_TRACE_VECTOR] = PPC_EXC_BOOKE_CRITICAL, - + [ASM_MACH_VECTOR] = PPC_EXC_E500_MACHCHK, + [ASM_PROT_VECTOR] = PPC_EXC_CLASSIC, + [ASM_ISI_VECTOR] = PPC_EXC_CLASSIC, [ASM_EXT_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, + [ASM_ALIGN_VECTOR] = PPC_EXC_CLASSIC, + [ASM_PROG_VECTOR] = PPC_EXC_CLASSIC, + [ASM_FLOAT_VECTOR] = PPC_EXC_CLASSIC, + [ASM_SYS_VECTOR] = PPC_EXC_CLASSIC, [ASM_BOOKE_DEC_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, [ASM_BOOKE_FIT_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, + [ASM_BOOKE_WDOG_VECTOR] = PPC_EXC_BOOKE_CRITICAL | PPC_EXC_ASYNC, + [ASM_BOOKE_DTLBMISS_VECTOR] = PPC_EXC_CLASSIC, + [ASM_BOOKE_ITLBMISS_VECTOR] = PPC_EXC_CLASSIC, + + /* FIXME: Depending on HDI0 [DAPUEN] this is a critical or debug exception */ + [ASM_BOOKE_DEBUG_VECTOR] = PPC_EXC_BOOKE_CRITICAL, + [ASM_E500_SPE_UNAVAILABLE_VECTOR] = PPC_EXC_CLASSIC, + [ASM_E500_EMB_FP_DATA_VECTOR] = PPC_EXC_CLASSIC, + [ASM_E500_EMB_FP_ROUND_VECTOR] = PPC_EXC_CLASSIC +}; + +static const ppc_exc_categories e500_category_table = { + [ASM_MACH_VECTOR] = PPC_EXC_E500_MACHCHK, [ASM_PROT_VECTOR] = PPC_EXC_CLASSIC, [ASM_ISI_VECTOR] = PPC_EXC_CLASSIC, + [ASM_EXT_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, [ASM_ALIGN_VECTOR] = PPC_EXC_CLASSIC, [ASM_PROG_VECTOR] = PPC_EXC_CLASSIC, [ASM_FLOAT_VECTOR] = PPC_EXC_CLASSIC, [ASM_SYS_VECTOR] = PPC_EXC_CLASSIC, - [ /* APU unavailable */ 0x0b] = PPC_EXC_CLASSIC, - - [ASM_60X_DLMISS_VECTOR] = PPC_EXC_CLASSIC, - [ASM_60X_DSMISS_VECTOR] = PPC_EXC_CLASSIC, - [ASM_60X_VEC_VECTOR] = PPC_EXC_CLASSIC, - [ASM_60X_PERFMON_VECTOR] = PPC_EXC_CLASSIC, - - [ /* emb FP data */ 0x15] = PPC_EXC_CLASSIC, - [ /* emb FP round */ 0x16] = PPC_EXC_CLASSIC, + [ASM_BOOKE_DEC_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, + [ASM_BOOKE_FIT_VECTOR] = PPC_EXC_CLASSIC | PPC_EXC_ASYNC, + [ASM_BOOKE_WDOG_VECTOR] = PPC_EXC_BOOKE_CRITICAL | PPC_EXC_ASYNC, + [ASM_BOOKE_DTLBMISS_VECTOR] = PPC_EXC_CLASSIC, + [ASM_BOOKE_ITLBMISS_VECTOR] = PPC_EXC_CLASSIC, + [ASM_BOOKE_DEBUG_VECTOR] = PPC_EXC_BOOKE_CRITICAL, + [ASM_E500_SPE_UNAVAILABLE_VECTOR] = PPC_EXC_CLASSIC, + [ASM_E500_EMB_FP_DATA_VECTOR] = PPC_EXC_CLASSIC, + [ASM_E500_EMB_FP_ROUND_VECTOR] = PPC_EXC_CLASSIC, + [ASM_E500_PERFMON_VECTOR] = PPC_EXC_CLASSIC }; static const ppc_exc_categories psim_category_table = { @@ -274,6 +268,7 @@ const ppc_exc_categories *ppc_exc_categories_for_cpu(ppc_cpu_id_t cpu) case PPC_PSIM: return &psim_category_table; case PPC_8540: + case PPC_e500v2: return &e500_category_table; case PPC_e200z0: case PPC_e200z1: |