|
@@ -51,12 +51,6 @@ void pci_update_resource(struct pci_dev *dev, int resno)
|
|
|
|
|
|
pcibios_resource_to_bus(dev, ®ion, res);
|
|
|
|
|
|
- dev_dbg(&dev->dev, "BAR %d: got res %pR bus [%#llx-%#llx] "
|
|
|
- "flags %#lx\n", resno, res,
|
|
|
- (unsigned long long)region.start,
|
|
|
- (unsigned long long)region.end,
|
|
|
- (unsigned long)res->flags);
|
|
|
-
|
|
|
new = region.start | (res->flags & PCI_REGION_FLAG_MASK);
|
|
|
if (res->flags & IORESOURCE_IO)
|
|
|
mask = (u32)PCI_BASE_ADDRESS_IO_MASK;
|
|
@@ -91,9 +85,9 @@ void pci_update_resource(struct pci_dev *dev, int resno)
|
|
|
}
|
|
|
}
|
|
|
res->flags &= ~IORESOURCE_UNSET;
|
|
|
- dev_dbg(&dev->dev, "BAR %d: moved to %pR (bus addr [%#llx-%#llx])\n",
|
|
|
- resno, res, (unsigned long long)region.start,
|
|
|
- (unsigned long long)region.end);
|
|
|
+ dev_info(&dev->dev, "BAR %d: set to %pR (PCI address [%#llx-%#llx]\n",
|
|
|
+ resno, res, (unsigned long long)region.start,
|
|
|
+ (unsigned long long)region.end);
|
|
|
}
|
|
|
|
|
|
int pci_claim_resource(struct pci_dev *dev, int resource)
|
|
@@ -103,20 +97,17 @@ int pci_claim_resource(struct pci_dev *dev, int resource)
|
|
|
int err;
|
|
|
|
|
|
root = pci_find_parent_resource(dev, res);
|
|
|
-
|
|
|
- err = -EINVAL;
|
|
|
- if (root != NULL)
|
|
|
- err = request_resource(root, res);
|
|
|
-
|
|
|
- if (err) {
|
|
|
- const char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge";
|
|
|
- dev_err(&dev->dev, "BAR %d: %s of %s %pR\n",
|
|
|
- resource,
|
|
|
- root ? "address space collision on" :
|
|
|
- "no parent found for",
|
|
|
- dtype, res);
|
|
|
+ if (!root) {
|
|
|
+ dev_err(&dev->dev, "no compatible bridge window for %pR\n",
|
|
|
+ res);
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ err = request_resource(root, res);
|
|
|
+ if (err)
|
|
|
+ dev_err(&dev->dev,
|
|
|
+ "address space collision: %pR already in use\n", res);
|
|
|
+
|
|
|
return err;
|
|
|
}
|
|
|
EXPORT_SYMBOL(pci_claim_resource);
|
|
@@ -124,7 +115,7 @@ EXPORT_SYMBOL(pci_claim_resource);
|
|
|
#ifdef CONFIG_PCI_QUIRKS
|
|
|
void pci_disable_bridge_window(struct pci_dev *dev)
|
|
|
{
|
|
|
- dev_dbg(&dev->dev, "Disabling bridge window.\n");
|
|
|
+ dev_info(&dev->dev, "disabling bridge mem windows\n");
|
|
|
|
|
|
/* MMIO Base/Limit */
|
|
|
pci_write_config_dword(dev, PCI_MEMORY_BASE, 0x0000fff0);
|
|
@@ -165,6 +156,7 @@ static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev,
|
|
|
|
|
|
if (!ret) {
|
|
|
res->flags &= ~IORESOURCE_STARTALIGN;
|
|
|
+ dev_info(&dev->dev, "BAR %d: assigned %pR\n", resno, res);
|
|
|
if (resno < PCI_BRIDGE_RESOURCES)
|
|
|
pci_update_resource(dev, resno);
|
|
|
}
|
|
@@ -178,10 +170,11 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
|
|
|
resource_size_t align;
|
|
|
struct pci_bus *bus;
|
|
|
int ret;
|
|
|
+ char *type;
|
|
|
|
|
|
align = pci_resource_alignment(dev, res);
|
|
|
if (!align) {
|
|
|
- dev_info(&dev->dev, "BAR %d: can't allocate %pR "
|
|
|
+ dev_info(&dev->dev, "BAR %d: can't assign %pR "
|
|
|
"(bogus alignment)\n", resno, res);
|
|
|
return -EINVAL;
|
|
|
}
|
|
@@ -197,9 +190,20 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (ret)
|
|
|
- dev_info(&dev->dev, "BAR %d: can't allocate %pR\n",
|
|
|
- resno, res);
|
|
|
+ if (ret) {
|
|
|
+ if (res->flags & IORESOURCE_MEM)
|
|
|
+ if (res->flags & IORESOURCE_PREFETCH)
|
|
|
+ type = "mem pref";
|
|
|
+ else
|
|
|
+ type = "mem";
|
|
|
+ else if (res->flags & IORESOURCE_IO)
|
|
|
+ type = "io";
|
|
|
+ else
|
|
|
+ type = "unknown";
|
|
|
+ dev_info(&dev->dev,
|
|
|
+ "BAR %d: can't assign %s (size %#llx)\n",
|
|
|
+ resno, type, (unsigned long long) resource_size(res));
|
|
|
+ }
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
@@ -272,8 +276,8 @@ int pci_enable_resources(struct pci_dev *dev, int mask)
|
|
|
continue;
|
|
|
|
|
|
if (!r->parent) {
|
|
|
- dev_err(&dev->dev, "device not available because of "
|
|
|
- "BAR %d %pR collisions\n", i, r);
|
|
|
+ dev_err(&dev->dev, "device not available "
|
|
|
+ "(can't reserve %pR)\n", r);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|