Move bridge enable from pcibios_enable_resources() to platform_pci_enable_device() so the former matches other architectures and can be shared. Signed-off-by: Bjorn Helgaas Index: work6/arch/arm/kernel/bios32.c =================================================================== --- work6.orig/arch/arm/kernel/bios32.c 2008-02-27 11:25:29.000000000 -0700 +++ work6/arch/arm/kernel/bios32.c 2008-02-27 11:55:59.000000000 -0700 @@ -683,15 +683,32 @@ 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); + } + return 0; +} + +static int platform_pci_enable_device(struct pci_dev *dev) +{ + u16 cmd, old_cmd; + + pci_read_config_word(dev, PCI_COMMAND, &cmd); + old_cmd = cmd; + /* - * Bridges (eg, cardbus bridges) need to be fully enabled + * Bridges (eg, cardbus bridges) need to be fully enabled. + * Most architectures do this in pci_enable_bridges(), not + * in the pci_enable_device() path. */ if ((dev->class >> 16) == PCI_BASE_CLASS_BRIDGE) cmd |= PCI_COMMAND_IO | PCI_COMMAND_MEMORY; if (cmd != old_cmd) { - printk("PCI: enabling device %s (%04x -> %04x)\n", - pci_name(dev), old_cmd, cmd); + dev_info(&dev->dev, "enabling bridge device (%04x -> %04x)\n", + old_cmd, cmd); pci_write_config_word(dev, PCI_COMMAND, cmd); } return 0; @@ -699,7 +716,12 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) { - return pcibios_enable_resources(dev, mask); + int err; + + if ((err = pcibios_enable_resources(dev, mask)) < 0) + return err; + + return platform_pci_enable_device(dev); } int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, --