diff options
-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) | |||
304 | IMX6Q_GPR8_TX_SWING_LOW, 127 << 25); | 304 | IMX6Q_GPR8_TX_SWING_LOW, 127 << 25); |
305 | } | 305 | } |
306 | 306 | ||
307 | static 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 | |||
307 | static void imx6_pcie_host_init(struct pcie_port *pp) | 326 | static 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 | ||
339 | static void imx6_pcie_reset_phy(struct pcie_port *pp) | 345 | static void imx6_pcie_reset_phy(struct pcie_port *pp) |