Commit 999ed65a authored by Rene Herman's avatar Rene Herman Committed by Linus Torvalds

pnp: have quirk_system_pci_resources() include io resources

quirk_system_pci_resources() disables a PnP mem resource that overlaps a
PCI BAR so as to not keep the PCI driver from claiming the resource.  Have
it do the same for io resources.

Here, ACPI claims ports that overlap with my soundcard causing the
soundcard driver to fail to load.  It's unknown why my ACPI BIOS claims
those ports; it did not use to but this is not a (kernel) regression.
Some odd BIOS reconfig triggered by temporarily removing the card seems to
have brought this on.
Signed-off-by: default avatarRene Herman <rene.herman@gmail.com>
Acked-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 00412be1
...@@ -245,15 +245,17 @@ static void quirk_system_pci_resources(struct pnp_dev *dev) ...@@ -245,15 +245,17 @@ static void quirk_system_pci_resources(struct pnp_dev *dev)
*/ */
for_each_pci_dev(pdev) { for_each_pci_dev(pdev) {
for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
if (!(pci_resource_flags(pdev, i) & IORESOURCE_MEM) || unsigned int type;
pci_resource_len(pdev, i) == 0)
type = pci_resource_flags(pdev, i) &
(IORESOURCE_IO | IORESOURCE_MEM);
if (!type || pci_resource_len(pdev, i) == 0)
continue; continue;
pci_start = pci_resource_start(pdev, i); pci_start = pci_resource_start(pdev, i);
pci_end = pci_resource_end(pdev, i); pci_end = pci_resource_end(pdev, i);
for (j = 0; for (j = 0;
(res = pnp_get_resource(dev, IORESOURCE_MEM, j)); (res = pnp_get_resource(dev, type, j)); j++) {
j++) {
if (res->start == 0 && res->end == 0) if (res->start == 0 && res->end == 0)
continue; continue;
...@@ -283,9 +285,10 @@ static void quirk_system_pci_resources(struct pnp_dev *dev) ...@@ -283,9 +285,10 @@ static void quirk_system_pci_resources(struct pnp_dev *dev)
* the PCI region, and that might prevent a PCI * the PCI region, and that might prevent a PCI
* driver from requesting its resources. * driver from requesting its resources.
*/ */
dev_warn(&dev->dev, "mem resource " dev_warn(&dev->dev, "%s resource "
"(0x%llx-0x%llx) overlaps %s BAR %d " "(0x%llx-0x%llx) overlaps %s BAR %d "
"(0x%llx-0x%llx), disabling\n", "(0x%llx-0x%llx), disabling\n",
pnp_resource_type_name(res),
(unsigned long long) pnp_start, (unsigned long long) pnp_start,
(unsigned long long) pnp_end, (unsigned long long) pnp_end,
pci_name(pdev), i, pci_name(pdev), i,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment