[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 2/4] xen/arm: make pci_host_common_probe return the bridge
On Wed, 9 Apr 2025, Mykyta Poturai wrote: > From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx> > > Some of the PCI host bridges require additional processing during the > probe phase. For that they need to access struct bridge of the probed > host, so return pointer to the new bridge from pci_host_common_probe. > > Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx> > Signed-off-by: Mykyta Poturai <mykyta_poturai@xxxxxxxx> > --- > v2->v3: > * no change > > v1->v2: > * no change > --- > xen/arch/arm/include/asm/pci.h | 5 +++-- > xen/arch/arm/pci/pci-host-common.c | 10 +++++----- > xen/arch/arm/pci/pci-host-generic.c | 2 +- > xen/arch/arm/pci/pci-host-zynqmp.c | 2 +- > 4 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/xen/arch/arm/include/asm/pci.h b/xen/arch/arm/include/asm/pci.h > index a87672d834..3d2ca9b5b0 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 <asm/p2m.h> > +#include <xen/err.h> > > #define pci_to_dev(pcidev) (&(pcidev)->arch.dev) > > @@ -95,8 +96,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..7ce9675551 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; > @@ -221,7 +221,7 @@ int pci_host_common_probe(struct dt_device_node *dev, > > bridge = pci_alloc_host_bridge(); > if ( !bridge ) > - return -ENOMEM; > + return ERR_PTR(-ENOMEM); There is a return 0 just above that needs to be changed to return NULL. > /* 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) > -- > 2.34.1 >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |