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