mirror of https://github.com/torvalds/linux.git
PCI: xgene: Defer probing if the MSI widget driver hasn't probed yet
As a preparatory work to make the XGene MSI driver probe less of a sorry hack, make the PCI driver check for the availability of the MSI parent domain, and defer the probing otherwise. Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://lore.kernel.org/r/20250708173404.1278635-3-maz@kernel.org
This commit is contained in:
parent
2c9e7f8574
commit
0d402bd41a
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/jiffies.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_pci.h>
|
||||
|
|
@ -594,6 +595,24 @@ static struct pci_ops xgene_pcie_ops = {
|
|||
.write = pci_generic_config_write32,
|
||||
};
|
||||
|
||||
static bool xgene_check_pcie_msi_ready(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
struct irq_domain *d;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_PCI_XGENE_MSI))
|
||||
return true;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "apm,xgene1-msi");
|
||||
if (!np)
|
||||
return true;
|
||||
|
||||
d = irq_find_matching_host(np, DOMAIN_BUS_PCI_MSI);
|
||||
of_node_put(np);
|
||||
|
||||
return d && irq_domain_is_msi_parent(d);
|
||||
}
|
||||
|
||||
static int xgene_pcie_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -602,6 +621,10 @@ static int xgene_pcie_probe(struct platform_device *pdev)
|
|||
struct pci_host_bridge *bridge;
|
||||
int ret;
|
||||
|
||||
if (!xgene_check_pcie_msi_ready())
|
||||
return dev_err_probe(&pdev->dev, -EPROBE_DEFER,
|
||||
"MSI driver not ready\n");
|
||||
|
||||
bridge = devm_pci_alloc_host_bridge(dev, sizeof(*port));
|
||||
if (!bridge)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
Loading…
Reference in New Issue