Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] ppc32: Add support for Freescale e200 (Book-E) core

The e200 core is a Book-E core (similar to e500) that has a unified L1 cache
and is not cache coherent on the bus. The e200 core also adds a separate
exception level for debug exceptions. Part of this patch helps to cleanup a
few cases that are true for all Freescale Book-E parts, not just e500.

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Kumar Gala <kumar.gala@freescale.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Kumar Gala and committed by
Linus Torvalds
33d9e9b5 62aa751d

+214 -18
+10 -7
arch/ppc/Kconfig
··· 88 88 depends on BROKEN 89 89 bool "8xx" 90 90 91 + config E200 92 + bool "e200" 93 + 91 94 config E500 92 95 bool "e500" 93 96 ··· 101 98 102 99 config BOOKE 103 100 bool 104 - depends on E500 101 + depends on E200 || E500 105 102 default y 106 103 107 104 config FSL_BOOKE 108 105 bool 109 - depends on E500 106 + depends on E200 || E500 110 107 default y 111 108 112 109 config PTE_64BIT ··· 144 141 145 142 config SPE 146 143 bool "SPE Support" 147 - depends on E500 144 + depends on E200 || E500 148 145 ---help--- 149 146 This option enables kernel support for the Signal Processing 150 147 Extensions (SPE) to the PowerPC processor. The kernel currently 151 148 supports saving and restoring SPE registers, and turning on the 152 149 'spe enable' bit so user processes can execute SPE instructions. 153 150 154 - This option is only usefully if you have a processor that supports 151 + This option is only useful if you have a processor that supports 155 152 SPE (e500, otherwise known as 85xx series), but does not have any 156 - affect on a non-spe cpu (it does, however add code to the kernel). 153 + effect on a non-spe cpu (it does, however add code to the kernel). 157 154 158 155 If in doubt, say Y here. 159 156 ··· 203 200 204 201 config MATH_EMULATION 205 202 bool "Math emulation" 206 - depends on 4xx || 8xx || E500 203 + depends on 4xx || 8xx || E200 || E500 207 204 ---help--- 208 205 Some PowerPC chips designed for embedded applications do not have 209 206 a floating-point unit and therefore do not implement the ··· 257 254 258 255 config NOT_COHERENT_CACHE 259 256 bool 260 - depends on 4xx || 8xx 257 + depends on 4xx || 8xx || E200 261 258 default y 262 259 263 260 endmenu
+2 -1
arch/ppc/Makefile
··· 29 29 30 30 CHECKFLAGS += -D__powerpc__ 31 31 32 - ifndef CONFIG_E500 32 + ifndef CONFIG_FSL_BOOKE 33 33 CFLAGS += -mstring 34 34 endif 35 35 ··· 38 38 cpu-as-$(CONFIG_6xx) += -Wa,-maltivec 39 39 cpu-as-$(CONFIG_POWER4) += -Wa,-maltivec 40 40 cpu-as-$(CONFIG_E500) += -Wa,-me500 41 + cpu-as-$(CONFIG_E200) += -Wa,-me200 41 42 42 43 AFLAGS += $(cpu-as-y) 43 44 CFLAGS += $(cpu-as-y)
+2
arch/ppc/kernel/Makefile
··· 26 26 obj-$(CONFIG_SMP) += smp.o smp-tbsync.o 27 27 obj-$(CONFIG_TAU) += temp.o 28 28 obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o 29 + ifndef CONFIG_E200 29 30 obj-$(CONFIG_FSL_BOOKE) += perfmon_fsl_booke.o 31 + endif 30 32 31 33 ifndef CONFIG_MATH_EMULATION 32 34 obj-$(CONFIG_8xx) += softemu8xx.o
+24 -1
arch/ppc/kernel/cputable.c
··· 903 903 .dcache_bsize = 32, 904 904 }, 905 905 #endif /* CONFIG_44x */ 906 - #ifdef CONFIG_E500 906 + #ifdef CONFIG_FSL_BOOKE 907 + { /* e200z5 */ 908 + .pvr_mask = 0xfff00000, 909 + .pvr_value = 0x81000000, 910 + .cpu_name = "e200z5", 911 + /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ 912 + .cpu_features = CPU_FTR_USE_TB, 913 + .cpu_user_features = PPC_FEATURE_32 | 914 + PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_EFP_SINGLE | 915 + PPC_FEATURE_UNIFIED_CACHE, 916 + .dcache_bsize = 32, 917 + }, 918 + { /* e200z6 */ 919 + .pvr_mask = 0xfff00000, 920 + .pvr_value = 0x81100000, 921 + .cpu_name = "e200z6", 922 + /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ 923 + .cpu_features = CPU_FTR_USE_TB, 924 + .cpu_user_features = PPC_FEATURE_32 | 925 + PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP | 926 + PPC_FEATURE_HAS_EFP_SINGLE | 927 + PPC_FEATURE_UNIFIED_CACHE, 928 + .dcache_bsize = 32, 929 + }, 907 930 { /* e500 */ 908 931 .pvr_mask = 0xffff0000, 909 932 .pvr_value = 0x80200000,
+9
arch/ppc/kernel/entry.S
··· 60 60 TRANSFER_TO_HANDLER_EXC_LEVEL(MCHECK) 61 61 b transfer_to_handler_full 62 62 63 + .globl debug_transfer_to_handler 64 + debug_transfer_to_handler: 65 + TRANSFER_TO_HANDLER_EXC_LEVEL(DEBUG) 66 + b transfer_to_handler_full 67 + 63 68 .globl crit_transfer_to_handler 64 69 crit_transfer_to_handler: 65 70 TRANSFER_TO_HANDLER_EXC_LEVEL(CRIT) ··· 840 835 RET_FROM_EXC_LEVEL(SPRN_CSRR0, SPRN_CSRR1, RFCI) 841 836 842 837 #ifdef CONFIG_BOOKE 838 + .globl ret_from_debug_exc 839 + ret_from_debug_exc: 840 + RET_FROM_EXC_LEVEL(SPRN_DSRR0, SPRN_DSRR1, RFDI) 841 + 843 842 .globl ret_from_mcheck_exc 844 843 ret_from_mcheck_exc: 845 844 RET_FROM_EXC_LEVEL(SPRN_MCSRR0, SPRN_MCSRR1, RFMCI)
+63 -1
arch/ppc/kernel/head_booke.h
··· 49 49 * 50 50 * On 40x critical is the only additional level 51 51 * On 44x/e500 we have critical and machine check 52 + * On e200 we have critical and debug (machine check occurs via critical) 52 53 * 53 54 * Additionally we reserve a SPRG for each priority level so we can free up a 54 55 * GPR to use as the base for indirect access to the exception stacks. This ··· 61 60 62 61 /* CRIT_SPRG only used in critical exception handling */ 63 62 #define CRIT_SPRG SPRN_SPRG2 64 - /* MCHECK_SPRG only used in critical exception handling */ 63 + /* MCHECK_SPRG only used in machine check exception handling */ 65 64 #define MCHECK_SPRG SPRN_SPRG6W 66 65 67 66 #define MCHECK_STACK_TOP (exception_stack_top - 4096) 68 67 #define CRIT_STACK_TOP (exception_stack_top) 68 + 69 + /* only on e200 for now */ 70 + #define DEBUG_STACK_TOP (exception_stack_top - 4096) 71 + #define DEBUG_SPRG SPRN_SPRG6W 69 72 70 73 #ifdef CONFIG_SMP 71 74 #define BOOKE_LOAD_EXC_LEVEL_STACK(level) \ ··· 129 124 130 125 #define CRITICAL_EXCEPTION_PROLOG \ 131 126 EXC_LEVEL_EXCEPTION_PROLOG(CRIT, SPRN_CSRR0, SPRN_CSRR1) 127 + #define DEBUG_EXCEPTION_PROLOG \ 128 + EXC_LEVEL_EXCEPTION_PROLOG(DEBUG, SPRN_DSRR0, SPRN_DSRR1) 132 129 #define MCHECK_EXCEPTION_PROLOG \ 133 130 EXC_LEVEL_EXCEPTION_PROLOG(MCHECK, SPRN_MCSRR0, SPRN_MCSRR1) 134 131 ··· 212 205 * save (and later restore) the MSR via SPRN_CSRR1, which will still have 213 206 * the MSR_DE bit set. 214 207 */ 208 + #ifdef CONFIG_E200 209 + #define DEBUG_EXCEPTION \ 210 + START_EXCEPTION(Debug); \ 211 + DEBUG_EXCEPTION_PROLOG; \ 212 + \ 213 + /* \ 214 + * If there is a single step or branch-taken exception in an \ 215 + * exception entry sequence, it was probably meant to apply to \ 216 + * the code where the exception occurred (since exception entry \ 217 + * doesn't turn off DE automatically). We simulate the effect \ 218 + * of turning off DE on entry to an exception handler by turning \ 219 + * off DE in the CSRR1 value and clearing the debug status. \ 220 + */ \ 221 + mfspr r10,SPRN_DBSR; /* check single-step/branch taken */ \ 222 + andis. r10,r10,DBSR_IC@h; \ 223 + beq+ 2f; \ 224 + \ 225 + lis r10,KERNELBASE@h; /* check if exception in vectors */ \ 226 + ori r10,r10,KERNELBASE@l; \ 227 + cmplw r12,r10; \ 228 + blt+ 2f; /* addr below exception vectors */ \ 229 + \ 230 + lis r10,Debug@h; \ 231 + ori r10,r10,Debug@l; \ 232 + cmplw r12,r10; \ 233 + bgt+ 2f; /* addr above exception vectors */ \ 234 + \ 235 + /* here it looks like we got an inappropriate debug exception. */ \ 236 + 1: rlwinm r9,r9,0,~MSR_DE; /* clear DE in the CDRR1 value */ \ 237 + lis r10,DBSR_IC@h; /* clear the IC event */ \ 238 + mtspr SPRN_DBSR,r10; \ 239 + /* restore state and get out */ \ 240 + lwz r10,_CCR(r11); \ 241 + lwz r0,GPR0(r11); \ 242 + lwz r1,GPR1(r11); \ 243 + mtcrf 0x80,r10; \ 244 + mtspr SPRN_DSRR0,r12; \ 245 + mtspr SPRN_DSRR1,r9; \ 246 + lwz r9,GPR9(r11); \ 247 + lwz r12,GPR12(r11); \ 248 + mtspr DEBUG_SPRG,r8; \ 249 + BOOKE_LOAD_EXC_LEVEL_STACK(DEBUG); /* r8 points to the debug stack */ \ 250 + lwz r10,GPR10-INT_FRAME_SIZE(r8); \ 251 + lwz r11,GPR11-INT_FRAME_SIZE(r8); \ 252 + mfspr r8,DEBUG_SPRG; \ 253 + \ 254 + RFDI; \ 255 + b .; \ 256 + \ 257 + /* continue normal handling for a critical exception... */ \ 258 + 2: mfspr r4,SPRN_DBSR; \ 259 + addi r3,r1,STACK_FRAME_OVERHEAD; \ 260 + EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, debug_transfer_to_handler, ret_from_debug_exc) 261 + #else 215 262 #define DEBUG_EXCEPTION \ 216 263 START_EXCEPTION(Debug); \ 217 264 CRITICAL_EXCEPTION_PROLOG; \ ··· 318 257 2: mfspr r4,SPRN_DBSR; \ 319 258 addi r3,r1,STACK_FRAME_OVERHEAD; \ 320 259 EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, crit_transfer_to_handler, ret_from_crit_exc) 260 + #endif 321 261 322 262 #define INSTRUCTION_STORAGE_EXCEPTION \ 323 263 START_EXCEPTION(InstructionStorage) \
+51
arch/ppc/kernel/head_fsl_booke.S
··· 102 102 or r7,r7,r4 103 103 mtspr SPRN_MAS6,r7 104 104 tlbsx 0,r6 /* search MSR[IS], SPID=PID0 */ 105 + #ifndef CONFIG_E200 105 106 mfspr r7,SPRN_MAS1 106 107 andis. r7,r7,MAS1_VALID@h 107 108 bne match_TLB ··· 119 118 or r7,r7,r4 120 119 mtspr SPRN_MAS6,r7 121 120 tlbsx 0,r6 /* Fall through, we had to match */ 121 + #endif 122 122 match_TLB: 123 123 mfspr r7,SPRN_MAS0 124 124 rlwinm r3,r7,16,20,31 /* Extract MAS0(Entry) */ ··· 198 196 /* 4. Clear out PIDs & Search info */ 199 197 li r6,0 200 198 mtspr SPRN_PID0,r6 199 + #ifndef CONFIG_E200 201 200 mtspr SPRN_PID1,r6 202 201 mtspr SPRN_PID2,r6 202 + #endif 203 203 mtspr SPRN_MAS6,r6 204 204 205 205 /* 5. Invalidate mapping we started in */ ··· 281 277 SET_IVOR(32, SPEUnavailable); 282 278 SET_IVOR(33, SPEFloatingPointData); 283 279 SET_IVOR(34, SPEFloatingPointRound); 280 + #ifndef CONFIG_E200 284 281 SET_IVOR(35, PerformanceMonitor); 282 + #endif 285 283 286 284 /* Establish the interrupt vector base */ 287 285 lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */ ··· 291 285 292 286 /* Setup the defaults for TLB entries */ 293 287 li r2,(MAS4_TSIZED(BOOKE_PAGESZ_4K))@l 288 + #ifdef CONFIG_E200 289 + oris r2,r2,MAS4_TLBSELD(1)@h 290 + #endif 294 291 mtspr SPRN_MAS4, r2 295 292 296 293 #if 0 ··· 301 292 mfspr r2,SPRN_HID0 302 293 oris r2,r2,HID0_DOZE@h 303 294 mtspr SPRN_HID0, r2 295 + #endif 296 + #ifdef CONFIG_E200 297 + /* enable dedicated debug exception handling resources (Debug APU) */ 298 + mfspr r2,SPRN_HID0 299 + ori r2,r2,HID0_DAPUEN@l 300 + mtspr SPRN_HID0,r2 304 301 #endif 305 302 306 303 #if !defined(CONFIG_BDI_SWITCH) ··· 429 414 CRITICAL_EXCEPTION(0x0100, CriticalInput, UnknownException) 430 415 431 416 /* Machine Check Interrupt */ 417 + #ifdef CONFIG_E200 418 + /* no RFMCI, MCSRRs on E200 */ 419 + CRITICAL_EXCEPTION(0x0200, MachineCheck, MachineCheckException) 420 + #else 432 421 MCHECK_EXCEPTION(0x0200, MachineCheck, MachineCheckException) 422 + #endif 433 423 434 424 /* Data Storage Interrupt */ 435 425 START_EXCEPTION(DataStorage) ··· 540 520 #ifdef CONFIG_PPC_FPU 541 521 FP_UNAVAILABLE_EXCEPTION 542 522 #else 523 + #ifdef CONFIG_E200 524 + /* E200 treats 'normal' floating point instructions as FP Unavail exception */ 525 + EXCEPTION(0x0800, FloatingPointUnavailable, ProgramCheckException, EXC_XFER_EE) 526 + #else 543 527 EXCEPTION(0x0800, FloatingPointUnavailable, UnknownException, EXC_XFER_EE) 528 + #endif 544 529 #endif 545 530 546 531 /* System Call Interrupt */ ··· 716 691 /* 717 692 * Local functions 718 693 */ 694 + 719 695 /* 720 696 * Data TLB exceptions will bail out to this point 721 697 * if they can't resolve the lightweight TLB fault. ··· 787 761 2: rlwimi r11, r12, 0, 20, 31 /* Extract RPN from PTE and merge with perms */ 788 762 mtspr SPRN_MAS3, r11 789 763 #endif 764 + #ifdef CONFIG_E200 765 + /* Round robin TLB1 entries assignment */ 766 + mfspr r12, SPRN_MAS0 767 + 768 + /* Extract TLB1CFG(NENTRY) */ 769 + mfspr r11, SPRN_TLB1CFG 770 + andi. r11, r11, 0xfff 771 + 772 + /* Extract MAS0(NV) */ 773 + andi. r13, r12, 0xfff 774 + addi r13, r13, 1 775 + cmpw 0, r13, r11 776 + addi r12, r12, 1 777 + 778 + /* check if we need to wrap */ 779 + blt 7f 780 + 781 + /* wrap back to first free tlbcam entry */ 782 + lis r13, tlbcam_index@ha 783 + lwz r13, tlbcam_index@l(r13) 784 + rlwimi r12, r13, 0, 20, 31 785 + 7: 786 + mtspr SPRN_MAS0,r12 787 + #endif /* CONFIG_E200 */ 788 + 790 789 tlbwe 791 790 792 791 /* Done...restore registers and get out of here. */
+8
arch/ppc/kernel/misc.S
··· 593 593 iccci 0,r3 594 594 #endif 595 595 #elif CONFIG_FSL_BOOKE 596 + BEGIN_FTR_SECTION 597 + mfspr r3,SPRN_L1CSR0 598 + ori r3,r3,L1CSR0_CFI|L1CSR0_CLFC 599 + /* msync; isync recommended here */ 600 + mtspr SPRN_L1CSR0,r3 601 + isync 602 + blr 603 + END_FTR_SECTION_IFCLR(CPU_FTR_SPLIT_ID_CACHE) 596 604 mfspr r3,SPRN_L1CSR1 597 605 ori r3,r3,L1CSR1_ICFI|L1CSR1_ICLFR 598 606 mtspr SPRN_L1CSR1,r3
+1 -1
arch/ppc/kernel/perfmon.c
··· 36 36 /* A lock to regulate grabbing the interrupt */ 37 37 DEFINE_SPINLOCK(perfmon_lock); 38 38 39 - #ifdef CONFIG_FSL_BOOKE 39 + #if defined (CONFIG_FSL_BOOKE) && !defined (CONFIG_E200) 40 40 static void dummy_perf(struct pt_regs *regs) 41 41 { 42 42 unsigned int pmgc0 = mfpmr(PMRN_PMGC0);
+21 -3
arch/ppc/kernel/traps.c
··· 173 173 /* On 4xx, the reason for the machine check or program exception 174 174 is in the ESR. */ 175 175 #define get_reason(regs) ((regs)->dsisr) 176 - #ifndef CONFIG_E500 176 + #ifndef CONFIG_FSL_BOOKE 177 177 #define get_mc_reason(regs) ((regs)->dsisr) 178 178 #else 179 179 #define get_mc_reason(regs) (mfspr(SPRN_MCSR)) 180 180 #endif 181 181 #define REASON_FP ESR_FP 182 - #define REASON_ILLEGAL ESR_PIL 182 + #define REASON_ILLEGAL (ESR_PIL | ESR_PUO) 183 183 #define REASON_PRIVILEGED ESR_PPR 184 184 #define REASON_TRAP ESR_PTR 185 185 ··· 302 302 printk("Bus - Instruction Parity Error\n"); 303 303 if (reason & MCSR_BUS_RPERR) 304 304 printk("Bus - Read Parity Error\n"); 305 - #else /* !CONFIG_4xx && !CONFIG_E500 */ 305 + #elif defined (CONFIG_E200) 306 + printk("Machine check in kernel mode.\n"); 307 + printk("Caused by (from MCSR=%lx): ", reason); 308 + 309 + if (reason & MCSR_MCP) 310 + printk("Machine Check Signal\n"); 311 + if (reason & MCSR_CP_PERR) 312 + printk("Cache Push Parity Error\n"); 313 + if (reason & MCSR_CPERR) 314 + printk("Cache Parity Error\n"); 315 + if (reason & MCSR_EXCP_ERR) 316 + printk("ISI, ITLB, or Bus Error on first instruction fetch for an exception handler\n"); 317 + if (reason & MCSR_BUS_IRERR) 318 + printk("Bus - Read Bus Error on instruction fetch\n"); 319 + if (reason & MCSR_BUS_DRERR) 320 + printk("Bus - Read Bus Error on data load\n"); 321 + if (reason & MCSR_BUS_WRERR) 322 + printk("Bus - Write Bus Error on buffered store or cache line push\n"); 323 + #else /* !CONFIG_4xx && !CONFIG_E500 && !CONFIG_E200 */ 306 324 printk("Machine check in kernel mode.\n"); 307 325 printk("Caused by (from SRR1=%lx): ", reason); 308 326 switch (reason & 0x601F0000) {
+1 -1
arch/ppc/mm/fsl_booke_mmu.c
··· 126 126 flags |= _PAGE_COHERENT; 127 127 #endif 128 128 129 - TLBCAM[index].MAS0 = MAS0_TLBSEL(1) | MAS0_ESEL(index); 129 + TLBCAM[index].MAS0 = MAS0_TLBSEL(1) | MAS0_ESEL(index) | MAS0_NV(index+1); 130 130 TLBCAM[index].MAS1 = MAS1_VALID | MAS1_IPROT | MAS1_TSIZE(tsize) | MAS1_TID(pid); 131 131 TLBCAM[index].MAS2 = virt & PAGE_MASK; 132 132
+1 -1
include/asm-ppc/mmu.h
··· 405 405 406 406 #define MAS0_TLBSEL(x) ((x << 28) & 0x30000000) 407 407 #define MAS0_ESEL(x) ((x << 16) & 0x0FFF0000) 408 - #define MAS0_NV 0x00000FFF 408 + #define MAS0_NV(x) ((x) & 0x00000FFF) 409 409 410 410 #define MAS1_VALID 0x80000000 411 411 #define MAS1_IPROT 0x40000000
+1 -1
include/asm-ppc/mmu_context.h
··· 63 63 #define LAST_CONTEXT 255 64 64 #define FIRST_CONTEXT 1 65 65 66 - #elif defined(CONFIG_E500) 66 + #elif defined(CONFIG_E200) || defined(CONFIG_E500) 67 67 #define NO_CONTEXT 256 68 68 #define LAST_CONTEXT 255 69 69 #define FIRST_CONTEXT 1
+2
include/asm-ppc/ppc_asm.h
··· 174 174 #define CLR_TOP32(r) 175 175 #endif /* CONFIG_PPC64BRIDGE */ 176 176 177 + #define RFCI .long 0x4c000066 /* rfci instruction */ 178 + #define RFDI .long 0x4c00004e /* rfdi instruction */ 177 179 #define RFMCI .long 0x4c00004c /* rfmci instruction */ 178 180 179 181 #ifdef CONFIG_IBM405_ERR77
+1
include/asm-ppc/reg.h
··· 160 160 #define HID0_ICFI (1<<11) /* Instr. Cache Flash Invalidate */ 161 161 #define HID0_DCI (1<<10) /* Data Cache Invalidate */ 162 162 #define HID0_SPD (1<<9) /* Speculative disable */ 163 + #define HID0_DAPUEN (1<<8) /* Debug APU enable */ 163 164 #define HID0_SGE (1<<7) /* Store Gathering Enable */ 164 165 #define HID0_SIED (1<<7) /* Serial Instr. Execution [Disable] */ 165 166 #define HID0_DFCA (1<<6) /* Data Cache Flush Assist */
+17 -1
include/asm-ppc/reg_booke.h
··· 165 165 #define SPRN_MCSRR1 0x23B /* Machine Check Save and Restore Register 1 */ 166 166 #define SPRN_MCSR 0x23C /* Machine Check Status Register */ 167 167 #define SPRN_MCAR 0x23D /* Machine Check Address Register */ 168 + #define SPRN_DSRR0 0x23E /* Debug Save and Restore Register 0 */ 169 + #define SPRN_DSRR1 0x23F /* Debug Save and Restore Register 1 */ 168 170 #define SPRN_MAS0 0x270 /* MMU Assist Register 0 */ 169 171 #define SPRN_MAS1 0x271 /* MMU Assist Register 1 */ 170 172 #define SPRN_MAS2 0x272 /* MMU Assist Register 2 */ ··· 266 264 #define MCSR_BUS_IPERR 0x00000002UL /* Instruction parity Error */ 267 265 #define MCSR_BUS_RPERR 0x00000001UL /* Read parity Error */ 268 266 #endif 267 + #ifdef CONFIG_E200 268 + #define MCSR_MCP 0x80000000UL /* Machine Check Input Pin */ 269 + #define MCSR_CP_PERR 0x20000000UL /* Cache Push Parity Error */ 270 + #define MCSR_CPERR 0x10000000UL /* Cache Parity Error */ 271 + #define MCSR_EXCP_ERR 0x08000000UL /* ISI, ITLB, or Bus Error on 1st insn 272 + fetch for an exception handler */ 273 + #define MCSR_BUS_IRERR 0x00000010UL /* Read Bus Error on instruction fetch*/ 274 + #define MCSR_BUS_DRERR 0x00000008UL /* Read Bus Error on data load */ 275 + #define MCSR_BUS_WRERR 0x00000004UL /* Write Bus Error on buffered 276 + store or cache line push */ 277 + #endif 269 278 270 279 /* Bit definitions for the DBSR. */ 271 280 /* ··· 324 311 #define ESR_ST 0x00800000 /* Store Operation */ 325 312 #define ESR_DLK 0x00200000 /* Data Cache Locking */ 326 313 #define ESR_ILK 0x00100000 /* Instr. Cache Locking */ 314 + #define ESR_PUO 0x00040000 /* Unimplemented Operation exception */ 327 315 #define ESR_BO 0x00020000 /* Byte Ordering */ 328 316 329 317 /* Bit definitions related to the DBCR0. */ ··· 401 387 #define ICCR_CACHE 1 /* Cacheable */ 402 388 403 389 /* Bit definitions for L1CSR0. */ 390 + #define L1CSR0_CLFC 0x00000100 /* Cache Lock Bits Flash Clear */ 404 391 #define L1CSR0_DCFI 0x00000002 /* Data Cache Flash Invalidate */ 392 + #define L1CSR0_CFI 0x00000002 /* Cache Flash Invalidate */ 405 393 #define L1CSR0_DCE 0x00000001 /* Data Cache Enable */ 406 394 407 - /* Bit definitions for L1CSR0. */ 395 + /* Bit definitions for L1CSR1. */ 408 396 #define L1CSR1_ICLFR 0x00000100 /* Instr Cache Lock Bits Flash Reset */ 409 397 #define L1CSR1_ICFI 0x00000002 /* Instr Cache Flash Invalidate */ 410 398 #define L1CSR1_ICE 0x00000001 /* Instr Cache Enable */