Re: [PATCH 1/21] [POWERPC] Reworking machine check handling and Fix 440/440A
On Sun, 23 Dec 2007 19:32:10 -0600 Josh Boyer [EMAIL PROTECTED] wrote: On Fri, 21 Dec 2007 15:39:21 +1100 Benjamin Herrenschmidt [EMAIL PROTECTED] wrote: Index: linux-merge/arch/powerpc/kernel/traps.c === --- linux-merge.orig/arch/powerpc/kernel/traps.c2007-12-20 11:34:43.0 +1100 +++ linux-merge/arch/powerpc/kernel/traps.c 2007-12-20 11:35:40.0 +1100 [snip] -#elif defined (CONFIG_E500) + return 0; +} +#elif defined(CONFIG_E500) +int machine_check_e500(struct pt_regs *regs) This... +{ + unsigned long reason = get_mc_reason(regs); + printk(Machine check in kernel mode.\n); printk(Caused by (from MCSR=%lx): , reason); @@ -403,7 +416,14 @@ static int generic_machine_check_excepti printk(Bus - Instruction Parity Error\n); if (reason MCSR_BUS_RPERR) printk(Bus - Read Parity Error\n); -#elif defined (CONFIG_E200) + + return 0; +} +#elif defined(CONFIG_E200) +int machine_check_e200(struct pt_regs *regs) ... and this cause build failures for most of the mpc8xxx defconfigs. The reason is that e200 and e500 are both lumped under CONFIG_FSL_BOOKE in cputable.c, but you have them segregated more here. I've added a fix that just does CONFIG_FSL_BOOKE here to match cputable.c. Actually, reverse that. There are other places where e200 and e500 are separated by ifdefs, so I made cputable.c match the rest. josh ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: [PATCH 1/21] [POWERPC] Reworking machine check handling and Fix 440/440A
On Fri, 21 Dec 2007 15:39:21 +1100 Benjamin Herrenschmidt [EMAIL PROTECTED] wrote: Index: linux-merge/arch/powerpc/kernel/traps.c === --- linux-merge.orig/arch/powerpc/kernel/traps.c 2007-12-20 11:34:43.0 +1100 +++ linux-merge/arch/powerpc/kernel/traps.c 2007-12-20 11:35:40.0 +1100 [snip] -#elif defined (CONFIG_E500) + return 0; +} +#elif defined(CONFIG_E500) +int machine_check_e500(struct pt_regs *regs) This... +{ + unsigned long reason = get_mc_reason(regs); + printk(Machine check in kernel mode.\n); printk(Caused by (from MCSR=%lx): , reason); @@ -403,7 +416,14 @@ static int generic_machine_check_excepti printk(Bus - Instruction Parity Error\n); if (reason MCSR_BUS_RPERR) printk(Bus - Read Parity Error\n); -#elif defined (CONFIG_E200) + + return 0; +} +#elif defined(CONFIG_E200) +int machine_check_e200(struct pt_regs *regs) ... and this cause build failures for most of the mpc8xxx defconfigs. The reason is that e200 and e500 are both lumped under CONFIG_FSL_BOOKE in cputable.c, but you have them segregated more here. I've added a fix that just does CONFIG_FSL_BOOKE here to match cputable.c. josh ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: [PATCH 1/21] [POWERPC] Reworking machine check handling and Fix 440/440A
On Fri, 21 Dec 2007 15:39:21 +1100 Benjamin Herrenschmidt [EMAIL PROTECTED] wrote: Index: linux-merge/include/asm-ppc/reg_booke.h === --- linux-merge.orig/include/asm-ppc/reg_booke.h 2007-09-28 11:42:10.0 +1000 +++ linux-merge/include/asm-ppc/reg_booke.h 2007-12-20 11:35:40.0 +1100 @@ -207,7 +207,7 @@ #define CCR1_TCS0x0080 /* Timer Clock Select */ /* Bit definitions for the MCSR. */ -#ifdef CONFIG_440A +#ifdef CONFIG_44x Should be #ifdef CONFIG_4xx as I pointed out last time. I'll fix it when I commit. josh ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: [PATCH 1/21] [POWERPC] Reworking machine check handling and Fix 440/440A
On Fri, 2007-12-21 at 06:01 -0600, Josh Boyer wrote: On Fri, 21 Dec 2007 15:39:21 +1100 Benjamin Herrenschmidt [EMAIL PROTECTED] wrote: Index: linux-merge/include/asm-ppc/reg_booke.h === --- linux-merge.orig/include/asm-ppc/reg_booke.h2007-09-28 11:42:10.0 +1000 +++ linux-merge/include/asm-ppc/reg_booke.h 2007-12-20 11:35:40.0 +1100 @@ -207,7 +207,7 @@ #defineCCR1_TCS0x0080 /* Timer Clock Select */ /* Bit definitions for the MCSR. */ -#ifdef CONFIG_440A +#ifdef CONFIG_44x Should be #ifdef CONFIG_4xx as I pointed out last time. I'll fix it when I commit. Ah weird, I though I fixed it... I must have fixed powerpc and not ppc. Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
[PATCH 1/21] [POWERPC] Reworking machine check handling and Fix 440/440A
This adds a cputable function pointer for the CPU-side machine check handling. The semantic is still the same as the old one, the one in ppc_md. overrides the one in cputable, though ultimately we'll want to change that so the CPU gets first. This removes CONFIG_440A which was a problem for multiplatform kernels and instead fixes up the IVOR at runtime from a setup_cpu function. The A version of the machine check also tweaks the regs-trap value to differenciate the 2 versions at the C level. Signed-off-by: Benjamin Herrenschmidt [EMAIL PROTECTED] --- arch/powerpc/kernel/cpu_setup_44x.S |9 +++ arch/powerpc/kernel/cputable.c | 105 arch/powerpc/kernel/head_44x.S | 14 +++- arch/powerpc/kernel/head_booke.h|2 arch/powerpc/kernel/traps.c | 62 - arch/powerpc/platforms/44x/Kconfig |5 - arch/ppc/kernel/traps.c | 98 ++--- include/asm-powerpc/cputable.h | 13 include/asm-powerpc/ptrace.h|3 - include/asm-powerpc/reg_booke.h |3 - include/asm-ppc/reg_booke.h |2 11 files changed, 258 insertions(+), 58 deletions(-) --- linux-merge.orig/arch/powerpc/kernel/cpu_setup_44x.S2007-10-15 11:19:35.0 +1000 +++ linux-merge/arch/powerpc/kernel/cpu_setup_44x.S 2007-12-20 11:35:40.0 +1100 @@ -23,11 +23,20 @@ _GLOBAL(__setup_cpu_440epx) mflrr4 bl __init_fpu_44x bl __plb_disable_wrp + bl __fixup_440A_mcheck mtlrr4 blr _GLOBAL(__setup_cpu_440grx) b __plb_disable_wrp +_GLOBAL(__setup_cpu_440gx) +_GLOBAL(__setup_cpu_440spe) + b __fixup_440A_mcheck + /* Temporary fixup for arch/ppc until we kill the whole thing */ +#ifndef CONFIG_PPC_MERGE +_GLOBAL(__fixup_440A_mcheck) + blr +#endif /* enable APU between CPU and FPU */ _GLOBAL(__init_fpu_44x) Index: linux-merge/arch/powerpc/kernel/cputable.c === --- linux-merge.orig/arch/powerpc/kernel/cputable.c 2007-12-20 11:34:43.0 +1100 +++ linux-merge/arch/powerpc/kernel/cputable.c 2007-12-20 11:35:40.0 +1100 @@ -33,7 +33,9 @@ EXPORT_SYMBOL(cur_cpu_spec); #ifdef CONFIG_PPC32 extern void __setup_cpu_440ep(unsigned long offset, struct cpu_spec* spec); extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec); +extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec); extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); +extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); @@ -85,6 +87,7 @@ static struct cpu_spec __initdata cpu_sp .pmc_type = PPC_PMC_IBM, .oprofile_cpu_type = ppc64/power3, .oprofile_type = PPC_OPROFILE_RS64, + .machine_check = machine_check_generic, .platform = power3, }, { /* Power3+ */ @@ -99,6 +102,7 @@ static struct cpu_spec __initdata cpu_sp .pmc_type = PPC_PMC_IBM, .oprofile_cpu_type = ppc64/power3, .oprofile_type = PPC_OPROFILE_RS64, + .machine_check = machine_check_generic, .platform = power3, }, { /* Northstar */ @@ -113,6 +117,7 @@ static struct cpu_spec __initdata cpu_sp .pmc_type = PPC_PMC_IBM, .oprofile_cpu_type = ppc64/rs64, .oprofile_type = PPC_OPROFILE_RS64, + .machine_check = machine_check_generic, .platform = rs64, }, { /* Pulsar */ @@ -127,6 +132,7 @@ static struct cpu_spec __initdata cpu_sp .pmc_type = PPC_PMC_IBM, .oprofile_cpu_type = ppc64/rs64, .oprofile_type = PPC_OPROFILE_RS64, + .machine_check = machine_check_generic, .platform = rs64, }, { /* I-star */ @@ -141,6 +147,7 @@ static struct cpu_spec __initdata cpu_sp .pmc_type = PPC_PMC_IBM, .oprofile_cpu_type = ppc64/rs64, .oprofile_type = PPC_OPROFILE_RS64, + .machine_check = machine_check_generic, .platform = rs64, }, { /* S-star */ @@ -155,6 +162,7 @@ static struct cpu_spec __initdata cpu_sp .pmc_type = PPC_PMC_IBM,