@@ -17,6 +17,8 @@
#ifdef CONFIG_HAS_PCI
+#include <xen/err.h>
+
#include <asm/p2m.h>
#define pci_to_dev(pcidev) (&(pcidev)->arch.dev)
@@ -95,9 +97,9 @@ 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,
- size_t priv_sz);
+struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev,
+ const struct pci_ecam_ops *ops,
+ size_t priv_sz);
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,
@@ -208,9 +208,9 @@ 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,
- size_t priv_sz)
+struct pci_host_bridge *pci_host_common_probe(struct dt_device_node *dev,
+ const struct pci_ecam_ops *ops,
+ size_t priv_sz)
{
struct pci_host_bridge *bridge;
struct pci_config_window *cfg;
@@ -222,7 +222,7 @@ int pci_host_common_probe(struct dt_device_node *dev,
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);
@@ -257,7 +257,7 @@ int pci_host_common_probe(struct dt_device_node *dev,
pci_add_host_bridge(bridge);
- return 0;
+ return bridge;
err_priv:
xfree(bridge->priv);
@@ -265,7 +265,7 @@ err_priv:
err_exit:
xfree(bridge);
- return err;
+ return ERR_PTR(err);
}
/*
@@ -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, 0);
+ return PTR_RET(pci_host_common_probe(dev, &pci_generic_ecam_ops, 0));
}
DT_DEVICE_START(pci_gen, "PCI HOST GENERIC", DEVICE_PCI_HOSTBRIDGE)
@@ -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, 0);
+ return PTR_RET(pci_host_common_probe(dev, &nwl_pcie_ops, 0));
}
DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI_HOSTBRIDGE)