Re: [PATCH 2/2] PCI: dwc: Handle return value from endpoint .pre_init callback

Frank Li <[email protected]> Tue, 28 Jul 2026 15:12:36 -0400
Newsgroups org.kernel.vger.linux-omap,dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-rockchip,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci,org.kernel.vger.linux-renesas-soc
Message-ID <amj_JPfOU2sNINxA@lizhi-Precision-Tower-5810>
On Tue, Jul 28, 2026 at 03:24:25AM +0200, Marek Vasut wrote:
> Add return value handling for struct dw_pcie_ep_ops .pre_init callback.
>
> Signed-off-by: Marek Vasut <[email protected]>
> ---
> Cc: "Krzysztof WilczyƄski" <[email protected]>
> Cc: Anand Moon <[email protected]>
> Cc: Bjorn Helgaas <[email protected]>
> Cc: Frank Li <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Heiko Stuebner <[email protected]>
> Cc: Jesper Nilsson <[email protected]>
> Cc: Jingoo Han <[email protected]>
> Cc: Koichiro Den <[email protected]>
> Cc: Lorenzo Pieralisi <[email protected]>
> Cc: Magnus Damm <[email protected]>
> Cc: Manivannan Sadhasivam <[email protected]>
> Cc: Minghuan Lian <[email protected]>
> Cc: Mingkai Hu <[email protected]>
> Cc: Nicolas Frattaroli <[email protected]>
> Cc: Niklas Cassel <[email protected]>
> Cc: Qianfeng Rong <[email protected]>
> Cc: Qiang Yu <[email protected]>
> Cc: Rob Herring <[email protected]>
> Cc: Roy Zang <[email protected]>
> Cc: Shawn Lin <[email protected]>
> Cc: Siddharth Vadapalli <[email protected]>
> Cc: Srikanth Thokala <[email protected]>
> Cc: Vignesh Raghavendra <[email protected]>
> Cc: Yoshihiro Shimoda <[email protected]>
> Cc: Yuho Choi <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> ---

Reviewed-by: Frank Li <[email protected]>

>  drivers/pci/controller/dwc/pcie-designware-ep.c | 7 +++++--
>  drivers/pci/controller/dwc/pcie-designware.h    | 2 +-
>  drivers/pci/controller/dwc/pcie-rcar-gen4.c     | 6 ++++--
>  3 files changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
> index d78fb845582b2..b00239097d893 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-ep.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
> @@ -1524,8 +1524,11 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
>  	if (ret)
>  		return ret;
>
> -	if (ep->ops->pre_init)
> -		ep->ops->pre_init(ep);
> +	if (ep->ops->pre_init) {
> +		ret = ep->ops->pre_init(ep);
> +		if (ret)
> +			return ret;
> +	}
>
>  	ret = pci_epc_mem_init(epc, ep->phys_base, ep->addr_size,
>  			       ep->page_size);
> diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h
> index 004b433f17135..6546dc3aa2075 100644
> --- a/drivers/pci/controller/dwc/pcie-designware.h
> +++ b/drivers/pci/controller/dwc/pcie-designware.h
> @@ -474,7 +474,7 @@ struct dw_pcie_rp {
>  };
>
>  struct dw_pcie_ep_ops {
> -	void	(*pre_init)(struct dw_pcie_ep *ep);
> +	int	(*pre_init)(struct dw_pcie_ep *ep);
>  	int	(*init)(struct dw_pcie_ep *ep);
>  	int	(*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
>  			     unsigned int type, u16 interrupt_num);
> diff --git a/drivers/pci/controller/dwc/pcie-rcar-gen4.c b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> index 5f7211b91ee5b..fbe465a29068f 100644
> --- a/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> +++ b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> @@ -481,7 +481,7 @@ static void rcar_gen4_remove_dw_pcie_rp(struct rcar_gen4_pcie *rcar)
>  }
>
>  /* Endpoint mode */
> -static void rcar_gen4_pcie_ep_pre_init(struct dw_pcie_ep *ep)
> +static int rcar_gen4_pcie_ep_pre_init(struct dw_pcie_ep *ep)
>  {
>  	struct dw_pcie *dw = to_dw_pcie_from_ep(ep);
>  	struct rcar_gen4_pcie *rcar = to_rcar_gen4_pcie(dw);
> @@ -489,9 +489,11 @@ static void rcar_gen4_pcie_ep_pre_init(struct dw_pcie_ep *ep)
>
>  	ret = rcar_gen4_pcie_common_init(rcar);
>  	if (ret)
> -		return;
> +		return ret;
>
>  	writel(PCIEDMAINTSTSEN_INIT, rcar->base + PCIEDMAINTSTSEN);
> +
> +	return 0;
>  }
>
>  static void rcar_gen4_pcie_ep_deinit(struct rcar_gen4_pcie *rcar)
> --
> 2.53.0
>