Re: [PATCH 1/2] PCI: dwc: Handle return value from endpoint .init callback
Frank Li <[email protected]> Tue, 28 Jul 2026 15:11:46 -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-8tqEToQF6_gY@lizhi-Precision-Tower-5810> |
On Tue, Jul 28, 2026 at 03:24:24AM +0200, Marek Vasut wrote: > Add return value handling for struct dw_pcie_ep_ops .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] > --- > drivers/pci/controller/dwc/pci-dra7xx.c | 4 +++- > drivers/pci/controller/dwc/pci-keystone.c | 4 +++- > drivers/pci/controller/dwc/pci-layerscape-ep.c | 6 ++++-- > drivers/pci/controller/dwc/pcie-artpec6.c | 4 +++- > drivers/pci/controller/dwc/pcie-designware-ep.c | 7 +++++-- > drivers/pci/controller/dwc/pcie-designware.h | 2 +- > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 4 +++- > drivers/pci/controller/dwc/pcie-keembay.c | 4 +++- > 8 files changed, 25 insertions(+), 10 deletions(-) Reviewed-by: Frank Li <[email protected]> > > diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c > index 3fc889944f021..6ae5b27e27b32 100644 > --- a/drivers/pci/controller/dwc/pci-dra7xx.c > +++ b/drivers/pci/controller/dwc/pci-dra7xx.c > @@ -373,12 +373,14 @@ static const struct dw_pcie_host_ops dra7xx_pcie_host_ops = { > .init = dra7xx_pcie_host_init, > }; > > -static void dra7xx_pcie_ep_init(struct dw_pcie_ep *ep) > +static int dra7xx_pcie_ep_init(struct dw_pcie_ep *ep) > { > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci); > > dra7xx_pcie_enable_wrapper_interrupts(dra7xx); > + > + return 0; > } > > static void dra7xx_pcie_raise_intx_irq(struct dra7xx_pcie *dra7xx) > diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c > index f1b27aed488de..602516239a573 100644 > --- a/drivers/pci/controller/dwc/pci-keystone.c > +++ b/drivers/pci/controller/dwc/pci-keystone.c > @@ -876,7 +876,7 @@ static const struct dw_pcie_ops ks_pcie_dw_pcie_ops = { > .write_dbi2 = ks_pcie_am654_write_dbi2, > }; > > -static void ks_pcie_am654_ep_init(struct dw_pcie_ep *ep) > +static int ks_pcie_am654_ep_init(struct dw_pcie_ep *ep) > { > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > int flags; > @@ -885,6 +885,8 @@ static void ks_pcie_am654_ep_init(struct dw_pcie_ep *ep) > flags = PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_32; > dw_pcie_writel_dbi2(pci, PCI_BASE_ADDRESS_0, APP_ADDR_SPACE_0 - 1); > dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, flags); > + > + return 0; > } > > static void ks_pcie_am654_raise_intx_irq(struct keystone_pcie *ks_pcie) > diff --git a/drivers/pci/controller/dwc/pci-layerscape-ep.c b/drivers/pci/controller/dwc/pci-layerscape-ep.c > index 8936975ff104e..527c57114dcfe 100644 > --- a/drivers/pci/controller/dwc/pci-layerscape-ep.c > +++ b/drivers/pci/controller/dwc/pci-layerscape-ep.c > @@ -147,7 +147,7 @@ ls_pcie_ep_get_features(struct dw_pcie_ep *ep) > return pcie->ls_epc; > } > > -static void ls_pcie_ep_init(struct dw_pcie_ep *ep) > +static int ls_pcie_ep_init(struct dw_pcie_ep *ep) > { > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > struct ls_pcie_ep *pcie = to_ls_pcie_ep(pci); > @@ -155,10 +155,12 @@ static void ls_pcie_ep_init(struct dw_pcie_ep *ep) > > ep_func = dw_pcie_ep_get_func_from_ep(ep, 0); > if (!ep_func) > - return; > + return -ENODEV; > > pcie->ls_epc->msi_capable = ep_func->msi_cap ? true : false; > pcie->ls_epc->msix_capable = ep_func->msix_cap ? true : false; > + > + return 0; > } > > static int ls_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no, > diff --git a/drivers/pci/controller/dwc/pcie-artpec6.c b/drivers/pci/controller/dwc/pcie-artpec6.c > index 5cd227dda9a10..7f0ba506dd1cf 100644 > --- a/drivers/pci/controller/dwc/pcie-artpec6.c > +++ b/drivers/pci/controller/dwc/pcie-artpec6.c > @@ -335,7 +335,7 @@ static const struct dw_pcie_host_ops artpec6_pcie_host_ops = { > .init = artpec6_pcie_host_init, > }; > > -static void artpec6_pcie_ep_init(struct dw_pcie_ep *ep) > +static int artpec6_pcie_ep_init(struct dw_pcie_ep *ep) > { > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > struct artpec6_pcie *artpec6_pcie = to_artpec6_pcie(pci); > @@ -344,6 +344,8 @@ static void artpec6_pcie_ep_init(struct dw_pcie_ep *ep) > artpec6_pcie_init_phy(artpec6_pcie); > artpec6_pcie_deassert_core_reset(artpec6_pcie); > artpec6_pcie_wait_for_phy(artpec6_pcie); > + > + return 0; > } > > static int artpec6_pcie_raise_irq(struct dw_pcie_ep *ep, u8 func_no, > diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c > index 7d2794945704e..d78fb845582b2 100644 > --- a/drivers/pci/controller/dwc/pcie-designware-ep.c > +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c > @@ -1367,8 +1367,11 @@ int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) > list_add_tail(&ep_func->list, &ep->func_list); > } > > - if (ep->ops->init) > - ep->ops->init(ep); > + if (ep->ops->init) { > + ret = ep->ops->init(ep); > + if (ret) > + goto err_remove_edma; > + } > > dw_pcie_ep_disable_bars(ep); > > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h > index de4b245b1758c..004b433f17135 100644 > --- a/drivers/pci/controller/dwc/pcie-designware.h > +++ b/drivers/pci/controller/dwc/pcie-designware.h > @@ -475,7 +475,7 @@ struct dw_pcie_rp { > > struct dw_pcie_ep_ops { > void (*pre_init)(struct dw_pcie_ep *ep); > - void (*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); > const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep); > diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > index 731d93663ccae..bd5d1a2472a40 100644 > --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > @@ -469,12 +469,14 @@ static void rockchip_pcie_ep_hide_broken_ats_cap_rk3588(struct dw_pcie_ep *ep) > dw_pcie_remove_ext_capability(pci, PCI_EXT_CAP_ID_ATS); > } > > -static void rockchip_pcie_ep_init(struct dw_pcie_ep *ep) > +static int rockchip_pcie_ep_init(struct dw_pcie_ep *ep) > { > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > > rockchip_pcie_enable_l0s(pci); > rockchip_pcie_ep_hide_broken_ats_cap_rk3588(ep); > + > + return 0; > }; > > static int rockchip_pcie_raise_irq(struct dw_pcie_ep *ep, u8 func_no, > diff --git a/drivers/pci/controller/dwc/pcie-keembay.c b/drivers/pci/controller/dwc/pcie-keembay.c > index 42fb5f24a2230..b11e66c10fffa 100644 > --- a/drivers/pci/controller/dwc/pcie-keembay.c > +++ b/drivers/pci/controller/dwc/pcie-keembay.c > @@ -278,12 +278,14 @@ static int keembay_pcie_setup_msi_irq(struct keembay_pcie *pcie) > return 0; > } > > -static void keembay_pcie_ep_init(struct dw_pcie_ep *ep) > +static int keembay_pcie_ep_init(struct dw_pcie_ep *ep) > { > struct dw_pcie *pci = to_dw_pcie_from_ep(ep); > struct keembay_pcie *pcie = dev_get_drvdata(pci->dev); > > writel(EDMA_INT_EN, pcie->apb_base + PCIE_REGS_INTERRUPT_ENABLE); > + > + return 0; > } > > static int keembay_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no, > -- > 2.53.0 >