diff --git a/xen/arch/arm/include/asm/pci.h b/xen/arch/arm/include/asm/pci.h index dca9fa4e4c..9e8b17c827 100644 --- a/xen/arch/arm/include/asm/pci.h +++ b/xen/arch/arm/include/asm/pci.h @@ -18,6 +18,7 @@ #ifdef CONFIG_HAS_PCI #include +#include #define pci_to_dev(pcidev) (&(pcidev)->arch.dev) @@ -97,8 +98,8 @@ struct pci_ecam_ops { /* Default ECAM ops */ extern const struct pci_ecam_ops pci_generic_ecam_ops; -int pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops); +struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, + const struct pci_ecam_ops *ops); int pci_generic_config_read(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, uint32_t reg, uint32_t len, uint32_t *value); int pci_generic_config_write(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, diff --git a/xen/arch/arm/pci/pci-host-common.c b/xen/arch/arm/pci/pci-host-common.c index c0faf0f436..53953d4895 100644 --- a/xen/arch/arm/pci/pci-host-common.c +++ b/xen/arch/arm/pci/pci-host-common.c @@ -208,8 +208,8 @@ static int pci_bus_find_domain_nr(struct dt_device_node *dev) return domain; } -int pci_host_common_probe(struct dt_device_node *dev, - const struct pci_ecam_ops *ops) +struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev, + const struct pci_ecam_ops *ops) { struct pci_host_bridge *bridge; struct pci_config_window *cfg; @@ -217,11 +217,11 @@ int pci_host_common_probe(struct dt_device_node *dev, int domain; if ( dt_device_for_passthrough(dev) ) - return 0; + return NULL; bridge = pci_alloc_host_bridge(); if ( !bridge ) - return -ENOMEM; + return ERR_PTR(-ENOMEM); /* Parse and map our Configuration Space windows */ cfg = gen_pci_init(dev, ops); @@ -244,12 +244,12 @@ int pci_host_common_probe(struct dt_device_node *dev, bridge->segment = domain; pci_add_host_bridge(bridge); - return 0; + return bridge; err_exit: xfree(bridge); - return err; + return ERR_PTR(err); } /* diff --git a/xen/arch/arm/pci/pci-host-generic.c b/xen/arch/arm/pci/pci-host-generic.c index 46de6e43cc..a6ffbda174 100644 --- a/xen/arch/arm/pci/pci-host-generic.c +++ b/xen/arch/arm/pci/pci-host-generic.c @@ -29,7 +29,7 @@ static const struct dt_device_match __initconstrel gen_pci_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return pci_host_common_probe(dev, &pci_generic_ecam_ops); + return PTR_RET(pci_host_common_probe(dev, &pci_generic_ecam_ops)); } DT_DEVICE_START(pci_gen, "PCI HOST GENERIC", DEVICE_PCI_HOSTBRIDGE) diff --git a/xen/arch/arm/pci/pci-host-zynqmp.c b/xen/arch/arm/pci/pci-host-zynqmp.c index 101edb8593..a38f2e019e 100644 --- a/xen/arch/arm/pci/pci-host-zynqmp.c +++ b/xen/arch/arm/pci/pci-host-zynqmp.c @@ -47,7 +47,7 @@ static const struct dt_device_match __initconstrel nwl_pcie_dt_match[] = static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { - return pci_host_common_probe(dev, &nwl_pcie_ops); + return PTR_RET(pci_host_common_probe(dev, &nwl_pcie_ops)); } DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI_HOSTBRIDGE)