Message ID | 20100308191005.GE4324@amak.tundra.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Kumar Gala |
Headers | show |
On Mon, Mar 8, 2010 at 2:10 PM, Alexandre Bounine <abounine@tundra.com> wrote: > > From: Alexandre Bounine <alexandre.bounine@idt.com> > > Add Machine Check exception handling into RapidIO port driver > for Freescale SoCs (MPC85xx). > > Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com> > Tested-by: Thomas Moll <thomas.moll@sysgo.com> ... > +static int fsl_rio_mcheck_exception(struct pt_regs *regs) > +{ > + const struct exception_table_entry *entry = NULL; > + unsigned long reason = (mfspr(SPRN_MCSR) & MCSR_MASK); MCSR_MASK is not defined anywhere, so when I compile this code, I get this: CC arch/powerpc/sysdev/fsl_rio.o arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception': arch/powerpc/sysdev/fsl_rio.c:248: error: 'MCSR_MASK' undeclared (first use in this function) arch/powerpc/sysdev/fsl_rio.c:248: error: (Each undeclared identifier is reported only once arch/powerpc/sysdev/fsl_rio.c:248: error: for each function it appears in.)
On Wed, Jun 30, 2010 at 3:55 PM, Timur Tabi <timur.tabi@gmail.com> wrote:
> MCSR_MASK is not defined anywhere, so when I compile this code, I get this:
Never mind. I see that it's been fixed already, and that the patch
that removed MCSR_MASK was posted around the same time that this patch
was posted.
> > MCSR_MASK is not defined anywhere, so when I compile this code, I get this: > > Never mind. I see that it's been fixed already, and that the patch > that removed MCSR_MASK was posted around the same time that this patch > was posted. I don't know what happened here but 2.6.35 is broken because of this problem: arch/powerpc/sysdev/fsl_rio.c:248: error: 'MCSR_MASK' undeclared (first use in this function) arch/powerpc/sysdev/fsl_rio.c:248: error: (Each undeclared identifier is reported only once arch/powerpc/sysdev/fsl_rio.c:248: error: for each function it appears in.) arch/powerpc/sysdev/fsl_rio.c:250: error: 'MCSR_BUS_RBERR' undeclared (first use in this function) Mikey
This happened after change to book-e definitions. There are patches that address this issue. > -----Original Message----- > From: Michael Neuling [mailto:mikey@neuling.org] > Sent: Tuesday, August 03, 2010 2:07 AM > To: Timur Tabi > Cc: Alexandre Bounine; linuxppc-dev@lists.ozlabs.org; linux-kernel@vger.kernel.org; > thomas.moll@sysgo.com > Subject: Re: [PATCH v2 5/7] powerpc/85xx: Add MChk handler for SRIO port > > > > MCSR_MASK is not defined anywhere, so when I compile this code, I get this: > > > > Never mind. I see that it's been fixed already, and that the patch > > that removed MCSR_MASK was posted around the same time that this patch > > was posted. > > I don't know what happened here but 2.6.35 is broken because of this > problem: > > arch/powerpc/sysdev/fsl_rio.c:248: error: 'MCSR_MASK' undeclared (first use in this function) > arch/powerpc/sysdev/fsl_rio.c:248: error: (Each undeclared identifier is reported only once > arch/powerpc/sysdev/fsl_rio.c:248: error: for each function it appears in.) > arch/powerpc/sysdev/fsl_rio.c:250: error: 'MCSR_BUS_RBERR' undeclared (first use in this function) > > Mikey
On Tue, Aug 3, 2010 at 7:17 AM, Bounine, Alexandre <Alexandre.Bounine@idt.com> wrote: > This happened after change to book-e definitions. > There are patches that address this issue. And those patches should have been applied before 2.6.35 was released. Someone dropped the ball. 2.6.35 is broken for a number of PowerPC boards: $ make mpc85xx_defconfig ... $ make ... CC arch/powerpc/sysdev/fsl_rio.o arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception': arch/powerpc/sysdev/fsl_rio.c:248: error: 'MCSR_MASK' undeclared (first use in this function) arch/powerpc/sysdev/fsl_rio.c:248: error: (Each undeclared identifier is reported only once arch/powerpc/sysdev/fsl_rio.c:248: error: for each function it appears in.) make[1]: *** [arch/powerpc/sysdev/fsl_rio.o] Error 1
Yang Li pointed to these patches in his post from July 23, 2010. It would be nice to have these patches in mainline code. > -----Original Message----- > From: timur.tabi@gmail.com [mailto:timur.tabi@gmail.com] On Behalf Of Timur Tabi > Sent: Tuesday, August 03, 2010 9:02 AM > To: Bounine, Alexandre > Cc: Michael Neuling; Alexandre Bounine; linuxppc-dev@lists.ozlabs.org; linux-kernel@vger.kernel.org; > thomas.moll@sysgo.com; Kumar Gala > Subject: Re: [PATCH v2 5/7] powerpc/85xx: Add MChk handler for SRIO port > > On Tue, Aug 3, 2010 at 7:17 AM, Bounine, Alexandre > <Alexandre.Bounine@idt.com> wrote: > > This happened after change to book-e definitions. > > There are patches that address this issue. > > And those patches should have been applied before 2.6.35 was released. > Someone dropped the ball. 2.6.35 is broken for a number of PowerPC > boards: > > $ make mpc85xx_defconfig > .... > $ make > .... > CC arch/powerpc/sysdev/fsl_rio.o > arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception': > arch/powerpc/sysdev/fsl_rio.c:248: error: 'MCSR_MASK' undeclared > (first use in this function) > arch/powerpc/sysdev/fsl_rio.c:248: error: (Each undeclared identifier > is reported only once > arch/powerpc/sysdev/fsl_rio.c:248: error: for each function it appears in.) > make[1]: *** [arch/powerpc/sysdev/fsl_rio.o] Error 1 > > -- > Timur Tabi > Linux kernel developer at Freescale
In message <0CE8B6BE3C4AD74AB97D9D29BD24E552011430BC@CORPEXCH1.na.ads.idt.com> you wrote: > Yang Li pointed to these patches in his post from July 23, 2010. > It would be nice to have these patches in mainline code.=20 This is still broken in Kumar's latest tree. Do you guys wanna repost them so Kumar can pick them up easily? Mikey > > > -----Original Message----- > > From: timur.tabi@gmail.com [mailto:timur.tabi@gmail.com] On Behalf Of > Timur Tabi > > Sent: Tuesday, August 03, 2010 9:02 AM > > To: Bounine, Alexandre > > Cc: Michael Neuling; Alexandre Bounine; linuxppc-dev@lists.ozlabs.org; > linux-kernel@vger.kernel.org; > > thomas.moll@sysgo.com; Kumar Gala > > Subject: Re: [PATCH v2 5/7] powerpc/85xx: Add MChk handler for SRIO > port > >=20 > > On Tue, Aug 3, 2010 at 7:17 AM, Bounine, Alexandre > > <Alexandre.Bounine@idt.com> wrote: > > > This happened after change to book-e definitions. > > > There are patches that address this issue. > >=20 > > And those patches should have been applied before 2.6.35 was released. > > Someone dropped the ball. 2.6.35 is broken for a number of PowerPC > > boards: > >=20 > > $ make mpc85xx_defconfig > > .... > > $ make > > .... > > CC arch/powerpc/sysdev/fsl_rio.o > > arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception': > > arch/powerpc/sysdev/fsl_rio.c:248: error: 'MCSR_MASK' undeclared > > (first use in this function) > > arch/powerpc/sysdev/fsl_rio.c:248: error: (Each undeclared identifier > > is reported only once > > arch/powerpc/sysdev/fsl_rio.c:248: error: for each function it appears > in.) > > make[1]: *** [arch/powerpc/sysdev/fsl_rio.o] Error 1 > >=20 > > -- > > Timur Tabi > > Linux kernel developer at Freescale >
Below is a copy of Leo's message with pointers to the patches. Alex. >Subject: [PATCH] RapidIO,powerpc/85xx: remove MCSR_MASK in fsl_rio > >Fixes compile problem caused by MCSR_MASK removal from book-E definitions. Hi Alex, Only with your patch, there will still be problem on SRIO platforms other than MPC85xx. I have posted a patch series to fix this together with several compatibility issues a month before. http://patchwork.ozlabs.org/patch/56135/ http://patchwork.ozlabs.org/patch/56136/ http://patchwork.ozlabs.org/patch/56138/ http://patchwork.ozlabs.org/patch/56137/ Can anyone pick the patch series quickly as currently there is a compile error when SRIO is enabled. - Leo > -----Original Message----- > From: Michael Neuling [mailto:mikey@neuling.org] > Sent: Wednesday, August 04, 2010 11:34 PM > To: Bounine, Alexandre > Cc: Timur Tabi; Alexandre Bounine; linuxppc-dev@lists.ozlabs.org; linux-kernel@vger.kernel.org; > thomas.moll@sysgo.com; Kumar Gala > Subject: Re: [PATCH v2 5/7] powerpc/85xx: Add MChk handler for SRIO port > > > > In message <0CE8B6BE3C4AD74AB97D9D29BD24E552011430BC@CORPEXCH1.na.ads.idt.com> you wrote: > > Yang Li pointed to these patches in his post from July 23, 2010. > > It would be nice to have these patches in mainline code.=20 > > This is still broken in Kumar's latest tree. Do you guys wanna repost > them so Kumar can pick them up easily? > > Mikey > > > > > > -----Original Message----- > > > From: timur.tabi@gmail.com [mailto:timur.tabi@gmail.com] On Behalf Of > > Timur Tabi > > > Sent: Tuesday, August 03, 2010 9:02 AM > > > To: Bounine, Alexandre > > > Cc: Michael Neuling; Alexandre Bounine; linuxppc-dev@lists.ozlabs.org; > > linux-kernel@vger.kernel.org; > > > thomas.moll@sysgo.com; Kumar Gala > > > Subject: Re: [PATCH v2 5/7] powerpc/85xx: Add MChk handler for SRIO > > port > > >=20 > > > On Tue, Aug 3, 2010 at 7:17 AM, Bounine, Alexandre > > > <Alexandre.Bounine@idt.com> wrote: > > > > This happened after change to book-e definitions. > > > > There are patches that address this issue. > > >=20 > > > And those patches should have been applied before 2.6.35 was released. > > > Someone dropped the ball. 2.6.35 is broken for a number of PowerPC > > > boards: > > >=20 > > > $ make mpc85xx_defconfig > > > .... > > > $ make > > > .... > > > CC arch/powerpc/sysdev/fsl_rio.o > > > arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception': > > > arch/powerpc/sysdev/fsl_rio.c:248: error: 'MCSR_MASK' undeclared > > > (first use in this function) > > > arch/powerpc/sysdev/fsl_rio.c:248: error: (Each undeclared identifier > > > is reported only once > > > arch/powerpc/sysdev/fsl_rio.c:248: error: for each function it appears > > in.) > > > make[1]: *** [arch/powerpc/sysdev/fsl_rio.o] Error 1 > > >=20 > > > -- > > > Timur Tabi > > > Linux kernel developer at Freescale > >
On Aug 5, 2010, at 12:25 PM, Bounine, Alexandre wrote: > Below is a copy of Leo's message with pointers to the patches. > > Alex. > >> Subject: [PATCH] RapidIO,powerpc/85xx: remove MCSR_MASK in fsl_rio >> >> Fixes compile problem caused by MCSR_MASK removal from book-E > definitions. > > Hi Alex, > > Only with your patch, there will still be problem on SRIO platforms > other than MPC85xx. > > I have posted a patch series to fix this together with several > compatibility issues a month before. > > http://patchwork.ozlabs.org/patch/56135/ > http://patchwork.ozlabs.org/patch/56136/ > http://patchwork.ozlabs.org/patch/56138/ > http://patchwork.ozlabs.org/patch/56137/ > > > Can anyone pick the patch series quickly as currently there is a compile > error when SRIO is enabled. > > - Leo I'm looking at this now and wondering what we added the mcheck handler for in the first place and what its trying to accomplish. - k
> I'm looking at this now and wondering what we added the mcheck handler for in the first place and what > its trying to accomplish. > > - k This protects system from hanging if RIO link fails or enters error state. In some situations following maintenance read may initiate link recovery from error state. As it is now, MCheck mostly prevents system from hanging, but it also adds sense to return status of maintenance read routine. I am using return status in my new set of patches to check if RIO link is valid during error recovery. Alex.
diff -x '*.pj' -X dontdiff_2.6.32-rc5 -pNur w33a/arch/powerpc/sysdev/fsl_rio.c w33b/arch/powerpc/sysdev/fsl_rio.c --- w33a/arch/powerpc/sysdev/fsl_rio.c 2010-03-08 10:38:10.121013000 -0500 +++ w33b/arch/powerpc/sysdev/fsl_rio.c 2010-03-08 11:23:03.274215000 -0500 @@ -31,6 +31,8 @@ #include <linux/kfifo.h> #include <asm/io.h> +#include <asm/machdep.h> +#include <asm/uaccess.h> #undef DEBUG_PW /* Port-Write debugging */ @@ -46,6 +48,8 @@ #define RIO_ESCSR 0x158 #define RIO_CCSR 0x15c #define RIO_LTLEDCSR 0x0608 +#define RIO_LTLEDCSR_IER 0x80000000 +#define RIO_LTLEDCSR_PRT 0x01000000 #define RIO_LTLEECSR 0x060c #define RIO_EPWISR 0x10010 #define RIO_ISR_AACR 0x10120 @@ -213,6 +217,54 @@ struct rio_priv { spinlock_t pw_fifo_lock; }; +#define __fsl_read_rio_config(x, addr, err, op) \ + __asm__ __volatile__( \ + "1: "op" %1,0(%2)\n" \ + " eieio\n" \ + "2:\n" \ + ".section .fixup,\"ax\"\n" \ + "3: li %1,-1\n" \ + " li %0,%3\n" \ + " b 2b\n" \ + ".section __ex_table,\"a\"\n" \ + " .align 2\n" \ + " .long 1b,3b\n" \ + ".text" \ + : "=r" (err), "=r" (x) \ + : "b" (addr), "i" (-EFAULT), "0" (err)) + +static void __iomem *rio_regs_win; + +static int (*saved_mcheck_exception)(struct pt_regs *regs); + +static int fsl_rio_mcheck_exception(struct pt_regs *regs) +{ + const struct exception_table_entry *entry = NULL; + unsigned long reason = (mfspr(SPRN_MCSR) & MCSR_MASK); + + if (reason & MCSR_BUS_RBERR) { + reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR)); + if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) { + /* Check if we are prepared to handle this fault */ + entry = search_exception_tables(regs->nip); + if (entry) { + pr_debug("RIO: %s - MC Exception handled\n", + __func__); + out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), + 0); + regs->msr |= MSR_RI; + regs->nip = entry->fixup; + return 1; + } + } + } + + if (saved_mcheck_exception) + return saved_mcheck_exception(regs); + else + return cur_cpu_spec->machine_check(regs); +} + /** * fsl_rio_doorbell_send - Send a MPC85xx doorbell message * @mport: RapidIO master port info @@ -313,6 +365,7 @@ fsl_rio_config_read(struct rio_mport *mp { struct rio_priv *priv = mport->priv; u8 *data; + u32 rval, err = 0; pr_debug ("fsl_rio_config_read: index %d destid %d hopcount %d offset %8.8x len %d\n", @@ -323,17 +376,24 @@ fsl_rio_config_read(struct rio_mport *mp data = (u8 *) priv->maint_win + offset; switch (len) { case 1: - *val = in_8((u8 *) data); + __fsl_read_rio_config(rval, data, err, "lbz"); break; case 2: - *val = in_be16((u16 *) data); + __fsl_read_rio_config(rval, data, err, "lhz"); break; default: - *val = in_be32((u32 *) data); + __fsl_read_rio_config(rval, data, err, "lwz"); break; } - return 0; + if (err) { + pr_debug("RIO: cfg_read error %d for %x:%x:%x\n", + err, destid, hopcount, offset); + } + + *val = rval; + + return err; } /** @@ -1364,6 +1424,7 @@ int fsl_rio_setup(struct of_device *dev) rio_register_mport(port); priv->regs_win = ioremap(regs.start, regs.end - regs.start + 1); + rio_regs_win = priv->regs_win; /* Probe the master port phy type */ ccsr = in_be32(priv->regs_win + RIO_CCSR); @@ -1432,6 +1493,11 @@ int fsl_rio_setup(struct of_device *dev) fsl_rio_doorbell_init(port); fsl_rio_port_write_init(port); + saved_mcheck_exception = ppc_md.machine_check_exception; + ppc_md.machine_check_exception = fsl_rio_mcheck_exception; + /* Ensure that RFXE is set */ + mtspr(SPRN_HID1, (mfspr(SPRN_HID1) | 0x20000)); + return 0; err: iounmap(priv->regs_win);