diff mbox

[BUG] PCI related panic on powerpc based board with 3.10-rcX

Message ID CALG0vJtjS2wP_s=-iyG1ABKw_ct=B9OdNXY9YCrnkhAnpaN1Zw@mail.gmail.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Michael Guntsche June 10, 2013, 5:07 p.m. UTC
Good evening,

On Mon, Jun 10, 2013 at 1:41 PM, Rojhalat Ibrahim <imr@rtschenk.de> wrote:
> Hi Mike,
>
> could you please try this patch:
> https://lists.ozlabs.org/pipermail/linuxppc-dev/2013-May/106624.html
> http://patchwork.ozlabs.org/patch/244515/
>
>    Rojhalat
>
>
> On Saturday 08 June 2013 21:39:37 Michael Guntsche wrote:
>> After bisecting I found the responsible commit.
>>
>> 50d8f87d2b3: powerpc/fsl-pci Make PCIe hotplug work with Freescale
>> PCIe controllers
>>
>> Reverting this commit allowed my board to boot again.
>>
>> @Rojhalat: Please have a look at
>> http://marc.info/?l=linux-kernel&m=137071294204858&w=2
>> for my initial bugreport.
>>
>> What I do not understand at all is why this is affecting my platform.
>> AFAIK there is no PCIe hardware on it AND I completely disabled PCIe
>> support in config.
>>
>> Kind regards,
>> Mike

This patch does not fix the problem, during boot the kernel still
panics. I had a closer look at the commit and the following patch
fixes it for me....

Apparently the mpc83xx platform code goes through great lengths to
guard the call to fsl_pcie_check_link on NON PCIe platforms, since
apparently this seems to cause the panic. Furthermore it also has its
own PCIe setup code. With this patch applied the system boots fine for
me.

The only problem I have with this patch is that the compiler fails
since -Werror is used and fsl_setup_indirect_pci now is never used.
For testing purposes I removed the function definition. Obviously the
proper fix would be to wrap it in an #ifdef but I did not know the
proper define to check against.

Kind regards,
Mike

Comments

Scott Wood June 10, 2013, 10:52 p.m. UTC | #1
On 06/10/2013 12:07:43 PM, Michael Guntsche wrote:
> Good evening,
> 
> On Mon, Jun 10, 2013 at 1:41 PM, Rojhalat Ibrahim <imr@rtschenk.de>  
> wrote:
> > Hi Mike,
> >
> > could you please try this patch:
> > https://lists.ozlabs.org/pipermail/linuxppc-dev/2013-May/106624.html
> > http://patchwork.ozlabs.org/patch/244515/
> >
> >    Rojhalat
> >
> >
> > On Saturday 08 June 2013 21:39:37 Michael Guntsche wrote:
> >> After bisecting I found the responsible commit.
> >>
> >> 50d8f87d2b3: powerpc/fsl-pci Make PCIe hotplug work with Freescale
> >> PCIe controllers
> >>
> >> Reverting this commit allowed my board to boot again.
> >>
> >> @Rojhalat: Please have a look at
> >> http://marc.info/?l=linux-kernel&m=137071294204858&w=2
> >> for my initial bugreport.
> >>
> >> What I do not understand at all is why this is affecting my  
> platform.
> >> AFAIK there is no PCIe hardware on it AND I completely disabled  
> PCIe
> >> support in config.
> >>
> >> Kind regards,
> >> Mike
> 
> This patch does not fix the problem, during boot the kernel still
> panics. I had a closer look at the commit and the following patch
> fixes it for me....
> 
> diff --git a/arch/powerpc/sysdev/fsl_pci.c  
> b/arch/powerpc/sysdev/fsl_pci.c
> index 028ac1f..21b687f 100644
> --- a/arch/powerpc/sysdev/fsl_pci.c
> +++ b/arch/powerpc/sysdev/fsl_pci.c
> @@ -814,7 +814,7 @@ int __init mpc83xx_add_bridge(struct device_node  
> *dev)
>                 if (ret)
>                         goto err0;
>         } else {
> -               fsl_setup_indirect_pci(hose, rsrc_cfg.start,
> +               setup_indirect_pci(hose, rsrc_cfg.start,
>                                        rsrc_cfg.start + 4, 0);
>         }

The only difference here is that you're not setting hose->ops to  
fsl_indirect_pci_ops.  Do you know why that is helping, and what  
hose->ops is set to instead?

-Scott
Rojhalat Ibrahim June 11, 2013, 7:24 a.m. UTC | #2
On Monday 10 June 2013 17:52:33 Scott Wood wrote:
> On 06/10/2013 12:07:43 PM, Michael Guntsche wrote:
> > Good evening,
> > 
> > On Mon, Jun 10, 2013 at 1:41 PM, Rojhalat Ibrahim <imr@rtschenk.de>
> > 
> > wrote:
> > > Hi Mike,
> > > 
> > > could you please try this patch:
> > > https://lists.ozlabs.org/pipermail/linuxppc-dev/2013-May/106624.html
> > > http://patchwork.ozlabs.org/patch/244515/
> > > 
> > >    Rojhalat
> > > 
> > > On Saturday 08 June 2013 21:39:37 Michael Guntsche wrote:
> > >> After bisecting I found the responsible commit.
> > >> 
> > >> 50d8f87d2b3: powerpc/fsl-pci Make PCIe hotplug work with Freescale
> > >> PCIe controllers
> > >> 
> > >> Reverting this commit allowed my board to boot again.
> > >> 
> > >> @Rojhalat: Please have a look at
> > >> http://marc.info/?l=linux-kernel&m=137071294204858&w=2
> > >> for my initial bugreport.
> > >> 
> > >> What I do not understand at all is why this is affecting my
> > 
> > platform.
> > 
> > >> AFAIK there is no PCIe hardware on it AND I completely disabled
> > 
> > PCIe
> > 
> > >> support in config.
> > >> 
> > >> Kind regards,
> > >> Mike
> > 
> > This patch does not fix the problem, during boot the kernel still
> > panics. I had a closer look at the commit and the following patch
> > fixes it for me....
> > 
> > diff --git a/arch/powerpc/sysdev/fsl_pci.c
> > b/arch/powerpc/sysdev/fsl_pci.c
> > index 028ac1f..21b687f 100644
> > --- a/arch/powerpc/sysdev/fsl_pci.c
> > +++ b/arch/powerpc/sysdev/fsl_pci.c
> > @@ -814,7 +814,7 @@ int __init mpc83xx_add_bridge(struct device_node
> > *dev)
> > 
> >                 if (ret)
> >                 
> >                         goto err0;
> >         
> >         } else {
> > 
> > -               fsl_setup_indirect_pci(hose, rsrc_cfg.start,
> > +               setup_indirect_pci(hose, rsrc_cfg.start,
> > 
> >                                        rsrc_cfg.start + 4, 0);
> >         
> >         }
> 
> The only difference here is that you're not setting hose->ops to
> fsl_indirect_pci_ops.  Do you know why that is helping, and what
> hose->ops is set to instead?
> 
> -Scott

The difference is only the read function in hose->ops, which is set to 
indirect_read_config instead of fsl_indirect_read_config.

fsl_indirect_read_config calls fsl_pcie_check_link, which is where the Oops 
occurs. 

Mike, can you find out where exactly in fsl_pcie_check_link the bad access 
happens? Enabling CONFIG_DEBUG_BUGVERBOSE might help.

   Rojhalat
Michael Guntsche June 11, 2013, 5:09 p.m. UTC | #3
On Tue, Jun 11, 2013 at 7:00 PM, Scott Wood <scottwood@freescale.com> wrote:
> On 06/11/2013 02:24:28 AM, Rojhalat Ibrahim wrote:
>>
>> On Monday 10 June 2013 17:52:33 Scott Wood wrote:
>> > On 06/10/2013 12:07:43 PM, Michael Guntsche wrote:
>> > > Good evening,
>> > >
>> > > This patch does not fix the problem, during boot the kernel still
>> > > panics. I had a closer look at the commit and the following patch
>> > > fixes it for me....
>> > >
>> > > diff --git a/arch/powerpc/sysdev/fsl_pci.c
>> > > b/arch/powerpc/sysdev/fsl_pci.c
>> > > index 028ac1f..21b687f 100644
>> > > --- a/arch/powerpc/sysdev/fsl_pci.c
>> > > +++ b/arch/powerpc/sysdev/fsl_pci.c
>> > > @@ -814,7 +814,7 @@ int __init mpc83xx_add_bridge(struct device_node
>> > > *dev)
>> > >
>> > >                 if (ret)
>> > >
>> > >                         goto err0;
>> > >
>> > >         } else {
>> > >
>> > > -               fsl_setup_indirect_pci(hose, rsrc_cfg.start,
>> > > +               setup_indirect_pci(hose, rsrc_cfg.start,
>> > >
>> > >                                        rsrc_cfg.start + 4, 0);
>> > >
>> > >         }
>> >
>> > The only difference here is that you're not setting hose->ops to
>> > fsl_indirect_pci_ops.  Do you know why that is helping, and what
>> > hose->ops is set to instead?
>> >
>> > -Scott
>>
>> The difference is only the read function in hose->ops, which is set to
>> indirect_read_config instead of fsl_indirect_read_config.
>>
>> fsl_indirect_read_config calls fsl_pcie_check_link, which is where the
>> Oops
>> occurs.
>
>
> Why is fsl_pcie_check_link being called for non-PCIe buses?
>
>
>> Mike, can you find out where exactly in fsl_pcie_check_link the bad access
>> happens? Enabling CONFIG_DEBUG_BUGVERBOSE might help.
>
>
> Why does it matter?  You shouldn't be calling that function at all.
>
> -Scott

For the record BUGVERBOSE is already set with this build so this is
the most detailed trace I get. And regarding Scott's remark, maybe I
was not clear enough in my first report. This is a PCI only board so I
also wondered about the call to fsl_pcie_check_link in the first
place. Since apparently the 83xx related add bridge code already has a
case for boards with PCIe support. So I think the change should really
happen somewhere in this code and not in the PCI only path.

/Mike
diff mbox

Patch

diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 028ac1f..21b687f 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -814,7 +814,7 @@  int __init mpc83xx_add_bridge(struct device_node *dev)
                if (ret)
                        goto err0;
        } else {
-               fsl_setup_indirect_pci(hose, rsrc_cfg.start,
+               setup_indirect_pci(hose, rsrc_cfg.start,
                                       rsrc_cfg.start + 4, 0);
        }