|
@@ -336,9 +336,26 @@ static void imx6_pcie_host_init(struct pcie_port *pp)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+static void imx6_pcie_reset_phy(struct pcie_port *pp)
|
|
|
+{
|
|
|
+ uint32_t temp;
|
|
|
+
|
|
|
+ pcie_phy_read(pp->dbi_base, PHY_RX_OVRD_IN_LO, &temp);
|
|
|
+ temp |= (PHY_RX_OVRD_IN_LO_RX_DATA_EN |
|
|
|
+ PHY_RX_OVRD_IN_LO_RX_PLL_EN);
|
|
|
+ pcie_phy_write(pp->dbi_base, PHY_RX_OVRD_IN_LO, temp);
|
|
|
+
|
|
|
+ usleep_range(2000, 3000);
|
|
|
+
|
|
|
+ pcie_phy_read(pp->dbi_base, PHY_RX_OVRD_IN_LO, &temp);
|
|
|
+ temp &= ~(PHY_RX_OVRD_IN_LO_RX_DATA_EN |
|
|
|
+ PHY_RX_OVRD_IN_LO_RX_PLL_EN);
|
|
|
+ pcie_phy_write(pp->dbi_base, PHY_RX_OVRD_IN_LO, temp);
|
|
|
+}
|
|
|
+
|
|
|
static int imx6_pcie_link_up(struct pcie_port *pp)
|
|
|
{
|
|
|
- u32 rc, ltssm, rx_valid, temp;
|
|
|
+ u32 rc, ltssm, rx_valid;
|
|
|
|
|
|
/*
|
|
|
* Test if the PHY reports that the link is up and also that
|
|
@@ -370,21 +387,7 @@ static int imx6_pcie_link_up(struct pcie_port *pp)
|
|
|
|
|
|
dev_err(pp->dev, "transition to gen2 is stuck, reset PHY!\n");
|
|
|
|
|
|
- pcie_phy_read(pp->dbi_base,
|
|
|
- PHY_RX_OVRD_IN_LO, &temp);
|
|
|
- temp |= (PHY_RX_OVRD_IN_LO_RX_DATA_EN
|
|
|
- | PHY_RX_OVRD_IN_LO_RX_PLL_EN);
|
|
|
- pcie_phy_write(pp->dbi_base,
|
|
|
- PHY_RX_OVRD_IN_LO, temp);
|
|
|
-
|
|
|
- usleep_range(2000, 3000);
|
|
|
-
|
|
|
- pcie_phy_read(pp->dbi_base,
|
|
|
- PHY_RX_OVRD_IN_LO, &temp);
|
|
|
- temp &= ~(PHY_RX_OVRD_IN_LO_RX_DATA_EN
|
|
|
- | PHY_RX_OVRD_IN_LO_RX_PLL_EN);
|
|
|
- pcie_phy_write(pp->dbi_base,
|
|
|
- PHY_RX_OVRD_IN_LO, temp);
|
|
|
+ imx6_pcie_reset_phy(pp);
|
|
|
|
|
|
return 0;
|
|
|
}
|