Message ID | 20170209233346.GB29169@bhelgaas-glaptop.roam.corp.google.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On 2/9/2017 6:33 PM, Bjorn Helgaas wrote: > Applied to pci/enumeration for v4.11 as follows, thanks! > > I added a check for PCIe, so we don't have to rely on > pcie_capability_read_dword() doing the right thing for PCI and PCI-X > devices. I think pcie_capability_read_dword() would set dev_cap to zero > and return zero, which would be safe, but I don't the reader should have to > do that much analysis to figure it out. Thanks for cleaning up the commit message and adding the pci_is_pcie check.
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index aca5b2466adb..3abc94212197 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1661,12 +1661,30 @@ static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp) */ } +static void pci_configure_extended_tags(struct pci_dev *dev) +{ + u32 dev_cap; + int ret; + + if (!pci_is_pcie(dev)) + return; + + ret = pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, &dev_cap); + if (ret) + return; + + if (dev_cap & PCI_EXP_DEVCAP_EXT_TAG) + pcie_capability_set_word(dev, PCI_EXP_DEVCTL, + PCI_EXP_DEVCTL_EXT_TAG); +} + static void pci_configure_device(struct pci_dev *dev) { struct hotplug_params hpp; int ret; pci_configure_mps(dev); + pci_configure_extended_tags(dev); memset(&hpp, 0, sizeof(hpp)); ret = pci_get_hp_params(dev, &hpp);