summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-29 09:51:18 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-29 09:51:18 +0000
commit644448f8401368d0614bc4e296e966031a97bef4 (patch)
tree69649eab626c36d2885bf0aaf77c619dcadceb06 /c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_categories.c
parent2010-12-29 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-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.c71
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: