diff options
author | Richard Zhu <r65037@freescale.com> | 2013-12-12 16:50:03 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-12-19 13:02:34 -0500 |
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 <r65037@freescale.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Frank Li <lznuaa@gmail.com>
Cc: Harro Haan <hrhaan@gmail.com>
Cc: Jingoo Han <jg1.han@samsung.com>
Cc: Mohit KUMAR <Mohit.KUMAR@st.com>
Cc: Pratyush Anand <pratyush.anand@st.com>
Cc: Richard Zhu <r65037@freescale.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Sean Cross <xobs@kosagi.com>
Cc: Siva Reddy Kallam <siva.kallam@samsung.com>
Cc: Srikanth T Shivanand <ts.srikanth@samsung.com>
Cc: Tim Harvey <tharvey@gateworks.com>
Cc: Troy Kisky <troy.kisky@boundarydevices.com>
Cc: Yinghai Lu <yinghai@kernel.org>
-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) | |||
220 | 220 | ||
221 | regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, | 221 | regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, |
222 | IMX6Q_GPR1_PCIE_TEST_PD, 1 << 18); | 222 | IMX6Q_GPR1_PCIE_TEST_PD, 1 << 18); |
223 | regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, | ||
224 | IMX6Q_GPR12_PCIE_CTL_2, 1 << 10); | ||
225 | regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, | 223 | regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, |
226 | IMX6Q_GPR1_PCIE_REF_CLK_EN, 0 << 16); | 224 | IMX6Q_GPR1_PCIE_REF_CLK_EN, 0 << 16); |
227 | 225 | ||
228 | /* Some boards don't have PCIe reset GPIO. */ | ||
229 | if (gpio_is_valid(imx6_pcie->reset_gpio)) { | ||
230 | gpio_set_value(imx6_pcie->reset_gpio, 0); | ||
231 | msleep(100); | ||
232 | gpio_set_value(imx6_pcie->reset_gpio, 1); | ||
233 | } | ||
234 | |||
235 | return 0; | 226 | return 0; |
236 | } | 227 | } |
237 | 228 | ||
@@ -275,6 +266,12 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) | |||
275 | /* allow the clocks to stabilize */ | 266 | /* allow the clocks to stabilize */ |
276 | usleep_range(200, 500); | 267 | usleep_range(200, 500); |
277 | 268 | ||
269 | /* Some boards don't have PCIe reset GPIO. */ | ||
270 | if (gpio_is_valid(imx6_pcie->reset_gpio)) { | ||
271 | gpio_set_value(imx6_pcie->reset_gpio, 0); | ||
272 | msleep(100); | ||
273 | gpio_set_value(imx6_pcie->reset_gpio, 1); | ||
274 | } | ||
278 | return 0; | 275 | return 0; |
279 | 276 | ||
280 | err_pcie_axi: | 277 | err_pcie_axi: |