Message ID | 1656645935-1370-1-git-send-email-hongxing.zhu@nxp.com (mailing list archive) |
---|---|
Headers | show |
Series | PCI: imx6: refine codes and add the error propagation | expand |
On Fri, Jul 01, 2022 at 11:25:18AM +0800, Richard Zhu wrote: > This series patches refine pci-imx6 driver and do the following main changes. > - Encapsulate the clock enable into one standalone function > - Add the error propagation from host_init and resume > - Turn off regulator when the system is in suspend mode > - Let the probe successfully when link never comes up > - Do not hide the phy driver callbacks in core reset and clk_enable. > - Keep symmetric as much as possible between suspend and resume callbacks. > BTW, this series are verified on i.MX8MM EVK board when one NVME is used. > > Main changes from v13 to v14 refer to Bjorn's comments: > - To keep suspend/resume symmetric as much as possible. Create > imx6_pcie_stop_link() and imx6_pcie_host_exit() functions, and invoke > them in suspend callback. > - Since the imx6_pcie_clk_disable() is invoked by imx6_pcie_host_exit(), > to be symmetric with imx6_pcie_host_exit(), move imx6_pcie_clk_enable() > to imx6_pcie_host_init() from imx6_pcie_deassert_core_reset(). > > Main changes from v12 to v13: > - Call imx6_pcie_host_init() instead of duplicating codes in resume. > - Move the regulator enable out of imx6_pcie_deassert_core_reset(). > Re-format the error handling in imx6_pcie_deassert_core_reset() > and imx6_pcie_host_init() accordingly. > > Main changes from v11 to v12 issued by Bjorn: > - Add four intro patches to move code around to collect similar things > (PHY management, reset management) together. This makes the first > diff to collect clock enables simpler because it's not cluttered with > unrelated things that didn't actually change. > - Factor out ref clock disables so the disable function structure matches > the enable structure. > - Drop unused "ret" from "Reduce resume time ..." to avoid bisection > hole, then add it back in "Do not hide phy driver ..." where we start > using it again. > - Add patch to make imx6_pcie_clk_disable() symmetric with > imx6_pcie_clk_enable() in terms of enable/disable ordering. > > Main changes from v10 to v11: > No code changes, just do the following operations refer to Bjorn's comments. > - Split #6 patch into two patches. > - Rebase to v5.19-rc1 based on for-next branch of Shawn's git. > > Main changes from v9 to v10: > - Add the "Reviewed-by: Lucas Stach <l.stach@pengutronix.de>" tag into #3 > and #4 patches. > - Refer to Bjorn's comments: > - refine the commit of the first patch > - keep alignment of the message format in the second patch > - More specific commit and subject of the #5 and #7 patches. > - Move the regualtor_disable into suspend, turn off the regulator when bus > is powered off and system in suspend mode. > - Let the driver probe successfully, return zero in imx6_pcie_start_link() > when PCIe link is down. > In this link down scenario, only start the PCIe link training in resume > when the link is up before system suspend to avoid the long latency in > the link training period. > - Don't hide phy driver callbacks in core reset and clk_enable, and refine > the error handling accordingly. > - Drop the #8 patch of v9 series, since the clocks and powers are not gated > off anymore when link is down. > > Main changes from v8 to v9: > - Don't change pcie-designware codes, and do the error exit process only in > pci-imx6 driver internally. > - Move the phy driver callbacks to the proper places > > Main changes from v7 to v8: > Regarding Bjorn's review comments. > - Align the format of the dev_info message and refine commit log of > #6/7/8 patches. > - Rename the err_reset_phy label, since there is no PHY reset in the out > > Main changes from v6 to v7: > - Keep the regulator usage counter balance in the #5 patch of v6 series. > > Main changes from v5 to v6: > - Refer to the following discussion with Fabio, fix the dump by his patch. > https://patchwork.kernel.org/project/linux-pci/patch/1641368602-20401-6-git-send-email-hongxing.zhu@nxp.com/ > Refine and rebase this patch-set after Fabio' dump fix patch is merged. > - Add one new #4 patch to disable i.MX6QDL REF clock too when disable clocks > - Split the regulator refine codes into one standalone patch #5 in this version. > > Main changes from v4 to v5: > - Since i.MX8MM PCIe support had been merged. Based on Lorenzo's git repos, > resend the patch-set after rebase. > > Main changes from v3 to v4: > - Regarding Mark's comments, delete the regulator_is_enabled() check. > - Squash #3 and #6 of v3 patch into #5 patch of v4 set. > > Main changes from v2 to v3: > - Add "Reviewed-by: Lucas Stach <l.stach@pengutronix.de>" tag into > first two patches. > - Add a Fixes tag into #3 patch. > - Split the #4 of v2 to two patches, one is clock disable codes move, > the other one is the acutal clock unbalance fix. > - Add a new host_exit() callback into dw_pcie_host_ops, then it could be > invoked to handle the unbalance issue in the error handling after > host_init() function when link is down. > - Add a new host_exit() callback for i.MX PCIe driver to handle this case > in the error handling after host_init. > > Main changes from v1 to v2: > Regarding Lucas' comments. > - Move the placement of the new imx6_pcie_clk_enable() to avoid the > forward declarition. > - Seperate the second patch of v1 patch-set to three patches. > - Use the module_param to replace the kernel command line. > Regarding Bjorn's comments: > - Use the cover-letter for a multi-patch series. > - Correct the subject line, and refine the commit logs. For example, > remove the timestamp of the logs. > > Bjorn Helgaas (5): > PCI: imx6: Move imx6_pcie_grp_offset(), imx6_pcie_configure_type() > earlier > PCI: imx6: Move PHY management functions together > PCI: imx6: Move imx6_pcie_enable_ref_clk() earlier > PCI: imx6: Factor out ref clock disable to match enable > PCI: imx6: Disable clocks in reverse order of enable > > Richard Zhu (12): > PCI: imx6: Move imx6_pcie_clk_disable() earlier > PCI: imx6: Collect clock enables in imx6_pcie_clk_enable() > PCI: imx6: Propagate .host_init() errors to caller > PCI: imx6: Disable i.MX6QDL clock when disabling ref clocks > PCI: imx6: Call host init function directly in resume > PCI: imx6: Turn off regulator when system is in suspend mode > PCI: imx6: Move regulator enable out of > imx6_pcie_deassert_core_reset() > PCI: imx6: Mark the link down as non-fatal error > PCI: imx6: Reduce resume time by only starting link if it was up > before suspend > PCI: imx6: Do not hide phy driver callbacks and refine the error > handling > PCI: imx6: Reformat suspend callback to keep symmetric with resume > PCI: imx6: Move the imx6_pcie_ltssm_disable() earlier > > drivers/pci/controller/dwc/pci-imx6.c | 661 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------- > 1 file changed, 358 insertions(+), 303 deletions(-) Applied to pci/ctrl/imx6 for v5.20, thanks a lot for all your work here!
On Mon, Jul 11, 2022 at 05:29:59PM -0500, Bjorn Helgaas wrote: > On Fri, Jul 01, 2022 at 11:25:18AM +0800, Richard Zhu wrote: > > ... > > Bjorn Helgaas (5): > > PCI: imx6: Move imx6_pcie_grp_offset(), imx6_pcie_configure_type() > > earlier > > PCI: imx6: Move PHY management functions together > > PCI: imx6: Move imx6_pcie_enable_ref_clk() earlier > > PCI: imx6: Factor out ref clock disable to match enable > > PCI: imx6: Disable clocks in reverse order of enable > > > > Richard Zhu (12): > > PCI: imx6: Move imx6_pcie_clk_disable() earlier > > PCI: imx6: Collect clock enables in imx6_pcie_clk_enable() > > PCI: imx6: Propagate .host_init() errors to caller > > PCI: imx6: Disable i.MX6QDL clock when disabling ref clocks > > PCI: imx6: Call host init function directly in resume > > PCI: imx6: Turn off regulator when system is in suspend mode > > PCI: imx6: Move regulator enable out of > > imx6_pcie_deassert_core_reset() > > PCI: imx6: Mark the link down as non-fatal error > > PCI: imx6: Reduce resume time by only starting link if it was up > > before suspend > > PCI: imx6: Do not hide phy driver callbacks and refine the error > > handling > > PCI: imx6: Reformat suspend callback to keep symmetric with resume > > PCI: imx6: Move the imx6_pcie_ltssm_disable() earlier > > > > drivers/pci/controller/dwc/pci-imx6.c | 661 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------- > > 1 file changed, 358 insertions(+), 303 deletions(-) > > Applied to pci/ctrl/imx6 for v5.20, thanks a lot for all your work > here! I updated the branch with Lucas' acks and with the minor imx6_pcie_start_link() return value check he suggested. I did not do anything about the missing IMX8MQ case in imx6_pcie_ltssm_disable() or the PHY init or regulator or shutdown issues. If you want changes there, please make them starting with the pci/ctrl/imx6 branch and I can just replace it: https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git/commit/?h=pci/ctrl/imx6&id=7d652ce95e70 Bjorn
> -----Original Message----- > From: Bjorn Helgaas <helgaas@kernel.org> > Sent: 2022年7月14日 0:46 > To: Hongxing Zhu <hongxing.zhu@nxp.com> > Cc: l.stach@pengutronix.de; bhelgaas@google.com; robh+dt@kernel.org; > broonie@kernel.org; lorenzo.pieralisi@arm.com; festevam@gmail.com; > francesco.dolcini@toradex.com; linux-pci@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > kernel@pengutronix.de; dl-linux-imx <linux-imx@nxp.com> > Subject: Re: [PATCH v14 0/17] PCI: imx6: refine codes and add the error > propagation > > On Mon, Jul 11, 2022 at 05:29:59PM -0500, Bjorn Helgaas wrote: > > On Fri, Jul 01, 2022 at 11:25:18AM +0800, Richard Zhu wrote: > > > ... > > > > Bjorn Helgaas (5): > > > PCI: imx6: Move imx6_pcie_grp_offset(), imx6_pcie_configure_type() > > > earlier > > > PCI: imx6: Move PHY management functions together > > > PCI: imx6: Move imx6_pcie_enable_ref_clk() earlier > > > PCI: imx6: Factor out ref clock disable to match enable > > > PCI: imx6: Disable clocks in reverse order of enable > > > > > > Richard Zhu (12): > > > PCI: imx6: Move imx6_pcie_clk_disable() earlier > > > PCI: imx6: Collect clock enables in imx6_pcie_clk_enable() > > > PCI: imx6: Propagate .host_init() errors to caller > > > PCI: imx6: Disable i.MX6QDL clock when disabling ref clocks > > > PCI: imx6: Call host init function directly in resume > > > PCI: imx6: Turn off regulator when system is in suspend mode > > > PCI: imx6: Move regulator enable out of > > > imx6_pcie_deassert_core_reset() > > > PCI: imx6: Mark the link down as non-fatal error > > > PCI: imx6: Reduce resume time by only starting link if it was up > > > before suspend > > > PCI: imx6: Do not hide phy driver callbacks and refine the error > > > handling > > > PCI: imx6: Reformat suspend callback to keep symmetric with resume > > > PCI: imx6: Move the imx6_pcie_ltssm_disable() earlier > > > > > > drivers/pci/controller/dwc/pci-imx6.c | 661 > > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +++++++ > > > +++++++++++++++++++++++++++++++++++++++++++++----------------------- > > > -------------------------------------------------------------------- > > > ---- > > > 1 file changed, 358 insertions(+), 303 deletions(-) > > > > Applied to pci/ctrl/imx6 for v5.20, thanks a lot for all your work > > here! Hi Bjorn: > > I updated the branch with Lucas' acks and with the minor > imx6_pcie_start_link() return value check he suggested. > Thanks a lot for your kindly help. > I did not do anything about the missing IMX8MQ case in > imx6_pcie_ltssm_disable() or the PHY init or regulator or shutdown issues. If > you want changes there, please make them starting with the > pci/ctrl/imx6 branch and I can just replace it: > > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kern > el.org%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Fhelgaas%2Fpci.git%2Fcom > mit%2F%3Fh%3Dpci%2Fctrl%2Fimx6%26id%3D7d652ce95e70&data=05 > %7C01%7Chongxing.zhu%40nxp.com%7Cd0b3d82dae37495b2f7e08da64ef2a > 3a%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6379332756103 > 31009%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2lu > MzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Z8 > grlALYqs3ONJp1EQJsFJd8fD8XiE3zFXHuYlfE4TI%3D&reserved=0 > The following changes are applied. Should I re-send all 17 patches out, or just the following five patches? 10/17 - Remove regulator_disable() from imx6_pcie_shutdown() and update the commit log accordingly refer to Lucas' comments. 11/17 - Move the regulator enable before the PHY init and core reset assert to avoid introducing more failure cleanup paths refer to Lucas' comments. 14/17 has the codes conflictions. - Rebase the 14/17 patch because of the codes conflictions introduced by previous 11/17 new changes. 16/17 - Add the missing the IMX8MQ case and drop the default case in imx6_pcie_ltssm_disable() refer to Lucas' comments. 17/17 - Rebase the codes and resolve the codes conflictions introduced by previous 11/17 new changes. - Correct one failure cleanup in imx6_pcie_host_init(). Best Regards Richard Zhu > Bjorn