RE: [PATCHv2 4/6] PCI: layerscape: refactor the host_init function

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

 



Hi Bjorn,

Thanks a lot for your comments!

> -----Original Message-----
> From: Bjorn Helgaas [mailto:helgaas@xxxxxxxxxx]
> Sent: 2017年8月15日 6:26
> To: Z.q. Hou <zhiqiang.hou@xxxxxxx>
> Cc: linux-pci@xxxxxxxxxxxxxxx; bhelgaas@xxxxxxxxxx;
> jingoohan1@xxxxxxxxx; Joao.Pinto@xxxxxxxxxxxx; M.h. Lian
> <minghuan.lian@xxxxxxx>; Mingkai Hu <mingkai.hu@xxxxxxx>; Roy Zang
> <roy.zang@xxxxxxx>; Stanimir Varbanov <svarbanov@xxxxxxxxxx>; Niklas
> Cassel <niklas.cassel@xxxxxxxx>; Jesper Nilsson <jesper.nilsson@xxxxxxxx>
> Subject: Re: [PATCHv2 4/6] PCI: layerscape: refactor the host_init function
> 
> [+cc Stanimir, Niklas, Jesper]
> 
> On Mon, Aug 14, 2017 at 04:38:24PM -0500, Bjorn Helgaas wrote:
> > On Thu, Aug 03, 2017 at 04:23:38PM +0800, Zhiqiang Hou wrote:
> > > From: Hou Zhiqiang <Zhiqiang.Hou@xxxxxxx>
> > >
> > > Make the ls1021a's host_init reuse layerscape platform's common
> > > host_init function.
> > >
> > > Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@xxxxxxx>
> > > ---
> > > V2:
> > >  - Removed the disable outbound windows code and the remove duplicate
> class code
> > >    fixup code from this patch.
> > >
> > >  drivers/pci/dwc/pci-layerscape.c | 54
> > > ++++++++++++++++++++--------------------
> > >  1 file changed, 27 insertions(+), 27 deletions(-)
> > >
> > > diff --git a/drivers/pci/dwc/pci-layerscape.c
> > > b/drivers/pci/dwc/pci-layerscape.c
> > > index 09056a6..3533a8c 100644
> > > --- a/drivers/pci/dwc/pci-layerscape.c
> > > +++ b/drivers/pci/dwc/pci-layerscape.c
> > > @@ -107,33 +107,6 @@ static int ls1021_pcie_link_up(struct dw_pcie
> *pci)
> > >  	return 1;
> > >  }
> > >
> > > -static void ls1021_pcie_host_init(struct pcie_port *pp) -{
> > > -	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
> > > -	struct ls_pcie *pcie = to_ls_pcie(pci);
> > > -	struct device *dev = pci->dev;
> > > -	u32 index[2];
> > > -
> > > -	pcie->scfg = syscon_regmap_lookup_by_phandle(dev->of_node,
> > > -						     "fsl,pcie-scfg");
> > > -	if (IS_ERR(pcie->scfg)) {
> > > -		dev_err(dev, "No syscfg phandle specified\n");
> > > -		pcie->scfg = NULL;
> > > -		return;
> > > -	}
> > > -
> > > -	if (of_property_read_u32_array(dev->of_node,
> > > -				       "fsl,pcie-scfg", index, 2)) {
> > > -		pcie->scfg = NULL;
> > > -		return;
> > > -	}
> > > -	pcie->index = index[1];
> > > -
> > > -	dw_pcie_setup_rc(pp);
> > > -
> > > -	ls_pcie_drop_msg_tlp(pcie);
> > > -}
> > > -
> > >  static int ls_pcie_link_up(struct dw_pcie *pci)  {
> > >  	struct ls_pcie *pcie = to_ls_pcie(pci); @@ -160,6 +133,33 @@
> > > static void ls_pcie_host_init(struct pcie_port *pp)
> > >  	dw_pcie_dbi_ro_wr_dis(pci);
> > >
> > >  	ls_pcie_drop_msg_tlp(pcie);
> > > +
> > > +	dw_pcie_setup_rc(pp);
> > > +}
> > > +
> > > +static void ls1021_pcie_host_init(struct pcie_port *pp) {
> > > +	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
> > > +	struct ls_pcie *pcie = to_ls_pcie(pci);
> > > +	struct device *dev = pci->dev;
> > > +	u32 index[2];
> > > +
> > > +	pcie->scfg = syscon_regmap_lookup_by_phandle(dev->of_node,
> > > +						     "fsl,pcie-scfg");
> > > +	if (IS_ERR(pcie->scfg)) {
> > > +		dev_err(dev, "No syscfg phandle specified\n");
> > > +		pcie->scfg = NULL;
> > > +		return;
> > > +	}
> > > +
> > > +	if (of_property_read_u32_array(dev->of_node,
> > > +				       "fsl,pcie-scfg", index, 2)) {
> > > +		pcie->scfg = NULL;
> > > +		return;
> > > +	}
> > > +	pcie->index = index[1];
> > > +
> > > +	ls_pcie_host_init(pp);
> >
> > The changelog suggests that this is a simple refactoring that doesn't
> > fix anything.
> >
> > But because ls1021_pcie_host_init() now calls ls_pcie_host_init(), it
> > now calls:
> >
> >   dw_pcie_dbi_ro_wr_en(pci);
> >   ls_pcie_fix_class(pcie);
> >   ls_pcie_clear_multifunction(pcie);
> >   dw_pcie_dbi_ro_wr_dis(pci);
> >
> > when it did not call them before.
> >
> > It's fine with me if you want to do that, but it should be mentioned
> > in the changelog.
> 
> The order of this series is screwed up, which makes it hard to follow.
> 
> 5192ec7b24dd ("PCI: layerscape: Add support for LS1043a and LS2080a")
> added ls_pcie_host_init(), which didn't call dw_pcie_setup_rc().  I think that
> was a bug, and you should fix that first.

Yes, it is a bug, the reason that the ls_pcie_host_init() doesn't call dw_pcie_setup_rc() is it uses the setups by u-boot, so I submitted these patches to resolve the dependency and make it robust.

> Then:
> 
>   - Rebase on pci/host-designware because it conflicts with patches
>     I've already applied
> 
> (https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git/log/?h=pci/ho
> st-designware)
> 
>   - Make ls_pcie_host_init() call dw_pcie_setup_rc() (fixes
>     5192ec7b24dd)
> 
>   - Refactor ls1021_pcie_host_init() to make it call
>     ls_pcie_host_init() (this will now be no functional change)
> 
>   - Disable outbound ATUs in ls_pcie_host_init() (bugfix for all
>     layerscape devices)
> 
>   - Add DBI write permission accessors and use them in layerscape.
>     This will make it obvious that PCIE_MISC_CONTROL_1_OFF is moving
>     from layerscape to designware and that we're actually using these
>     new interfaces (this will be no functional change).
> 
>   - Enable write permission in dw_pcie_setup_rc() and remove class
>     code update from ls_pcie_host_init()  This will make it obvious
>     that fixing dw_pcie_setup_rc() makes ls_pcie_fix_class() obsolete.
> 
> Does this dw_pcie_setup_rc() fix mean we can also get rid of the device class
> check in qcom_pcie_rd_own_conf()?

Yes, I think so.

> I suspect it also means we can drop the write enable in
> artpec6_pcie_establish_link().

Yes, you're right, thanks for your suggestion and I will reform these patches with this order.

> 
> > >  }
> > >
> > >  static int ls_pcie_msi_host_init(struct pcie_port *pp,
> > > --
> > > 2.1.0.27.g96db324
> > > 

Thanks,
Zhiqiang




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux