Skip to content

Commit

Permalink
PCI: Add support for PCIe-to-PCI bridge DMA alias quirks
Browse files Browse the repository at this point in the history
Several PCIe-to-PCI bridges fail to provide a PCIe capability, causing us
to handle them as conventional PCI devices when they really use the
requester ID of the secondary bus.  We need to differentiate these from
PCIe-to-PCI bridges that actually use the conventional PCI ID when a PCIe
capability is not present, such as those found on the root complex of may
Intel chipsets.  Add a dev_flag bit to identify devices to be handled as
standard PCIe-to-PCI bridges.

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
  • Loading branch information
Alex Williamson authored and Bjorn Helgaas committed May 28, 2014
1 parent cc346a4 commit c8fe16e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
10 changes: 8 additions & 2 deletions drivers/pci/search.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,14 @@ int pci_for_each_dma_alias(struct pci_dev *pdev,
continue;
}
} else {
ret = fn(tmp, PCI_DEVID(tmp->bus->number, tmp->devfn),
data);
if (tmp->dev_flags & PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS)
ret = fn(tmp,
PCI_DEVID(tmp->subordinate->number,
PCI_DEVFN(0, 0)), data);
else
ret = fn(tmp,
PCI_DEVID(tmp->bus->number,
tmp->devfn), data);
if (ret)
return ret;
}
Expand Down
2 changes: 2 additions & 0 deletions include/linux/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,8 @@ enum pci_dev_flags {
PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = (__force pci_dev_flags_t) (1 << 3),
/* Flag to indicate the device uses dma_alias_devfn */
PCI_DEV_FLAGS_DMA_ALIAS_DEVFN = (__force pci_dev_flags_t) (1 << 4),
/* Use a PCIe-to-PCI bridge alias even if !pci_is_pcie */
PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = (__force pci_dev_flags_t) (1 << 5),
};

enum pci_irq_reroute_variant {
Expand Down

0 comments on commit c8fe16e

Please sign in to comment.