|
@@ -23,13 +23,20 @@
|
|
|
#define PCI_ACCESS_READ 0
|
|
|
#define PCI_ACCESS_WRITE 1
|
|
|
|
|
|
+#ifdef CONFIG_MX6SX
|
|
|
+#define MX6_DBI_ADDR 0x08ffc000
|
|
|
+#define MX6_IO_ADDR 0x08000000
|
|
|
+#define MX6_MEM_ADDR 0x08100000
|
|
|
+#define MX6_ROOT_ADDR 0x08f00000
|
|
|
+#else
|
|
|
#define MX6_DBI_ADDR 0x01ffc000
|
|
|
-#define MX6_DBI_SIZE 0x4000
|
|
|
#define MX6_IO_ADDR 0x01000000
|
|
|
-#define MX6_IO_SIZE 0x100000
|
|
|
#define MX6_MEM_ADDR 0x01100000
|
|
|
-#define MX6_MEM_SIZE 0xe00000
|
|
|
#define MX6_ROOT_ADDR 0x01f00000
|
|
|
+#endif
|
|
|
+#define MX6_DBI_SIZE 0x4000
|
|
|
+#define MX6_IO_SIZE 0x100000
|
|
|
+#define MX6_MEM_SIZE 0xe00000
|
|
|
#define MX6_ROOT_SIZE 0xfc000
|
|
|
|
|
|
/* PCIe Port Logic registers (memory-mapped) */
|
|
@@ -57,6 +64,8 @@
|
|
|
#define PHY_RX_OVRD_IN_LO_RX_DATA_EN (1 << 5)
|
|
|
#define PHY_RX_OVRD_IN_LO_RX_PLL_EN (1 << 3)
|
|
|
|
|
|
+#define PCIE_PHY_PUP_REQ (1 << 7)
|
|
|
+
|
|
|
/* iATU registers */
|
|
|
#define PCIE_ATU_VIEWPORT 0x900
|
|
|
#define PCIE_ATU_REGION_INBOUND (0x1 << 31)
|
|
@@ -421,9 +430,19 @@ static int imx_pcie_write_config(struct pci_controller *hose, pci_dev_t d,
|
|
|
static int imx6_pcie_assert_core_reset(void)
|
|
|
{
|
|
|
struct iomuxc *iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
|
|
|
-
|
|
|
+#if defined(CONFIG_MX6SX)
|
|
|
+ struct gpc *gpc_regs = (struct gpc *)GPC_BASE_ADDR;
|
|
|
+
|
|
|
+ /* SSP_EN is not used on MX6SX anymore */
|
|
|
+ setbits_le32(&iomuxc_regs->gpr[12], IOMUXC_GPR12_TEST_POWERDOWN);
|
|
|
+ /* Force PCIe PHY reset */
|
|
|
+ setbits_le32(&iomuxc_regs->gpr[5], IOMUXC_GPR5_PCIE_BTNRST);
|
|
|
+ /* Power up PCIe PHY */
|
|
|
+ setbits_le32(&gpc_regs->cntr, PCIE_PHY_PUP_REQ);
|
|
|
+#else
|
|
|
setbits_le32(&iomuxc_regs->gpr[1], IOMUXC_GPR1_TEST_POWERDOWN);
|
|
|
clrbits_le32(&iomuxc_regs->gpr[1], IOMUXC_GPR1_REF_SSP_EN);
|
|
|
+#endif
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -441,6 +460,12 @@ static int imx6_pcie_init_phy(void)
|
|
|
IOMUXC_GPR12_LOS_LEVEL_MASK,
|
|
|
IOMUXC_GPR12_LOS_LEVEL_9);
|
|
|
|
|
|
+#ifdef CONFIG_MX6SX
|
|
|
+ clrsetbits_le32(&iomuxc_regs->gpr[12],
|
|
|
+ IOMUXC_GPR12_RX_EQ_MASK,
|
|
|
+ IOMUXC_GPR12_RX_EQ_2);
|
|
|
+#endif
|
|
|
+
|
|
|
writel((0x0 << IOMUXC_GPR8_PCS_TX_DEEMPH_GEN1_OFFSET) |
|
|
|
(0x0 << IOMUXC_GPR8_PCS_TX_DEEMPH_GEN2_3P5DB_OFFSET) |
|
|
|
(20 << IOMUXC_GPR8_PCS_TX_DEEMPH_GEN2_6DB_OFFSET) |
|
|
@@ -517,9 +542,16 @@ static int imx6_pcie_deassert_core_reset(void)
|
|
|
*/
|
|
|
mdelay(50);
|
|
|
|
|
|
+#if defined(CONFIG_MX6SX)
|
|
|
+ /* SSP_EN is not used on MX6SX anymore */
|
|
|
+ clrbits_le32(&iomuxc_regs->gpr[12], IOMUXC_GPR12_TEST_POWERDOWN);
|
|
|
+ /* Clear PCIe PHY reset bit */
|
|
|
+ clrbits_le32(&iomuxc_regs->gpr[5], IOMUXC_GPR5_PCIE_BTNRST);
|
|
|
+#else
|
|
|
/* Enable PCIe */
|
|
|
clrbits_le32(&iomuxc_regs->gpr[1], IOMUXC_GPR1_TEST_POWERDOWN);
|
|
|
setbits_le32(&iomuxc_regs->gpr[1], IOMUXC_GPR1_REF_SSP_EN);
|
|
|
+#endif
|
|
|
|
|
|
imx6_pcie_toggle_reset();
|
|
|
|