* [PATCH 08/10] PCI, parisc: clip firmware assigned resource under parent bridge's
[not found] <1421090600-9750-1-git-send-email-yinghai@kernel.org>
@ 2015-01-12 19:23 ` Yinghai Lu
2015-01-13 21:01 ` Helge Deller
0 siblings, 1 reply; 2+ messages in thread
From: Yinghai Lu @ 2015-01-12 19:23 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-kernel, Yinghai Lu, James E.J. Bottomley,
Helge Deller, linux-parisc
Some bios put range that is not fully coverred by root bus resources.
Try to clip them and update them in pci bridge bars.
We'd like to fix other arches instead of just x86.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=85491
Reported-by: Marek Kordik <kordikmarek@gmail.com>
Fixes: 5b28541552ef ("PCI: Restrict 64-bit prefetchable bridge windows to 64-bit resources")
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: "James E.J. Bottomley" <jejb@parisc-linux.org>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-parisc@vger.kernel.org
---
drivers/parisc/lba_pci.c | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c
index 37e71ff..e6ab352 100644
--- a/drivers/parisc/lba_pci.c
+++ b/drivers/parisc/lba_pci.c
@@ -692,11 +692,25 @@ lba_fixup_bus(struct pci_bus *bus)
*/
if (bus->parent) {
int i;
+ bool changed = false;
+
+ dev = bus->self;
/* PCI-PCI Bridge */
pci_read_bridge_bases(bus);
for (i = PCI_BRIDGE_RESOURCES; i < PCI_NUM_RESOURCES; i++) {
- pci_claim_resource(bus->self, i);
+ struct resource *res = &dev->resource[i];
+
+ if (pci_claim_resource(dev, i) >= 0)
+ continue;
+
+ if (pci_bus_clip_resource(dev, res)) {
+ changed = true;
+ if (pci_claim_resource(dev, i) >= 0)
+ continue;
+ }
}
+ if (changed)
+ pci_setup_bridge(bus);
} else {
/* Host-PCI Bridge */
int err;
@@ -776,7 +790,15 @@ lba_fixup_bus(struct pci_bus *bus)
** that share expansion ROMs (think quad tulip), but
** isn't harmful.
*/
- pci_claim_resource(dev, i);
+ if (pci_claim_resource(dev, i) >= 0)
+ continue;
+
+ /* try again with clip */
+ if (i != PCI_ROM_RESOURCE &&
+ pci_bus_clip_resource(dev, res)) {
+ pci_update_resource(dev, i);
+ pci_claim_resource(dev, i);
+ }
}
#ifdef FBB_SUPPORT
--
1.8.4.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 08/10] PCI, parisc: clip firmware assigned resource under parent bridge's
2015-01-12 19:23 ` [PATCH 08/10] PCI, parisc: clip firmware assigned resource under parent bridge's Yinghai Lu
@ 2015-01-13 21:01 ` Helge Deller
0 siblings, 0 replies; 2+ messages in thread
From: Helge Deller @ 2015-01-13 21:01 UTC (permalink / raw)
To: Yinghai Lu, Bjorn Helgaas
Cc: linux-pci, linux-kernel, James E.J. Bottomley, linux-parisc
On 12.01.2015 20:23, Yinghai Lu wrote:
> Some bios put range that is not fully coverred by root bus resources.
> Try to clip them and update them in pci bridge bars.
>
> We'd like to fix other arches instead of just x86.
>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=85491
> Reported-by: Marek Kordik <kordikmarek@gmail.com>
> Fixes: 5b28541552ef ("PCI: Restrict 64-bit prefetchable bridge windows to 64-bit resources")
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> Cc: "James E.J. Bottomley" <jejb@parisc-linux.org>
> Cc: Helge Deller <deller@gmx.de>
> Cc: linux-parisc@vger.kernel.org
I tested it on the parisc arch - everything OK.
Acked-by: Helge Deller <deller@gmx.de>
Thanks!
Helge
> ---
> drivers/parisc/lba_pci.c | 26 ++++++++++++++++++++++++--
> 1 file changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c
> index 37e71ff..e6ab352 100644
> --- a/drivers/parisc/lba_pci.c
> +++ b/drivers/parisc/lba_pci.c
> @@ -692,11 +692,25 @@ lba_fixup_bus(struct pci_bus *bus)
> */
> if (bus->parent) {
> int i;
> + bool changed = false;
> +
> + dev = bus->self;
> /* PCI-PCI Bridge */
> pci_read_bridge_bases(bus);
> for (i = PCI_BRIDGE_RESOURCES; i < PCI_NUM_RESOURCES; i++) {
> - pci_claim_resource(bus->self, i);
> + struct resource *res = &dev->resource[i];
> +
> + if (pci_claim_resource(dev, i) >= 0)
> + continue;
> +
> + if (pci_bus_clip_resource(dev, res)) {
> + changed = true;
> + if (pci_claim_resource(dev, i) >= 0)
> + continue;
> + }
> }
> + if (changed)
> + pci_setup_bridge(bus);
> } else {
> /* Host-PCI Bridge */
> int err;
> @@ -776,7 +790,15 @@ lba_fixup_bus(struct pci_bus *bus)
> ** that share expansion ROMs (think quad tulip), but
> ** isn't harmful.
> */
> - pci_claim_resource(dev, i);
> + if (pci_claim_resource(dev, i) >= 0)
> + continue;
> +
> + /* try again with clip */
> + if (i != PCI_ROM_RESOURCE &&
> + pci_bus_clip_resource(dev, res)) {
> + pci_update_resource(dev, i);
> + pci_claim_resource(dev, i);
> + }
> }
>
> #ifdef FBB_SUPPORT
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-01-13 21:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1421090600-9750-1-git-send-email-yinghai@kernel.org>
2015-01-12 19:23 ` [PATCH 08/10] PCI, parisc: clip firmware assigned resource under parent bridge's Yinghai Lu
2015-01-13 21:01 ` Helge Deller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).