@@ -3202,6 +3202,21 @@ static void pci_bus_rescan_prepare(struct pci_bus *bus)
} else if (dev->driver &&
dev->driver->rescan_prepare) {
dev->driver->rescan_prepare(dev);
+ } else if (dev->driver || ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA)) {
+ int i;
+
+ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+ struct resource *r = &dev->resource[i];
+
+ if (!r->flags || !r->parent ||
+ (r->flags & IORESOURCE_UNSET) ||
+ (r->flags & IORESOURCE_PCI_FIXED))
+ continue;
+
+ r->flags |= IORESOURCE_PCI_FIXED;
+ pci_warn(dev, "%s: no support for movable BARs, mark BAR %d (%pR) as fixed\n",
+ __func__, i, r);
+ }
}
}
}
If a PCIe device driver doesn't yet have support for movable BARs, mark device's BARs with IORESOURCE_PCI_FIXED. Signed-off-by: Sergey Miroshnichenko <s.miroshnichenko@yadro.com> --- drivers/pci/probe.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)