From akpm@osdl.org Thu Apr 28 00:27:17 2005 Subject: [patch 03/20] acpi bridge hotadd: Fix pci_enable_device() for p2p bridges To: greg@kroah.com Cc: akpm@osdl.org, rajesh.shah@intel.com From: akpm@osdl.org Date: Thu, 28 Apr 2005 00:25:45 -0700 From: Rajesh Shah When checking if a PCI to PCI bridge should be enabled to decode memory and/or IO resources, we need to look at all device resources not just the first 6. This is needed to allow PCI bridges to pass down memory and IO accesses to child devices even when the bridge itself does not consume resources in its PCI BARs. Signed-off-by: Rajesh Shah Signed-off-by: Andrew Morton Signed-off-by: Greg Kroah-Hartman --- arch/ia64/pci/pci.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) --- gregkh-2.6.orig/arch/ia64/pci/pci.c 2005-05-03 22:28:11.000000000 -0700 +++ gregkh-2.6/arch/ia64/pci/pci.c 2005-05-03 22:28:18.000000000 -0700 @@ -436,18 +436,24 @@ u16 cmd, old_cmd; int idx; struct resource *r; + unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM; if (!dev) return -EINVAL; pci_read_config_word(dev, PCI_COMMAND, &cmd); old_cmd = cmd; - for (idx=0; idx<6; idx++) { + for (idx=0; idxresource[idx]; + if (!(r->flags & type_mask)) + continue; + if ((idx == PCI_ROM_RESOURCE) && + (!(r->flags & IORESOURCE_ROM_ENABLE))) + continue; if (!r->start && r->end) { printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", @@ -459,8 +465,6 @@ if (r->flags & IORESOURCE_MEM) cmd |= PCI_COMMAND_MEMORY; } - if (dev->resource[PCI_ROM_RESOURCE].start) - cmd |= PCI_COMMAND_MEMORY; if (cmd != old_cmd) { printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd); pci_write_config_word(dev, PCI_COMMAND, cmd);