RE: [PATCH v22 08/16] PCI: dwc: endpoint: Introduce .pre_init() and .deinit()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Serge,

> From: Serge Semin, Sent: Monday, September 25, 2023 7:08 PM
> 
> On Mon, Sep 25, 2023 at 04:21:22PM +0900, Yoshihiro Shimoda wrote:
> > Renesas R-Car Gen4 PCIe controllers require vendor-specific
> > initialization before .init().
> >
> > To use dw->dbi and dw->num-lanes in the initialization code,
> > introduce .pre_init() into struct dw_pcie_ep_ops. While at it,
> > also introduce .deinit() to disable the controller by using
> > vendor-specific de-initialization.
> >
> > Note that the ep_init in the struct dw_pcie_ep_ops should be
> > renamed to init later.
> >
> > [kwilczynski: commit log]
> > Link:
> > https://lore.kernel.org/linux-pci/20230825093219.2685912-13-yoshihiro.shimoda.uh@xxxxxxxxxxx/
> > 
> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>
> > Signed-off-by: Krzysztof Wilczyński <kwilczynski@xxxxxxxxxx>
> > Reviewed-by: Serge Semin <fancer.lancer@xxxxxxxxx>
> > ---
> >  drivers/pci/controller/dwc/pcie-designware-ep.c | 12 +++++++++++-
> >  drivers/pci/controller/dwc/pcie-designware.h    |  2 ++
> >  2 files changed, 13 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
> > index a8bcbc57ef86..d34a5e87ad18 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware-ep.c
> > +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
> > @@ -637,6 +637,9 @@ void dw_pcie_ep_exit(struct dw_pcie_ep *ep)
> >  			      epc->mem->window.page_size);
> >
> >  	pci_epc_mem_exit(epc);
> > +
> > +	if (ep->ops->deinit)
> > +		ep->ops->deinit(ep);
> >  }
> >  EXPORT_SYMBOL_GPL(dw_pcie_ep_exit);
> >
> > @@ -740,6 +743,9 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
> >  	ep->phys_base = res->start;
> >  	ep->addr_size = resource_size(res);
> >
> > +	if (ep->ops->pre_init)
> > +		ep->ops->pre_init(ep);
> > +
> >  	dw_pcie_version_detect(pci);
> >
> >  	dw_pcie_iatu_detect(pci);
> > @@ -794,7 +800,7 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
> >  			       ep->page_size);
> >  	if (ret < 0) {
> >  		dev_err(dev, "Failed to initialize address space\n");
> > -		return ret;
> > +		goto err_ep_deinit;
> >  	}
> >
> >  	ep->msi_mem = pci_epc_mem_alloc_addr(epc, &ep->msi_mem_phys,
> > @@ -831,6 +837,10 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
> >  err_exit_epc_mem:
> >  	pci_epc_mem_exit(epc);
> >
> > +err_ep_deinit:
> > +	if (ep->ops->deinit)
> > +		ep->ops->deinit(ep);
> > +
> >  	return ret;
> >  }
> >  EXPORT_SYMBOL_GPL(dw_pcie_ep_init);
> > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h
> > index e10f7e18b13a..8c637392ab08 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware.h
> > +++ b/drivers/pci/controller/dwc/pcie-designware.h
> > @@ -330,7 +330,9 @@ struct dw_pcie_rp {
> >  };
> >
> >  struct dw_pcie_ep_ops {
> 
> > +	void	(*pre_init)(struct dw_pcie_ep *ep);
> >  	void	(*ep_init)(struct dw_pcie_ep *ep);
> > +	void	(*deinit)(struct dw_pcie_ep *ep);
> 
> Please, note you promised to release sometime in future a cleanup
> patch which drops the "ep_" prefix from here and from the
> dw_pcie_host_ops structure.)
> 
> https://lore.kernel.org/linux-pci/20230802104049.GB57374@thinkpad/

Since this patch series is not merged into the pci.git / next branch yet,
I should not include any cleanup patches, I think. In other words, this patch
series still seems under review now.

Best regards,
Yoshihiro Shimoda

> 
> -Serge(y)
> 
> >  	int	(*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
> >  			     enum pci_epc_irq_type type, u16 interrupt_num);
> >  	const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
> > --
> > 2.25.1
> >





[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux