Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e15e6119 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents a637b0d4 e253aaf0
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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 */
}

+1 −0
Original line number Diff line number Diff line
@@ -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;
+4 −2
Original line number Diff line number Diff line
@@ -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);
+0 −1
Original line number Diff line number Diff line
@@ -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);