aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Zhu <r65037@freescale.com>2013-12-12 16:50:03 -0500
committerBjorn Helgaas <bhelgaas@google.com>2013-12-19 13:02:34 -0500
commitbc9ef770047a931787e1b1e092dbe3993ce4e0fb (patch)
tree0958540a9f6b9c6825d11e7154dbe658c0f7599e
parentfa33a6d87eac1ab1457e632d32b7b4b74172e699 (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.c15
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
280err_pcie_axi: 277err_pcie_axi: