|
@@ -165,15 +165,19 @@ static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev,
|
|
|
resource_size_t start, end;
|
|
|
int ret = 0;
|
|
|
|
|
|
- if (res->flags & IORESOURCE_IO)
|
|
|
- root = &ioport_resource;
|
|
|
- else
|
|
|
- root = &iomem_resource;
|
|
|
-
|
|
|
start = res->start;
|
|
|
end = res->end;
|
|
|
res->start = dev->fw_addr[resno];
|
|
|
res->end = res->start + size - 1;
|
|
|
+
|
|
|
+ root = pci_find_parent_resource(dev, res);
|
|
|
+ if (!root) {
|
|
|
+ if (res->flags & IORESOURCE_IO)
|
|
|
+ root = &ioport_resource;
|
|
|
+ else
|
|
|
+ root = &iomem_resource;
|
|
|
+ }
|
|
|
+
|
|
|
dev_info(&dev->dev, "BAR %d: trying firmware assignment %pR\n",
|
|
|
resno, res);
|
|
|
conflict = request_resource_conflict(root, res);
|