Skip to content

Commit 94e89b1

Browse files
Marc ZyngierLorenzo Pieralisi
authored andcommitted
PCI/MSI: Let PCI host bridges declare their reliance on MSI domains
There is a whole class of host bridges that cannot know whether MSIs will be provided or not, as they rely on other blocks to provide the MSI functionnality, using MSI domains. This is the case for example on systems that use the ARM GIC architecture. Introduce a new attribute ('msi_domain') indicating that implicit dependency, and use this property to set the NO_MSI flag when no MSI domain is found at probe time. Link: https://lore.kernel.org/r/20210330151145.997953-11-maz@kernel.org Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
1 parent f8bcf24 commit 94e89b1

2 files changed

Lines changed: 3 additions & 0 deletions

File tree

drivers/pci/probe.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,8 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
925925
device_enable_async_suspend(bus->bridge);
926926
pci_set_bus_of_node(bus);
927927
pci_set_bus_msi_domain(bus);
928+
if (bridge->msi_domain && !dev_get_msi_domain(&bus->dev))
929+
bus->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
928930

929931
if (!parent)
930932
set_dev_node(bus->bridge, pcibus_to_node(bus));

include/linux/pci.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,7 @@ struct pci_host_bridge {
550550
unsigned int native_dpc:1; /* OS may use PCIe DPC */
551551
unsigned int preserve_config:1; /* Preserve FW resource setup */
552552
unsigned int size_windows:1; /* Enable root bus sizing */
553+
unsigned int msi_domain:1; /* Bridge wants MSI domain */
553554

554555
/* Resource alignment requirements */
555556
resource_size_t (*align_resource)(struct pci_dev *dev,

0 commit comments

Comments
 (0)