39 lines
1.4 KiB
Diff
39 lines
1.4 KiB
Diff
PCI: imx6: fix occasional link failure
|
|
|
|
According to the IMX6 reference manuals, REF_SSP_EN (Reference clock enable
|
|
for SS function) must remain deasserted until the reference clock is running
|
|
at the appropriate frequency.
|
|
|
|
Without this patch we find a high link failure rate (>5%) on certain
|
|
IMX6 boards at various temperatures.
|
|
|
|
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
|
|
|
--- a/drivers/pci/host/pci-imx6.c
|
|
+++ b/drivers/pci/host/pci-imx6.c
|
|
@@ -262,11 +262,6 @@ static int imx6_pcie_deassert_core_reset
|
|
if (gpio_is_valid(imx6_pcie->power_on_gpio))
|
|
gpio_set_value(imx6_pcie->power_on_gpio, 1);
|
|
|
|
- regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
|
|
- IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
|
|
- regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
|
|
- IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
|
|
-
|
|
ret = clk_prepare_enable(imx6_pcie->sata_ref_100m);
|
|
if (ret) {
|
|
dev_err(pp->dev, "unable to enable sata_ref_100m\n");
|
|
@@ -294,6 +289,12 @@ static int imx6_pcie_deassert_core_reset
|
|
/* 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);
|
|
+ regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
|
|
+ IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
|
|
+
|
|
/* Some boards don't have PCIe reset GPIO. */
|
|
if (gpio_is_valid(imx6_pcie->reset_gpio)) {
|
|
gpio_set_value(imx6_pcie->reset_gpio, 0);
|