diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-powerpc/cputable.h | 13 | ||||
-rw-r--r-- | include/asm-powerpc/dcr-native.h | 30 | ||||
-rw-r--r-- | include/asm-powerpc/dcr-regs.h | 71 | ||||
-rw-r--r-- | include/asm-powerpc/ptrace.h | 3 | ||||
-rw-r--r-- | include/asm-powerpc/reg_booke.h | 3 | ||||
-rw-r--r-- | include/asm-powerpc/udbg.h | 1 | ||||
-rw-r--r-- | include/asm-ppc/mmu.h | 6 | ||||
-rw-r--r-- | include/asm-ppc/reg_booke.h | 2 |
8 files changed, 115 insertions, 14 deletions
diff --git a/include/asm-powerpc/cputable.h b/include/asm-powerpc/cputable.h index 4525c784dfd0..528ef183c221 100644 --- a/include/asm-powerpc/cputable.h +++ b/include/asm-powerpc/cputable.h | |||
@@ -57,6 +57,14 @@ enum powerpc_pmc_type { | |||
57 | PPC_PMC_PA6T = 2, | 57 | PPC_PMC_PA6T = 2, |
58 | }; | 58 | }; |
59 | 59 | ||
60 | struct pt_regs; | ||
61 | |||
62 | extern int machine_check_generic(struct pt_regs *regs); | ||
63 | extern int machine_check_4xx(struct pt_regs *regs); | ||
64 | extern int machine_check_440A(struct pt_regs *regs); | ||
65 | extern int machine_check_e500(struct pt_regs *regs); | ||
66 | extern int machine_check_e200(struct pt_regs *regs); | ||
67 | |||
60 | /* NOTE WELL: Update identify_cpu() if fields are added or removed! */ | 68 | /* NOTE WELL: Update identify_cpu() if fields are added or removed! */ |
61 | struct cpu_spec { | 69 | struct cpu_spec { |
62 | /* CPU is matched via (PVR & pvr_mask) == pvr_value */ | 70 | /* CPU is matched via (PVR & pvr_mask) == pvr_value */ |
@@ -97,6 +105,11 @@ struct cpu_spec { | |||
97 | 105 | ||
98 | /* Name of processor class, for the ELF AT_PLATFORM entry */ | 106 | /* Name of processor class, for the ELF AT_PLATFORM entry */ |
99 | char *platform; | 107 | char *platform; |
108 | |||
109 | /* Processor specific machine check handling. Return negative | ||
110 | * if the error is fatal, 1 if it was fully recovered and 0 to | ||
111 | * pass up (not CPU originated) */ | ||
112 | int (*machine_check)(struct pt_regs *regs); | ||
100 | }; | 113 | }; |
101 | 114 | ||
102 | extern struct cpu_spec *cur_cpu_spec; | 115 | extern struct cpu_spec *cur_cpu_spec; |
diff --git a/include/asm-powerpc/dcr-native.h b/include/asm-powerpc/dcr-native.h index 8dbb1ab0aa04..af5fb31af559 100644 --- a/include/asm-powerpc/dcr-native.h +++ b/include/asm-powerpc/dcr-native.h | |||
@@ -22,6 +22,8 @@ | |||
22 | #ifdef __KERNEL__ | 22 | #ifdef __KERNEL__ |
23 | #ifndef __ASSEMBLY__ | 23 | #ifndef __ASSEMBLY__ |
24 | 24 | ||
25 | #include <linux/spinlock.h> | ||
26 | |||
25 | typedef struct { | 27 | typedef struct { |
26 | unsigned int base; | 28 | unsigned int base; |
27 | } dcr_host_t; | 29 | } dcr_host_t; |
@@ -55,20 +57,28 @@ do { \ | |||
55 | } while (0) | 57 | } while (0) |
56 | 58 | ||
57 | /* R/W of indirect DCRs make use of standard naming conventions for DCRs */ | 59 | /* R/W of indirect DCRs make use of standard naming conventions for DCRs */ |
58 | #define mfdcri(base, reg) \ | 60 | extern spinlock_t dcr_ind_lock; |
59 | ({ \ | 61 | |
60 | mtdcr(base ## _CFGADDR, base ## _ ## reg); \ | 62 | #define mfdcri(base, reg) \ |
61 | mfdcr(base ## _CFGDATA); \ | 63 | ({ \ |
64 | unsigned long flags; \ | ||
65 | unsigned int val; \ | ||
66 | spin_lock_irqsave(&dcr_ind_lock, flags); \ | ||
67 | mtdcr(DCRN_ ## base ## _CONFIG_ADDR, reg); \ | ||
68 | val = mfdcr(DCRN_ ## base ## _CONFIG_DATA); \ | ||
69 | spin_unlock_irqrestore(&dcr_ind_lock, flags); \ | ||
70 | val; \ | ||
62 | }) | 71 | }) |
63 | 72 | ||
64 | #define mtdcri(base, reg, data) \ | 73 | #define mtdcri(base, reg, data) \ |
65 | do { \ | 74 | do { \ |
66 | mtdcr(base ## _CFGADDR, base ## _ ## reg); \ | 75 | unsigned long flags; \ |
67 | mtdcr(base ## _CFGDATA, data); \ | 76 | spin_lock_irqsave(&dcr_ind_lock, flags); \ |
77 | mtdcr(DCRN_ ## base ## _CONFIG_ADDR, reg); \ | ||
78 | mtdcr(DCRN_ ## base ## _CONFIG_DATA, data); \ | ||
79 | spin_unlock_irqrestore(&dcr_ind_lock, flags); \ | ||
68 | } while (0) | 80 | } while (0) |
69 | 81 | ||
70 | #endif /* __ASSEMBLY__ */ | 82 | #endif /* __ASSEMBLY__ */ |
71 | #endif /* __KERNEL__ */ | 83 | #endif /* __KERNEL__ */ |
72 | #endif /* _ASM_POWERPC_DCR_NATIVE_H */ | 84 | #endif /* _ASM_POWERPC_DCR_NATIVE_H */ |
73 | |||
74 | |||
diff --git a/include/asm-powerpc/dcr-regs.h b/include/asm-powerpc/dcr-regs.h new file mode 100644 index 000000000000..9f1fb98fcdc6 --- /dev/null +++ b/include/asm-powerpc/dcr-regs.h | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * Common DCR / SDR / CPR register definitions used on various IBM/AMCC | ||
3 | * 4xx processors | ||
4 | * | ||
5 | * Copyright 2007 Benjamin Herrenschmidt, IBM Corp | ||
6 | * <benh@kernel.crashing.org> | ||
7 | * | ||
8 | * Mostly lifted from asm-ppc/ibm4xx.h by | ||
9 | * | ||
10 | * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu> | ||
11 | * | ||
12 | */ | ||
13 | |||
14 | #ifndef __DCR_REGS_H__ | ||
15 | #define __DCR_REGS_H__ | ||
16 | |||
17 | /* | ||
18 | * Most DCRs used for controlling devices such as the MAL, DMA engine, | ||
19 | * etc... are obtained for the device tree. | ||
20 | * | ||
21 | * The definitions in this files are fixed DCRs and indirect DCRs that | ||
22 | * are commonly used outside of specific drivers or refer to core | ||
23 | * common registers that may occasionally have to be tweaked outside | ||
24 | * of the driver main register set | ||
25 | */ | ||
26 | |||
27 | /* CPRs (440GX and 440SP/440SPe) */ | ||
28 | #define DCRN_CPR0_CONFIG_ADDR 0xc | ||
29 | #define DCRN_CPR0_CONFIG_DATA 0xd | ||
30 | |||
31 | /* SDRs (440GX and 440SP/440SPe) */ | ||
32 | #define DCRN_SDR0_CONFIG_ADDR 0xe | ||
33 | #define DCRN_SDR0_CONFIG_DATA 0xf | ||
34 | |||
35 | #define SDR0_PFC0 0x4100 | ||
36 | #define SDR0_PFC1 0x4101 | ||
37 | #define SDR0_PFC1_EPS 0x1c00000 | ||
38 | #define SDR0_PFC1_EPS_SHIFT 22 | ||
39 | #define SDR0_PFC1_RMII 0x02000000 | ||
40 | #define SDR0_MFR 0x4300 | ||
41 | #define SDR0_MFR_TAH0 0x80000000 /* TAHOE0 Enable */ | ||
42 | #define SDR0_MFR_TAH1 0x40000000 /* TAHOE1 Enable */ | ||
43 | #define SDR0_MFR_PCM 0x10000000 /* PPC440GP irq compat mode */ | ||
44 | #define SDR0_MFR_ECS 0x08000000 /* EMAC int clk */ | ||
45 | #define SDR0_MFR_T0TXFL 0x00080000 | ||
46 | #define SDR0_MFR_T0TXFH 0x00040000 | ||
47 | #define SDR0_MFR_T1TXFL 0x00020000 | ||
48 | #define SDR0_MFR_T1TXFH 0x00010000 | ||
49 | #define SDR0_MFR_E0TXFL 0x00008000 | ||
50 | #define SDR0_MFR_E0TXFH 0x00004000 | ||
51 | #define SDR0_MFR_E0RXFL 0x00002000 | ||
52 | #define SDR0_MFR_E0RXFH 0x00001000 | ||
53 | #define SDR0_MFR_E1TXFL 0x00000800 | ||
54 | #define SDR0_MFR_E1TXFH 0x00000400 | ||
55 | #define SDR0_MFR_E1RXFL 0x00000200 | ||
56 | #define SDR0_MFR_E1RXFH 0x00000100 | ||
57 | #define SDR0_MFR_E2TXFL 0x00000080 | ||
58 | #define SDR0_MFR_E2TXFH 0x00000040 | ||
59 | #define SDR0_MFR_E2RXFL 0x00000020 | ||
60 | #define SDR0_MFR_E2RXFH 0x00000010 | ||
61 | #define SDR0_MFR_E3TXFL 0x00000008 | ||
62 | #define SDR0_MFR_E3TXFH 0x00000004 | ||
63 | #define SDR0_MFR_E3RXFL 0x00000002 | ||
64 | #define SDR0_MFR_E3RXFH 0x00000001 | ||
65 | #define SDR0_UART0 0x0120 | ||
66 | #define SDR0_UART1 0x0121 | ||
67 | #define SDR0_UART2 0x0122 | ||
68 | #define SDR0_UART3 0x0123 | ||
69 | #define SDR0_CUST0 0x4000 | ||
70 | |||
71 | #endif /* __DCR_REGS_H__ */ | ||
diff --git a/include/asm-powerpc/ptrace.h b/include/asm-powerpc/ptrace.h index 13fccc5a4119..c662287efd8f 100644 --- a/include/asm-powerpc/ptrace.h +++ b/include/asm-powerpc/ptrace.h | |||
@@ -106,7 +106,8 @@ extern int ptrace_put_reg(struct task_struct *task, int regno, | |||
106 | */ | 106 | */ |
107 | #define FULL_REGS(regs) (((regs)->trap & 1) == 0) | 107 | #define FULL_REGS(regs) (((regs)->trap & 1) == 0) |
108 | #ifndef __powerpc64__ | 108 | #ifndef __powerpc64__ |
109 | #define IS_CRITICAL_EXC(regs) (((regs)->trap & 2) == 0) | 109 | #define IS_CRITICAL_EXC(regs) (((regs)->trap & 2) != 0) |
110 | #define IS_MCHECK_EXC(regs) (((regs)->trap & 4) != 0) | ||
110 | #endif /* ! __powerpc64__ */ | 111 | #endif /* ! __powerpc64__ */ |
111 | #define TRAP(regs) ((regs)->trap & ~0xF) | 112 | #define TRAP(regs) ((regs)->trap & ~0xF) |
112 | #ifdef __powerpc64__ | 113 | #ifdef __powerpc64__ |
diff --git a/include/asm-powerpc/reg_booke.h b/include/asm-powerpc/reg_booke.h index d3e8dd0fc738..0405ef479814 100644 --- a/include/asm-powerpc/reg_booke.h +++ b/include/asm-powerpc/reg_booke.h | |||
@@ -218,7 +218,6 @@ | |||
218 | #define CCR1_TCS 0x00000080 /* Timer Clock Select */ | 218 | #define CCR1_TCS 0x00000080 /* Timer Clock Select */ |
219 | 219 | ||
220 | /* Bit definitions for the MCSR. */ | 220 | /* Bit definitions for the MCSR. */ |
221 | #ifdef CONFIG_440A | ||
222 | #define MCSR_MCS 0x80000000 /* Machine Check Summary */ | 221 | #define MCSR_MCS 0x80000000 /* Machine Check Summary */ |
223 | #define MCSR_IB 0x40000000 /* Instruction PLB Error */ | 222 | #define MCSR_IB 0x40000000 /* Instruction PLB Error */ |
224 | #define MCSR_DRB 0x20000000 /* Data Read PLB Error */ | 223 | #define MCSR_DRB 0x20000000 /* Data Read PLB Error */ |
@@ -228,7 +227,7 @@ | |||
228 | #define MCSR_DCSP 0x02000000 /* D-Cache Search Parity Error */ | 227 | #define MCSR_DCSP 0x02000000 /* D-Cache Search Parity Error */ |
229 | #define MCSR_DCFP 0x01000000 /* D-Cache Flush Parity Error */ | 228 | #define MCSR_DCFP 0x01000000 /* D-Cache Flush Parity Error */ |
230 | #define MCSR_IMPE 0x00800000 /* Imprecise Machine Check Exception */ | 229 | #define MCSR_IMPE 0x00800000 /* Imprecise Machine Check Exception */ |
231 | #endif | 230 | |
232 | #ifdef CONFIG_E500 | 231 | #ifdef CONFIG_E500 |
233 | #define MCSR_MCP 0x80000000UL /* Machine Check Input Pin */ | 232 | #define MCSR_MCP 0x80000000UL /* Machine Check Input Pin */ |
234 | #define MCSR_ICPERR 0x40000000UL /* I-Cache Parity Error */ | 233 | #define MCSR_ICPERR 0x40000000UL /* I-Cache Parity Error */ |
diff --git a/include/asm-powerpc/udbg.h b/include/asm-powerpc/udbg.h index a9e0b0ebcb0f..6418ceea44b7 100644 --- a/include/asm-powerpc/udbg.h +++ b/include/asm-powerpc/udbg.h | |||
@@ -48,6 +48,7 @@ extern void __init udbg_init_rtas_console(void); | |||
48 | extern void __init udbg_init_debug_beat(void); | 48 | extern void __init udbg_init_debug_beat(void); |
49 | extern void __init udbg_init_btext(void); | 49 | extern void __init udbg_init_btext(void); |
50 | extern void __init udbg_init_44x_as1(void); | 50 | extern void __init udbg_init_44x_as1(void); |
51 | extern void __init udbg_init_40x_realmode(void); | ||
51 | extern void __init udbg_init_cpm(void); | 52 | extern void __init udbg_init_cpm(void); |
52 | 53 | ||
53 | #endif /* __KERNEL__ */ | 54 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-ppc/mmu.h b/include/asm-ppc/mmu.h index 14584e505ed5..d46b57b589ae 100644 --- a/include/asm-ppc/mmu.h +++ b/include/asm-ppc/mmu.h | |||
@@ -383,6 +383,12 @@ typedef struct _P601_BAT { | |||
383 | #define BOOKE_PAGESZ_256GB 14 | 383 | #define BOOKE_PAGESZ_256GB 14 |
384 | #define BOOKE_PAGESZ_1TB 15 | 384 | #define BOOKE_PAGESZ_1TB 15 |
385 | 385 | ||
386 | #ifndef CONFIG_SERIAL_TEXT_DEBUG | ||
387 | #define PPC44x_EARLY_TLBS 1 | ||
388 | #else | ||
389 | #define PPC44x_EARLY_TLBS 2 | ||
390 | #endif | ||
391 | |||
386 | /* | 392 | /* |
387 | * Freescale Book-E MMU support | 393 | * Freescale Book-E MMU support |
388 | */ | 394 | */ |
diff --git a/include/asm-ppc/reg_booke.h b/include/asm-ppc/reg_booke.h index 4cad45a055dd..2f1a2afcfc28 100644 --- a/include/asm-ppc/reg_booke.h +++ b/include/asm-ppc/reg_booke.h | |||
@@ -207,7 +207,7 @@ | |||
207 | #define CCR1_TCS 0x00000080 /* Timer Clock Select */ | 207 | #define CCR1_TCS 0x00000080 /* Timer Clock Select */ |
208 | 208 | ||
209 | /* Bit definitions for the MCSR. */ | 209 | /* Bit definitions for the MCSR. */ |
210 | #ifdef CONFIG_440A | 210 | #ifdef CONFIG_4xx |
211 | #define MCSR_MCS 0x80000000 /* Machine Check Summary */ | 211 | #define MCSR_MCS 0x80000000 /* Machine Check Summary */ |
212 | #define MCSR_IB 0x40000000 /* Instruction PLB Error */ | 212 | #define MCSR_IB 0x40000000 /* Instruction PLB Error */ |
213 | #define MCSR_DRB 0x20000000 /* Data Read PLB Error */ | 213 | #define MCSR_DRB 0x20000000 /* Data Read PLB Error */ |