diff options
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 15 | ||||
-rw-r--r-- | arch/powerpc/kernel/head_booke.h | 6 | ||||
-rw-r--r-- | arch/powerpc/kernel/head_fsl_booke.S | 10 |
3 files changed, 28 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index e44d5530f0a6..aa421f5651c8 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -1522,6 +1522,21 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1522 | .machine_check = machine_check_e500, | 1522 | .machine_check = machine_check_e500, |
1523 | .platform = "ppc8548", | 1523 | .platform = "ppc8548", |
1524 | }, | 1524 | }, |
1525 | { /* e500mc */ | ||
1526 | .pvr_mask = 0xffff0000, | ||
1527 | .pvr_value = 0x80230000, | ||
1528 | .cpu_name = "e500mc", | ||
1529 | /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ | ||
1530 | .cpu_features = CPU_FTRS_E500MC, | ||
1531 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, | ||
1532 | .icache_bsize = 64, | ||
1533 | .dcache_bsize = 64, | ||
1534 | .num_pmcs = 4, | ||
1535 | .oprofile_cpu_type = "ppc/e500", /* xxx - galak, e500mc? */ | ||
1536 | .oprofile_type = PPC_OPROFILE_FSL_EMB, | ||
1537 | .machine_check = machine_check_e500, | ||
1538 | .platform = "ppce500mc", | ||
1539 | }, | ||
1525 | { /* default match */ | 1540 | { /* default match */ |
1526 | .pvr_mask = 0x00000000, | 1541 | .pvr_mask = 0x00000000, |
1527 | .pvr_value = 0x00000000, | 1542 | .pvr_value = 0x00000000, |
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h index 9501c580ce87..505494f1ee7c 100644 --- a/arch/powerpc/kernel/head_booke.h +++ b/arch/powerpc/kernel/head_booke.h | |||
@@ -68,9 +68,13 @@ | |||
68 | #define MCHECK_STACK_BASE mcheckirq_ctx | 68 | #define MCHECK_STACK_BASE mcheckirq_ctx |
69 | #define CRIT_STACK_BASE critirq_ctx | 69 | #define CRIT_STACK_BASE critirq_ctx |
70 | 70 | ||
71 | /* only on e200 for now */ | 71 | /* only on e500mc/e200 */ |
72 | #define DEBUG_STACK_BASE dbgirq_ctx | 72 | #define DEBUG_STACK_BASE dbgirq_ctx |
73 | #ifdef CONFIG_PPC_E500MC | ||
74 | #define DEBUG_SPRG SPRN_SPRG9 | ||
75 | #else | ||
73 | #define DEBUG_SPRG SPRN_SPRG6W | 76 | #define DEBUG_SPRG SPRN_SPRG6W |
77 | #endif | ||
74 | 78 | ||
75 | #define EXC_LVL_FRAME_OVERHEAD (THREAD_SIZE - INT_FRAME_SIZE - EXC_LVL_SIZE) | 79 | #define EXC_LVL_FRAME_OVERHEAD (THREAD_SIZE - INT_FRAME_SIZE - EXC_LVL_SIZE) |
76 | 80 | ||
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 503f86030b6e..7c2b65380658 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
@@ -304,7 +304,7 @@ skpinv: addi r6,r6,1 /* Increment */ | |||
304 | SET_IVOR(13, DataTLBError); | 304 | SET_IVOR(13, DataTLBError); |
305 | SET_IVOR(14, InstructionTLBError); | 305 | SET_IVOR(14, InstructionTLBError); |
306 | SET_IVOR(15, DebugDebug); | 306 | SET_IVOR(15, DebugDebug); |
307 | #if defined(CONFIG_E500) | 307 | #if defined(CONFIG_E500) && !defined(CONFIG_PPC_E500MC) |
308 | SET_IVOR(15, DebugCrit); | 308 | SET_IVOR(15, DebugCrit); |
309 | #endif | 309 | #endif |
310 | SET_IVOR(32, SPEUnavailable); | 310 | SET_IVOR(32, SPEUnavailable); |
@@ -313,6 +313,9 @@ skpinv: addi r6,r6,1 /* Increment */ | |||
313 | #ifndef CONFIG_E200 | 313 | #ifndef CONFIG_E200 |
314 | SET_IVOR(35, PerformanceMonitor); | 314 | SET_IVOR(35, PerformanceMonitor); |
315 | #endif | 315 | #endif |
316 | #ifdef CONFIG_PPC_E500MC | ||
317 | SET_IVOR(36, Doorbell); | ||
318 | #endif | ||
316 | 319 | ||
317 | /* Establish the interrupt vector base */ | 320 | /* Establish the interrupt vector base */ |
318 | lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */ | 321 | lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */ |
@@ -750,10 +753,13 @@ interrupt_base: | |||
750 | /* Performance Monitor */ | 753 | /* Performance Monitor */ |
751 | EXCEPTION(0x2060, PerformanceMonitor, performance_monitor_exception, EXC_XFER_STD) | 754 | EXCEPTION(0x2060, PerformanceMonitor, performance_monitor_exception, EXC_XFER_STD) |
752 | 755 | ||
756 | #ifdef CONFIG_PPC_E500MC | ||
757 | EXCEPTION(0x2070, Doorbell, unknown_exception, EXC_XFER_EE) | ||
758 | #endif | ||
753 | 759 | ||
754 | /* Debug Interrupt */ | 760 | /* Debug Interrupt */ |
755 | DEBUG_DEBUG_EXCEPTION | 761 | DEBUG_DEBUG_EXCEPTION |
756 | #if defined(CONFIG_E500) | 762 | #if defined(CONFIG_E500) && !defined(CONFIG_PPC_E500MC) |
757 | DEBUG_CRIT_EXCEPTION | 763 | DEBUG_CRIT_EXCEPTION |
758 | #endif | 764 | #endif |
759 | 765 | ||