Merge tag 'pci-v3.10-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI updates from Bjorn Helgaas: "MSI: PCI: Set ->mask_pos correctly Hotplug: PCI: Delay final fixups until resources are assigned Moorestown: x86/pci/mrst: Use configuration mechanism 1 for 00:00.0, 00:02.0, 00:03.0" * tag 'pci-v3.10-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: PCI: Delay final fixups until resources are assigned x86/pci/mrst: Use configuration mechanism 1 for 00:00.0, 00:02.0, 00:03.0 PCI: Set ->mask_pos correctly
This commit is contained in:
@@ -141,6 +141,11 @@ static int pci_device_update_fixed(struct pci_bus *bus, unsigned int devfn,
|
||||
*/
|
||||
static bool type1_access_ok(unsigned int bus, unsigned int devfn, int reg)
|
||||
{
|
||||
if (bus == 0 && (devfn == PCI_DEVFN(2, 0)
|
||||
|| devfn == PCI_DEVFN(0, 0)
|
||||
|| devfn == PCI_DEVFN(3, 0)))
|
||||
return 1;
|
||||
|
||||
/* This is a workaround for A0 LNC bug where PCI status register does
|
||||
* not have new CAP bit set. can not be written by SW either.
|
||||
*
|
||||
@@ -150,10 +155,7 @@ static bool type1_access_ok(unsigned int bus, unsigned int devfn, int reg)
|
||||
*/
|
||||
if (reg >= 0x100 || reg == PCI_STATUS || reg == PCI_HEADER_TYPE)
|
||||
return 0;
|
||||
if (bus == 0 && (devfn == PCI_DEVFN(2, 0)
|
||||
|| devfn == PCI_DEVFN(0, 0)
|
||||
|| devfn == PCI_DEVFN(3, 0)))
|
||||
return 1;
|
||||
|
||||
return 0; /* langwell on others */
|
||||
}
|
||||
|
||||
|
@@ -174,6 +174,7 @@ int pci_bus_add_device(struct pci_dev *dev)
|
||||
* Can not put in pci_device_add yet because resources
|
||||
* are not assigned yet for some devices.
|
||||
*/
|
||||
pci_fixup_device(pci_fixup_final, dev);
|
||||
pci_create_sysfs_dev_files(dev);
|
||||
|
||||
dev->match_driver = true;
|
||||
|
@@ -563,8 +563,10 @@ static int msi_capability_init(struct pci_dev *dev, int nvec)
|
||||
entry->msi_attrib.default_irq = dev->irq; /* Save IOAPIC IRQ */
|
||||
entry->msi_attrib.pos = dev->msi_cap;
|
||||
|
||||
entry->mask_pos = dev->msi_cap + (control & PCI_MSI_FLAGS_64BIT) ?
|
||||
PCI_MSI_MASK_64 : PCI_MSI_MASK_32;
|
||||
if (control & PCI_MSI_FLAGS_64BIT)
|
||||
entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
|
||||
else
|
||||
entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
|
||||
/* All MSIs are unmasked by default, Mask them all */
|
||||
if (entry->msi_attrib.maskbit)
|
||||
pci_read_config_dword(dev, entry->mask_pos, &entry->masked);
|
||||
|
@@ -1341,7 +1341,6 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
|
||||
list_add_tail(&dev->bus_list, &bus->devices);
|
||||
up_write(&pci_bus_sem);
|
||||
|
||||
pci_fixup_device(pci_fixup_final, dev);
|
||||
ret = pcibios_add_device(dev);
|
||||
WARN_ON(ret < 0);
|
||||
|
||||
|
Reference in New Issue
Block a user