diff options
| author | Frank Li <Frank.Li@nxp.com> | 2025-07-10 15:13:50 -0400 |
|---|---|---|
| committer | Bjorn Helgaas <bhelgaas@google.com> | 2025-07-24 16:51:37 -0500 |
| commit | c822392280aa9bc57ad3b5079020388950cce9c8 (patch) | |
| tree | 2e79f1a90699430aec85de8d0b2bd07192896493 | |
| parent | 1c3b002c6bf684b445a7107609979bca5f21bc03 (diff) | |
PCI: endpoint: pci-ep-msi: Add checks for MSI parent and mutability
Some MSI controllers can change address/data pair during the execution of
irq_chip::irq_set_affinity() callback. Since the current PCI Endpoint
framework cannot support mutable MSI controllers, call
irq_domain_is_msi_immutable() API to check if the controller is immutable
or not.
Also ensure that the MSI domain is a parent MSI domain so that it can
allocate address/data pairs.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
[mani: reworded error message and commit message]
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Niklas Cassel <cassel@kernel.org>
Link: https://patch.msgid.link/20250710-ep-msi-v21-4-57683fc7fb25@nxp.com
| -rw-r--r-- | drivers/pci/endpoint/pci-ep-msi.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-ep-msi.c index 95a47ce155ac..9ca89cbfec15 100644 --- a/drivers/pci/endpoint/pci-ep-msi.c +++ b/drivers/pci/endpoint/pci-ep-msi.c @@ -57,6 +57,14 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db) return -ENODEV; } + if (!irq_domain_is_msi_parent(domain)) + return -ENODEV; + + if (!irq_domain_is_msi_immutable(domain)) { + dev_err(dev, "Mutable MSI controller not supported\n"); + return -ENODEV; + } + dev_set_msi_domain(epc->dev.parent, domain); msg = kcalloc(num_db, sizeof(struct pci_epf_doorbell_msg), GFP_KERNEL); |
