diff options
author | Marek Vasut <[email protected]> | 2013-12-12 22:50:01 +0100 |
---|---|---|
committer | Bjorn Helgaas <[email protected]> | 2013-12-19 10:57:15 -0700 |
commit | 66a60f934701e282e596c97a3df22e4e5a7c2d68 (patch) | |
tree | 124531868a57275f4f119911d6e728efa069463b | |
parent | 982aa234512f6a88932a5ece7f7becbf4b08ece7 (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 <[email protected]>
Signed-off-by: Bjorn Helgaas <[email protected]>
Acked-by: Shawn Guo <[email protected]>
Cc: Frank Li <[email protected]>
Cc: Harro Haan <[email protected]>
Cc: Jingoo Han <[email protected]>
Cc: Mohit KUMAR <[email protected]>
Cc: Pratyush Anand <[email protected]>
Cc: Richard Zhu <[email protected]>
Cc: Sascha Hauer <[email protected]>
Cc: Sean Cross <[email protected]>
Cc: Siva Reddy Kallam <[email protected]>
Cc: Srikanth T Shivanand <[email protected]>
Cc: Tim Harvey <[email protected]>
Cc: Troy Kisky <[email protected]>
Cc: Yinghai Lu <[email protected]>
-rw-r--r-- | drivers/pci/host/pci-imx6.c | 34 |
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) IMX6Q_GPR8_TX_SWING_LOW, 127 << 25); } +static int imx6_pcie_wait_for_link(struct pcie_port *pp) +{ + int count = 200; + + while (!dw_pcie_link_up(pp)) { + usleep_range(100, 1000); + if (--count) + continue; + + dev_err(pp->dev, "phy link never came up\n"); + dev_dbg(pp->dev, "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n", + readl(pp->dbi_base + PCIE_PHY_DEBUG_R0), + readl(pp->dbi_base + PCIE_PHY_DEBUG_R1)); + return -EINVAL; + } + + return 0; +} + static void imx6_pcie_host_init(struct pcie_port *pp) { int count = 0; @@ -320,20 +339,7 @@ static void imx6_pcie_host_init(struct pcie_port *pp) regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, IMX6Q_GPR12_PCIE_CTL_2, 1 << 10); - while (!dw_pcie_link_up(pp)) { - usleep_range(100, 1000); - count++; - if (count >= 200) { - dev_err(pp->dev, "phy link never came up\n"); - dev_dbg(pp->dev, - "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n", - readl(pp->dbi_base + PCIE_PHY_DEBUG_R0), - readl(pp->dbi_base + PCIE_PHY_DEBUG_R1)); - break; - } - } - - return; + imx6_pcie_wait_for_link(pp); } static void imx6_pcie_reset_phy(struct pcie_port *pp) |