[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
> 



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.