* [PATCH V3]PCI: imx6: Wait the clocks to stabilize after ref_en @ 2014-10-27 5:17 Richard Zhu 2014-10-27 5:17 ` [PATCH V3] PCI: " Richard Zhu 0 siblings, 1 reply; 3+ messages in thread From: Richard Zhu @ 2014-10-27 5:17 UTC (permalink / raw) To: linux-pci; +Cc: bhelgaas, shawn.guo, festevam, l.stach, tharvey, m-karicheri2 Hi Bjorn: Can you pick up this patch as the fix for v3.18? Thanks in advanced. Fabio suggested to resend this patch only, because that he notice that the kernel does not boot anymore since commit 3fce0e882f61 (PCI: imx6: Delay enabling reference clock for SS until it stabilizes) on a system that does not pass the PCI gpio reset in the dtb. This causes a regression on mx6 nitrogen boards. Add "Acked-by: Lucas Stach <l.stach@pengutronix.de>" into the patch. Remove "Tested-by: Tim Harvey <tharvey@gateworks.com>" from this patch. [PATCH V3] PCI: imx6: Wait the clocks to stabilize after ref_en ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH V3] PCI: imx6: Wait the clocks to stabilize after ref_en 2014-10-27 5:17 [PATCH V3]PCI: imx6: Wait the clocks to stabilize after ref_en Richard Zhu @ 2014-10-27 5:17 ` Richard Zhu 2014-10-29 16:20 ` Bjorn Helgaas 0 siblings, 1 reply; 3+ messages in thread From: Richard Zhu @ 2014-10-27 5:17 UTC (permalink / raw) To: linux-pci Cc: bhelgaas, shawn.guo, festevam, l.stach, tharvey, m-karicheri2, Richard Zhu, Richard Zhu From: Richard Zhu <r65037@freescale.com> For boards without a reset GPIO we skip the delay between enabling the pcie_ref_clk and touching the RC registers for configuration. This hangs the system if there isn't a proper delay to ensure the clocks are settled in the DW PCIe core. Also iMX6Q always needs an additional 10us delay to make sure the reset is propagated through the core, as we don't have an explicitly controlled reset input on this SoC. Signed-off-by: Richard Zhu <richard.zhu@freescale.com> Tested-by: Fabio Estevam <fabio.estevam@freescale.com> Acked-by: Lucas Stach <l.stach@pengutronix.de> --- drivers/pci/host/pci-imx6.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index 233fe8a..eac96fb 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -275,15 +275,22 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) goto err_pcie; } - /* allow the clocks to stabilize */ - usleep_range(200, 500); - /* power up core phy and enable ref clock */ regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); + /* + * the async reset input need ref clock to sync internally, + * when the ref clock comes after reset, internal synced + * reset time is too short , cannot meet the requirement. + * add one ~10us delay here. + */ + udelay(10); regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); + /* allow the clocks to stabilize */ + usleep_range(200, 500); + /* Some boards don't have PCIe reset GPIO. */ if (gpio_is_valid(imx6_pcie->reset_gpio)) { gpio_set_value(imx6_pcie->reset_gpio, 0); -- 1.9.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH V3] PCI: imx6: Wait the clocks to stabilize after ref_en 2014-10-27 5:17 ` [PATCH V3] PCI: " Richard Zhu @ 2014-10-29 16:20 ` Bjorn Helgaas 0 siblings, 0 replies; 3+ messages in thread From: Bjorn Helgaas @ 2014-10-29 16:20 UTC (permalink / raw) To: Richard Zhu Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, m-karicheri2, Richard Zhu On Mon, Oct 27, 2014 at 01:17:32PM +0800, Richard Zhu wrote: > From: Richard Zhu <r65037@freescale.com> > > For boards without a reset GPIO we skip the delay between enabling the > pcie_ref_clk and touching the RC registers for configuration. > This hangs the system if there isn't a proper delay to ensure the clocks > are settled in the DW PCIe core. > > Also iMX6Q always needs an additional 10us delay to make sure the reset > is propagated through the core, as we don't have an explicitly > controlled reset input on this SoC. > > Signed-off-by: Richard Zhu <richard.zhu@freescale.com> > Tested-by: Fabio Estevam <fabio.estevam@freescale.com> > Acked-by: Lucas Stach <l.stach@pengutronix.de> I added the regression info to the changelog and applied this to for-linus for v3.18, thanks! > --- > drivers/pci/host/pci-imx6.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c > index 233fe8a..eac96fb 100644 > --- a/drivers/pci/host/pci-imx6.c > +++ b/drivers/pci/host/pci-imx6.c > @@ -275,15 +275,22 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) > goto err_pcie; > } > > - /* allow the clocks to stabilize */ > - usleep_range(200, 500); > - > /* power up core phy and enable ref clock */ > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); > + /* > + * the async reset input need ref clock to sync internally, > + * when the ref clock comes after reset, internal synced > + * reset time is too short , cannot meet the requirement. > + * add one ~10us delay here. > + */ > + udelay(10); > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); > > + /* allow the clocks to stabilize */ > + usleep_range(200, 500); > + > /* Some boards don't have PCIe reset GPIO. */ > if (gpio_is_valid(imx6_pcie->reset_gpio)) { > gpio_set_value(imx6_pcie->reset_gpio, 0); > -- > 1.9.1 > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-10-29 16:20 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-10-27 5:17 [PATCH V3]PCI: imx6: Wait the clocks to stabilize after ref_en Richard Zhu 2014-10-27 5:17 ` [PATCH V3] PCI: " Richard Zhu 2014-10-29 16:20 ` Bjorn Helgaas
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).