From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: Joshua Kinard <kumba@gentoo.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Ralf Baechle <ralf@linux-mips.org>,
linux-mips@linux-mips.org,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Jayachandran C <jchandra@broadcom.com>,
Ganesan Ramalingam <ganesanr@broadcom.com>,
David Daney <david.daney@cavium.com>,
linux-pci@vger.kernel.org, Andy Isaacson <adi@hexapodia.org>,
Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] MIPS/PCI: Claim bus resources on PCI_PROBE_ONLY set-ups
Date: Mon, 17 Oct 2016 19:09:55 +0100 [thread overview]
Message-ID: <20161017180955.GA28905@red-moon> (raw)
In-Reply-To: <6ec8688e-57ed-33b3-3fe0-55d7d69a2c47@gentoo.org>
On Mon, Oct 17, 2016 at 12:36:34AM -0400, Joshua Kinard wrote:
> On 06/23/2016 18:16, Bjorn Helgaas wrote:
> > We claim PCI BAR and bridge window resources in pci_bus_assign_resources(),
> > but when PCI_PROBE_ONLY is set, we treat those resources as immutable and
> > don't call pci_bus_assign_resources(), so the resources aren't put in the
> > resource tree.
> >
> > When the resources aren't in the tree, they don't show up in /proc/iomem,
> > we can't detect conflicts, and we need special cases elsewhere for
> > PCI_PROBE_ONLY or resources without a parent pointer.
> >
> > Claim all PCI BAR and window resources in the PCI_PROBE_ONLY case.
> >
> > If a PCI_PROBE_ONLY platform assigns conflicting resources, Linux can't fix
> > the conflicts. Previously we didn't notice the conflicts, but now we will,
> > which may expose new failures.
> >
> > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> > ---
> > arch/mips/pci/pci.c | 9 ++++++++-
> > 1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c
> > index 5717384..b4c02f2 100644
> > --- a/arch/mips/pci/pci.c
> > +++ b/arch/mips/pci/pci.c
> > @@ -112,7 +112,14 @@ static void pcibios_scanbus(struct pci_controller *hose)
> > need_domain_info = 1;
> > }
> >
> > - if (!pci_has_flag(PCI_PROBE_ONLY)) {
> > + /*
> > + * We insert PCI resources into the iomem_resource and
> > + * ioport_resource trees in either pci_bus_claim_resources()
> > + * or pci_bus_assign_resources().
> > + */
> > + if (pci_has_flag(PCI_PROBE_ONLY)) {
> > + pci_bus_claim_resources(bus);
> > + } else {
> > pci_bus_size_bridges(bus);
> > pci_bus_assign_resources(bus);
> > }
>
> So I finally tested this on two SGI platforms, IP30 and IP27. For IP30, it
> works fine once I drop the "pci_set_flags(PCI_PROBE_ONLY);" call. IP30 uses
> standard virtual addressing via ioremap and the like for all of its PCI stuff,
> so it was trivial to fix it.
>
> IP27, on the other hand, is not happy with this change. I don't know about
> mainline IP27, as that's generally bitrotted and didn't boot the last time I
> tried it, but under the refactored code I'm using that actually boots, this
> platform still needs to bypass *all* attempts to claim or assign the PCI addresses.
>
> I suspect the difference with IP27 is unlike normal systems, IP27 uses special
> physical addresses in the 0x92xxxxxxxxxxxxxx block to address I/O devices, so
> there's no proper ioremap or use of virtual addressing for I/O. Ralf, does
> this sound correct?
>
> If I use the patches I got plus this change and set PCI_PROBE_ONLY, this is
> what happens:
>
> [ 47.299511] PCI host bridge to bus 0001:00
> [ 47.348155] pci_bus 0001:00: root bus resource [mem
> 0x920000000f200000-0x920000000f9fffff]
> [ 47.447663] pci_bus 0001:00: root bus resource [io
> 0x920000000fa00000-0x920000000fbfffff]
> [ 47.547183] pci_bus 0001:00: root bus resource [bus 01-ff]
> [ 47.616581] pci 0001:00:00.0: can't claim BAR 0 [io 0xf200000-0xf2000ff]:
> no compatible bridge window
> [ 47.726766] pci 0001:00:00.0: can't claim BAR 1 [mem 0x0f200000-0x0f200fff]:
> no compatible bridge window
> [ 47.840937] pci 0001:00:00.0: can't claim BAR 6 [mem 0x00000000-0x0000ffff
> pref]: no compatible bridge window
> [ 47.960317] pci 0001:00:01.0: can't claim BAR 0 [io 0xf400000-0xf4000ff]:
> no compatible bridge window
> [ 48.072399] pci 0001:00:01.0: can't claim BAR 1 [mem 0x0f400000-0x0f400fff]:
> no compatible bridge window
> [ 48.186560] pci 0001:00:01.0: can't claim BAR 6 [mem 0x00000000-0x0000ffff
> pref]: no compatible bridge window
> [ 48.305957] pci 0001:00:02.0: can't claim BAR 0 [mem 0x0f600000-0x0f6fffff]:
> no compatible bridge window
> [ 48.420098] pci 0001:00:06.0: can't claim BAR 0 [mem 0x0fa00000-0x0fafffff]:
> no compatible bridge window
> [ 48.534294] pci 0001:00:07.0: can't claim BAR 0 [mem 0x00000000-0x00001fff]:
> no compatible bridge window
> [ 48.648541] qla1280: QLA1040 found on PCI bus 0, dev 0
> [ 48.710232] PCI: Enabling device 0001:00:00.0 (0006 -> 0007)
> [ 48.779231] qla1280 0001:00:00.0: can't ioremap BAR 1: [mem size 0x00001000]
> [ 48.863145] qla1280: Unable to map I/O memory
> [ 48.916520] qla1280: QLA1040 found on PCI bus 0, dev 1
> [ 48.977298] PCI: Enabling device 0001:00:01.0 (0006 -> 0007)
> [ 49.046128] qla1280 0001:00:01.0: can't ioremap BAR 1: [mem size 0x00001000]
> [ 49.130201] qla1280: Unable to map I/O memory
> [ 49.183068] IOC3 0001:00:02.0: can't ioremap BAR 0: [mem size 0x00100000]
> [ 49.264292] ioc3: Unable to remap PCI BAR for 0001:00:02.0.
> [ 49.331533] IOC3 0001:00:06.0: can't ioremap BAR 0: [mem size 0x00100000]
> [ 49.412984] ioc3: Unable to remap PCI BAR for 0001:00:06.0.
>
>
> If I disable PCI_PROBE_ONLY, then this:
>
> [ 47.588033] PCI host bridge to bus 0001:00
> [ 47.636649] pci_bus 0001:00: root bus resource [mem
> 0x920000000f200000-0x920000000f9fffff]
> [ 47.736144] pci_bus 0001:00: root bus resource [io
> 0x920000000fa00000-0x920000000fbfffff]
> [ 47.835621] pci_bus 0001:00: root bus resource [bus 01-ff]
> [ 47.905023] pci 0001:00:02.0: BAR 0: no space for [mem size 0x00100000]
> [ 47.982775] pci 0001:00:02.0: BAR 0: failed to assign [mem size 0x00100000]
> [ 48.066586] pci 0001:00:06.0: BAR 0: no space for [mem size 0x00100000]
> [ 48.146173] pci 0001:00:06.0: BAR 0: failed to assign [mem size 0x00100000]
> [ 48.229972] pci 0001:00:00.0: BAR 6: no space for [mem size 0x00010000 pref]
> [ 48.314783] pci 0001:00:00.0: BAR 6: failed to assign [mem size 0x00010000 pref]
> [ 48.403825] pci 0001:00:01.0: BAR 6: no space for [mem size 0x00010000 pref]
> [ 48.488655] pci 0001:00:01.0: BAR 6: failed to assign [mem size 0x00010000 pref]
> [ 48.577695] pci 0001:00:00.0: BAR 1: no space for [mem size 0x00001000]
> [ 48.657260] pci 0001:00:00.0: BAR 1: failed to assign [mem size 0x00001000]
> [ 48.741068] pci 0001:00:01.0: BAR 1: no space for [mem size 0x00001000]
> [ 48.820644] pci 0001:00:01.0: BAR 1: failed to assign [mem size 0x00001000]
> [ 48.904452] pci 0001:00:00.0: BAR 0: no space for [io size 0x0100]
> [ 48.979840] pci 0001:00:00.0: BAR 0: failed to assign [io size 0x0100]
> [ 49.059459] pci 0001:00:01.0: BAR 0: no space for [io size 0x0100]
> [ 49.134855] pci 0001:00:01.0: BAR 0: failed to assign [io size 0x0100]
> [ 49.214588] qla1280: QLA1040 found on PCI bus 0, dev 0
> [ 49.277249] qla1280 0001:00:00.0: can't ioremap BAR 1: [??? 0x00000000 flags
> 0x0]
> [ 49.366330] qla1280: Unable to map I/O memory
> [ 49.419832] qla1280: QLA1040 found on PCI bus 0, dev 1
> [ 49.481211] qla1280 0001:00:01.0: can't ioremap BAR 1: [??? 0x00000000 flags
> 0x0]
> [ 49.570560] qla1280: Unable to map I/O memory
> [ 49.623439] IOC3 0001:00:02.0: can't ioremap BAR 0: [??? 0x00000000 flags 0x0]
> [ 49.709857] ioc3: Unable to remap PCI BAR for 0001:00:02.0.
> [ 49.777113] IOC3 0001:00:06.0: can't ioremap BAR 0: [??? 0x00000000 flags 0x0]
> [ 49.863796] ioc3: Unable to remap PCI BAR for 0001:00:06.0.
>
>
> The only fix I could come up with was more IP27 #ifdef hackery to retain the
> original code for IP27, but use the new conditional logic for all other
> platforms. Would a patch for this be acceptable (with verbose comment), or is
> there a better way to deal with IP27 that doesn't involve re-writing its I/O
> addressing support entirely?
Would you mind providing a kernel boot log, lspci output and /proc/iomem
/proc/ioports for your "working" system boot ? That would help debugging
what's the expected resources allocation for the system and consequently
where the problem currently lies.
Thanks,
Lorenzo
next prev parent reply other threads:[~2016-10-17 18:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-23 22:16 [PATCH] PCI: PCI_PROBE_ONLY clean-up Bjorn Helgaas
2016-06-23 22:16 ` [PATCH] MIPS/PCI: Claim bus resources on PCI_PROBE_ONLY set-ups Bjorn Helgaas
2016-10-17 4:36 ` Joshua Kinard
2016-10-17 18:09 ` Lorenzo Pieralisi [this message]
2016-10-18 0:30 ` Joshua Kinard
2016-10-19 11:04 ` Lorenzo Pieralisi
2016-10-31 19:36 ` Joshua Kinard
2016-11-01 4:06 ` Lorenzo Pieralisi
2016-06-24 15:50 ` [PATCH] PCI: PCI_PROBE_ONLY clean-up Ralf Baechle
2016-06-24 18:46 ` Andy Isaacson
2016-06-24 22:35 ` Ralf Baechle
2016-06-24 23:24 ` Joshua Kinard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161017180955.GA28905@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=adi@hexapodia.org \
--cc=bhelgaas@google.com \
--cc=david.daney@cavium.com \
--cc=ganesanr@broadcom.com \
--cc=jchandra@broadcom.com \
--cc=kumba@gentoo.org \
--cc=linux-mips@linux-mips.org \
--cc=linux-pci@vger.kernel.org \
--cc=ralf@linux-mips.org \
--cc=tsbogend@alpha.franken.de \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.