aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/host/pci-imx6.c
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2013-12-12 16:50:01 -0500
committerBjorn Helgaas <bhelgaas@google.com>2013-12-19 12:57:15 -0500
commit66a60f934701e282e596c97a3df22e4e5a7c2d68 (patch)
tree124531868a57275f4f119911d6e728efa069463b /drivers/pci/host/pci-imx6.c
parent982aa234512f6a88932a5ece7f7becbf4b08ece7 (diff)
PCI: imx6: Factor out link up wait loop
Split the function that waits for the PCIe link to come up from the rest if the host init function. We will find this change useful in the subsequent patch, since this will be called twice then. No functional change. [bhelgaas: remove useless "return;"] Signed-off-by: Marek Vasut <marex@denx.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Shawn Guo <shawn.guo@linaro.org> Cc: Frank Li <lznuaa@gmail.com> Cc: Harro Haan <hrhaan@gmail.com> Cc: Jingoo Han <jg1.han@samsung.com> Cc: Mohit KUMAR <Mohit.KUMAR@st.com> Cc: Pratyush Anand <pratyush.anand@st.com> Cc: Richard Zhu <r65037@freescale.com> Cc: Sascha Hauer <s.hauer@pengutronix.de> Cc: Sean Cross <xobs@kosagi.com> Cc: Siva Reddy Kallam <siva.kallam@samsung.com> Cc: Srikanth T Shivanand <ts.srikanth@samsung.com> Cc: Tim Harvey <tharvey@gateworks.com> Cc: Troy Kisky <troy.kisky@boundarydevices.com> Cc: Yinghai Lu <yinghai@kernel.org>
Diffstat (limited to 'drivers/pci/host/pci-imx6.c')
-rw-r--r--drivers/pci/host/pci-imx6.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index 25dde2c7b445..d81da4556c19 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -304,6 +304,25 @@ static void imx6_pcie_init_phy(struct pcie_port *pp)
304 IMX6Q_GPR8_TX_SWING_LOW, 127 << 25); 304 IMX6Q_GPR8_TX_SWING_LOW, 127 << 25);
305} 305}
306 306
307static int imx6_pcie_wait_for_link(struct pcie_port *pp)
308{
309 int count = 200;
310
311 while (!dw_pcie_link_up(pp)) {
312 usleep_range(100, 1000);
313 if (--count)
314 continue;
315
316 dev_err(pp->dev, "phy link never came up\n");
317 dev_dbg(pp->dev, "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n",
318 readl(pp->dbi_base + PCIE_PHY_DEBUG_R0),
319 readl(pp->dbi_base + PCIE_PHY_DEBUG_R1));
320 return -EINVAL;
321 }
322
323 return 0;
324}
325
307static void imx6_pcie_host_init(struct pcie_port *pp) 326static void imx6_pcie_host_init(struct pcie_port *pp)
308{ 327{
309 int count = 0; 328 int count = 0;
@@ -320,20 +339,7 @@ static void imx6_pcie_host_init(struct pcie_port *pp)
320 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, 339 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
321 IMX6Q_GPR12_PCIE_CTL_2, 1 << 10); 340 IMX6Q_GPR12_PCIE_CTL_2, 1 << 10);
322 341
323 while (!dw_pcie_link_up(pp)) { 342 imx6_pcie_wait_for_link(pp);
324 usleep_range(100, 1000);
325 count++;
326 if (count >= 200) {
327 dev_err(pp->dev, "phy link never came up\n");
328 dev_dbg(pp->dev,
329 "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n",
330 readl(pp->dbi_base + PCIE_PHY_DEBUG_R0),
331 readl(pp->dbi_base + PCIE_PHY_DEBUG_R1));
332 break;
333 }
334 }
335
336 return;
337} 343}
338 344
339static void imx6_pcie_reset_phy(struct pcie_port *pp) 345static void imx6_pcie_reset_phy(struct pcie_port *pp)