diff options
author | Richard Zhu <[email protected]> | 2013-12-12 22:50:03 +0100 |
---|---|---|
committer | Bjorn Helgaas <[email protected]> | 2013-12-19 11:02:34 -0700 |
commit | bc9ef770047a931787e1b1e092dbe3993ce4e0fb (patch) | |
tree | 0958540a9f6b9c6825d11e7154dbe658c0f7599e | |
parent | fa33a6d87eac1ab1457e632d32b7b4b74172e699 (diff) |
PCI: imx6: Fix bugs in PCIe startup code
LTSSM shouldn't be set once in assert_core_reset(). Move peripheral reset
just before LTSSM start.
Signed-off-by: Richard Zhu <[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 | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index d34678dc5a14..e8663a8c3406 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -220,18 +220,9 @@ static int imx6_pcie_assert_core_reset(struct pcie_port *pp) regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, IMX6Q_GPR1_PCIE_TEST_PD, 1 << 18); - regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, - IMX6Q_GPR12_PCIE_CTL_2, 1 << 10); regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, IMX6Q_GPR1_PCIE_REF_CLK_EN, 0 << 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); - msleep(100); - gpio_set_value(imx6_pcie->reset_gpio, 1); - } - return 0; } @@ -275,6 +266,12 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) /* allow the clocks to stabilize */ usleep_range(200, 500); + /* Some boards don't have PCIe reset GPIO. */ + if (gpio_is_valid(imx6_pcie->reset_gpio)) { + gpio_set_value(imx6_pcie->reset_gpio, 0); + msleep(100); + gpio_set_value(imx6_pcie->reset_gpio, 1); + } return 0; err_pcie_axi: |