2013-06-14 09:05:45

by Rojhalat Ibrahim

[permalink] [raw]
Subject: [PATCH v2] powerpc/pci: Fix setup of Freescale PCI / PCIe controllers

Commit 50d8f87d2b3 (powerpc/fsl-pci Make PCIe hotplug work with Freescale
PCIe controllers) does not handle non-PCIe controllers properly, which causes
a panic during boot for certain configurations.
This patch fixes the issue by calling setup_indirect_pci for all device types.
fsl_indirect_read_config is now only used for booke/86xx PCIe controllers.

Reported-by: Michael Guntsche <[email protected]>
Cc: Scott Wood <[email protected]>
Signed-off-by: Rojhalat Ibrahim <[email protected]>
---
v2: Make it more consistent.

arch/powerpc/sysdev/fsl_pci.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 028ac1f..5682c8a 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -97,20 +97,12 @@ static int fsl_indirect_read_config(struct pci_bus *bus,
unsigned int devfn,
return indirect_read_config(bus, devfn, offset, len, val);
}

-static struct pci_ops fsl_indirect_pci_ops =
+static struct pci_ops fsl_indirect_pcie_ops =
{
.read = fsl_indirect_read_config,
.write = indirect_write_config,
};

-static void __init fsl_setup_indirect_pci(struct pci_controller* hose,
- resource_size_t cfg_addr,
- resource_size_t cfg_data, u32 flags)
-{
- setup_indirect_pci(hose, cfg_addr, cfg_data, flags);
- hose->ops = &fsl_indirect_pci_ops;
-}
-
#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)

#define MAX_PHYS_ADDR_BITS 40
@@ -504,13 +496,15 @@ int __init fsl_add_bridge(struct platform_device *pdev,
int is_primary)
if (!hose->private_data)
goto no_bridge;

- fsl_setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
- PPC_INDIRECT_TYPE_BIG_ENDIAN);
+ setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
+ PPC_INDIRECT_TYPE_BIG_ENDIAN);

if (in_be32(&pci->block_rev1) < PCIE_IP_REV_3_0)
hose->indirect_type |= PPC_INDIRECT_TYPE_FSL_CFG_REG_LINK;

if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
+ /* use fsl_indirect_read_config for PCIe */
+ hose->ops = &fsl_indirect_pcie_ops;
/* For PCIE read HEADER_TYPE to identify controler mode */
early_read_config_byte(hose, 0, 0, PCI_HEADER_TYPE, &hdr_type);
if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE)
@@ -814,8 +808,8 @@ int __init mpc83xx_add_bridge(struct device_node *dev)
if (ret)
goto err0;
} else {
- fsl_setup_indirect_pci(hose, rsrc_cfg.start,
- rsrc_cfg.start + 4, 0);
+ setup_indirect_pci(hose, rsrc_cfg.start,
+ rsrc_cfg.start + 4, 0);
}

printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "

--
1.8.1.5


2013-06-14 20:18:22

by Scott Wood

[permalink] [raw]
Subject: Re: [PATCH v2] powerpc/pci: Fix setup of Freescale PCI / PCIe controllers

On 06/14/2013 04:05:34 AM, Rojhalat Ibrahim wrote:
> Commit 50d8f87d2b3 (powerpc/fsl-pci Make PCIe hotplug work with
> Freescale
> PCIe controllers) does not handle non-PCIe controllers properly,
> which causes
> a panic during boot for certain configurations.
> This patch fixes the issue by calling setup_indirect_pci for all
> device types.
> fsl_indirect_read_config is now only used for booke/86xx PCIe
> controllers.
>
> Reported-by: Michael Guntsche <[email protected]>
> Cc: Scott Wood <[email protected]>
> Signed-off-by: Rojhalat Ibrahim <[email protected]>
> ---
> v2: Make it more consistent.
>
> arch/powerpc/sysdev/fsl_pci.c | 20 +++++++-------------
> 1 file changed, 7 insertions(+), 13 deletions(-)
>
> diff --git a/arch/powerpc/sysdev/fsl_pci.c
> b/arch/powerpc/sysdev/fsl_pci.c
> index 028ac1f..5682c8a 100644
> --- a/arch/powerpc/sysdev/fsl_pci.c
> +++ b/arch/powerpc/sysdev/fsl_pci.c
> @@ -97,20 +97,12 @@ static int fsl_indirect_read_config(struct
> pci_bus *bus,
> unsigned int devfn,
> return indirect_read_config(bus, devfn, offset, len, val);
> }
>
> -static struct pci_ops fsl_indirect_pci_ops =
> +static struct pci_ops fsl_indirect_pcie_ops =
> {
> .read = fsl_indirect_read_config,
> .write = indirect_write_config,
> };

On 83xx:
cc1: warnings being treated as errors
/home/scott/fsl/git/linux/upstream/arch/powerpc/sysdev/fsl_pci.c:100:23:
error: 'fsl_indirect_pcie_ops' defined but not used
make[2]: *** [arch/powerpc/sysdev/fsl_pci.o] Error 1
make[2]: *** Waiting for unfinished jobs....

I can fix this when applying, but this makes me wonder how you tested
it, given that the whole point is to fix 83xx... Did you fix this and
then accidentally sent a stale version?

Also, please be careful that the patch doesn't get line wrapped -- I
had to manually unwrap a couple places. Use git send-email if you
can't get KMail to cooperate.

-Scott

2013-06-17 13:15:40

by Rojhalat Ibrahim

[permalink] [raw]
Subject: Re: [PATCH v2] powerpc/pci: Fix setup of Freescale PCI / PCIe controllers

On Friday 14 June 2013 15:18:03 Scott Wood wrote:
> On 06/14/2013 04:05:34 AM, Rojhalat Ibrahim wrote:
> > Commit 50d8f87d2b3 (powerpc/fsl-pci Make PCIe hotplug work with
> > Freescale
> > PCIe controllers) does not handle non-PCIe controllers properly,
> > which causes
> > a panic during boot for certain configurations.
> > This patch fixes the issue by calling setup_indirect_pci for all
> > device types.
> > fsl_indirect_read_config is now only used for booke/86xx PCIe
> > controllers.
> >
> > Reported-by: Michael Guntsche <[email protected]>
> > Cc: Scott Wood <[email protected]>
> > Signed-off-by: Rojhalat Ibrahim <[email protected]>
> > ---
> > v2: Make it more consistent.
> >
> > arch/powerpc/sysdev/fsl_pci.c | 20 +++++++-------------
> > 1 file changed, 7 insertions(+), 13 deletions(-)
> >
> > diff --git a/arch/powerpc/sysdev/fsl_pci.c
> > b/arch/powerpc/sysdev/fsl_pci.c
> > index 028ac1f..5682c8a 100644
> > --- a/arch/powerpc/sysdev/fsl_pci.c
> > +++ b/arch/powerpc/sysdev/fsl_pci.c
> > @@ -97,20 +97,12 @@ static int fsl_indirect_read_config(struct
> > pci_bus *bus,
> > unsigned int devfn,
> >
> > return indirect_read_config(bus, devfn, offset, len, val);
> >
> > }
> >
> > -static struct pci_ops fsl_indirect_pci_ops =
> > +static struct pci_ops fsl_indirect_pcie_ops =
> >
> > {
> >
> > .read = fsl_indirect_read_config,
> > .write = indirect_write_config,
> >
> > };
>
> On 83xx:
> cc1: warnings being treated as errors
> /home/scott/fsl/git/linux/upstream/arch/powerpc/sysdev/fsl_pci.c:100:23:
> error: 'fsl_indirect_pcie_ops' defined but not used
> make[2]: *** [arch/powerpc/sysdev/fsl_pci.o] Error 1
> make[2]: *** Waiting for unfinished jobs....
>
> I can fix this when applying, but this makes me wonder how you tested
> it, given that the whole point is to fix 83xx... Did you fix this and
> then accidentally sent a stale version?
>
> Also, please be careful that the patch doesn't get line wrapped -- I
> had to manually unwrap a couple places. Use git send-email if you
> can't get KMail to cooperate.
>
> -Scott

Sorry about the mess. I'll send a v3.
Please note: I don't have an 83xx system. So I can only test if it compiles,
which I obviously did not do with the right config.

Rojhalat

2013-06-18 00:12:26

by Scott Wood

[permalink] [raw]
Subject: Re: [PATCH v2] powerpc/pci: Fix setup of Freescale PCI / PCIe controllers

On 06/17/2013 08:15:33 AM, Rojhalat Ibrahim wrote:
> On Friday 14 June 2013 15:18:03 Scott Wood wrote:
> > On 83xx:
> > cc1: warnings being treated as errors
> >
> /home/scott/fsl/git/linux/upstream/arch/powerpc/sysdev/fsl_pci.c:100:23:
> > error: 'fsl_indirect_pcie_ops' defined but not used
> > make[2]: *** [arch/powerpc/sysdev/fsl_pci.o] Error 1
> > make[2]: *** Waiting for unfinished jobs....
> >
> > I can fix this when applying, but this makes me wonder how you
> tested
> > it, given that the whole point is to fix 83xx... Did you fix this
> and
> > then accidentally sent a stale version?
> >
> > Also, please be careful that the patch doesn't get line wrapped -- I
> > had to manually unwrap a couple places. Use git send-email if you
> > can't get KMail to cooperate.
> >
> > -Scott
>
> Sorry about the mess. I'll send a v3.
> Please note: I don't have an 83xx system. So I can only test if it
> compiles,
> which I obviously did not do with the right config.

OK, so it looks like it was Michael who ran into the problem on 83xx.
Michael, could you test the v3 patch that Rojhalat posted?

-Scott

2013-06-18 17:32:01

by Michael Guntsche

[permalink] [raw]
Subject: Re: [PATCH v2] powerpc/pci: Fix setup of Freescale PCI / PCIe controllers

On Tue, Jun 18, 2013 at 2:10 AM, Scott Wood <[email protected]> wrote:
> On 06/17/2013 08:15:33 AM, Rojhalat Ibrahim wrote:
>>
>> On Friday 14 June 2013 15:18:03 Scott Wood wrote:
>> > On 83xx:
>> > cc1: warnings being treated as errors
>> > /home/scott/fsl/git/linux/upstream/arch/powerpc/sysdev/fsl_pci.c:100:23:
>> > error: 'fsl_indirect_pcie_ops' defined but not used
>> > make[2]: *** [arch/powerpc/sysdev/fsl_pci.o] Error 1
>> > make[2]: *** Waiting for unfinished jobs....
>> >
>> > I can fix this when applying, but this makes me wonder how you tested
>> > it, given that the whole point is to fix 83xx... Did you fix this and
>> > then accidentally sent a stale version?
>> >
>> > Also, please be careful that the patch doesn't get line wrapped -- I
>> > had to manually unwrap a couple places. Use git send-email if you
>> > can't get KMail to cooperate.
>> >
>> > -Scott
>>
>> Sorry about the mess. I'll send a v3.
>> Please note: I don't have an 83xx system. So I can only test if it
>> compiles,
>> which I obviously did not do with the right config.
>
>
> OK, so it looks like it was Michael who ran into the problem on 83xx.
> Michael, could you test the v3 patch that Rojhalat posted?
>
> -Scott

I did a quick check against -rc6 and the system compiles and boots up fine.

/Mike