#endif\r
}\r
\r
+uint32 EccErrReg = 0;\r
\r
+void Os_ArchGetECCError( uint32 *err ) {\r
+\r
+ /* Clear interrupt flag */\r
+#if defined(CFG_MPC5668)\r
+ if(ECSM.ESR.B.PFNCE){\r
+ ECSM.ESR.B.PFNCE = 1;\r
+ }\r
+ *err = EccErrReg;\r
+#else\r
+ *err = 0;\r
+#endif\r
+\r
+ /* Clear stored */\r
+ EccErrReg = 0;\r
+}\r
\r
#define INTC_EOIR 0xfff48018\r
#define INTC_SSCIR0 0xfff48020\r
\r
+/* ECC */\r
+#if defined (CFG_MPC5668)\r
+#define ECSM_BASE 0xfff40000\r
+#define ECSM_ESR 0x47\r
+#define ESR_R1BC 0x20\r
+#define ESR_RNCE 0x02\r
+#define ESR_F1BC 0x10\r
+#define ESR_FNCE 0x01\r
+#endif\r
/* ----------------------------[private macro]-------------------------------*/\r
\r
#define LOCK() wrteei 0\r
/**\r
* External input exception handlers \r
*/ \r
+ \r
+ .global exception_IVOR2\r
+ .balign 16\r
+exception_IVOR2:\r
+ /* Check for ECC problems */\r
+ //Store err reg\r
+ LOAD_ADDR_32(r8,ECSM_BASE)\r
+ lbz r9,ECSM_ESR(r8)\r
+ LOAD_ADDR_32(r8,EccErrReg)\r
+ stw r9,0(r8)\r
+ // Jump to next instruction\r
+ mfspr r9,srr0\r
+ addi r9,r9,4\r
+ mtspr srr0,r9\r
+ rfi \r
+ \r
.global exception_IVOR4\r
.global restoreIsrContext\r
.balign 16\r
exception_tbl:\r
EXC_TABLE_CODE(0)\r
EXC_TABLE_CODE(1)\r
- EXC_TABLE_CODE(2)\r
+#if defined(CFG_MPC5668)\r
+ .balign 16\r
+ b exception_IVOR2\r
+#else\r
+ EXC_TABLE_CODE(2)\r
+#endif\r
EXC_TABLE_CODE(3)\r
.balign 16\r
b exception_IVOR4\r