[linux-yocto] [PATCH 09/17] drivers/misc/axxia-pei: Update PCIe/sRIO Lane Configuration

Daniel Dragomir daniel.dragomir at windriver.com
Tue May 16 11:39:01 PDT 2017


From: Gary McGee <gary.mcgee at intel.com>

Only allow officially supported configurations.

Signed-off-by: Gary McGee <gary.mcgee at intel.com>
---
 drivers/misc/axxia-pei.c      | 474 ++++++++++--------------------------------
 drivers/pci/host/pcie-axxia.c |   7 -
 2 files changed, 108 insertions(+), 373 deletions(-)

diff --git a/drivers/misc/axxia-pei.c b/drivers/misc/axxia-pei.c
index a221bf5..a620216 100644
--- a/drivers/misc/axxia-pei.c
+++ b/drivers/misc/axxia-pei.c
@@ -855,7 +855,7 @@ static int check_ack(u32 phy, u32 lane, enum Dir dir)
 	return regVal;
 }
 
-static int check_srio_ack(enum SrioMode mode)
+int check_srio_ack(enum SrioMode mode)
 {
 	unsigned int phy;
 	unsigned int lane;
@@ -1174,7 +1174,7 @@ update_settings(void)
 */
 
 static int
-pei_setup(unsigned int control)
+pei_setup_56xx(unsigned int control)
 {
 	unsigned int pci_srio_sata_mode;
 	unsigned int rc_mode;
@@ -1192,13 +1192,9 @@ pei_setup(unsigned int control)
 	unsigned int pei1_mode;
 	unsigned int pei2_mode;
 	u32 reg_val = 0;
-	int phy, lane;
+	int phy;
 
 	pci_srio_sata_mode = (control & 0x03c00000) >> 22;
-	/*
-	pr_debug("YYY: pei_setup control=0x%08x pci_srio_sata_mode=%d\n",
-		control, pci_srio_sata_mode);
-	*/
 
 	sata0_mode = (control & 0x20) >> 5;
 	sata1_mode = (control & 0x40) >> 6;
@@ -1238,26 +1234,11 @@ pei_setup(unsigned int control)
 	mdelay(100);		/* TODO: Why is this needed? */
 
 	switch (pci_srio_sata_mode) {
-	case 0:
-		set_sw_port_config0(pc0_PEI0x8);
-		set_sw_port_config1(pc1_PEI0x8);
-		set_pei0_rc_mode(rc_mode);
-		set_pipe_port_sel(pp_0);
-		set_pipe_nphy(four_phy);
-
-		if (pei0_mode)
-			for (phy = 0; phy < 4; phy++)
-				release_reset(phy);
 
-		/* Enable PEI0 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0x0, &reg_val);
-		reg_val |= (pei0_mode << 0);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0x0, reg_val);
-		break;
 	case 1:
 		/*
-		  PEI0x4, PEI1x4
-		*/
+		 * PEI0x4 + PEI1x4
+		 */
 		set_sw_port_config0(pc0_PEI0x4);
 		set_sw_port_config1(pc1_PEI1x4);
 		set_pei0_rc_mode(rc_mode);
@@ -1278,67 +1259,11 @@ pei_setup(unsigned int control)
 			(pei1_mode << 1);
 		ncr_write32(NCP_REGION_ID(0x115, 0), 0x0, reg_val);
 		break;
-	case 2:
-		/* PEI0x4_PEI1x2_SATA0x1_SATA1x1 */
-		/* Enable PEI0/PEI1, PEI0 RC mode */
-		set_sw_port_config0(pc0_PEI0x4);
-		set_sw_port_config1(pc1_PEI1x2_SATA0x1_SATA1x1);
-		set_pei0_rc_mode(rc_mode);
-		set_pipe_port_sel(pp_0_1);
 
-		if (pei0_mode)
-			for (phy = 0; phy < 2; phy++)
-				release_reset(phy);
-		if (pei1_mode)
-			release_reset(2);
-
-		/* Enable PEI0/PEI1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (pei0_mode << 0) | (pei1_mode << 1);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-
-		if (sata0_mode)
-			setup_sata_mode(SATA0, sata0_speed);
-		if (sata1_mode)
-			setup_sata_mode(SATA1, sata1_speed);
-		if (sata0_mode || sata1_mode) {
-			release_reset(3);
-			for (lane = 0; lane < 2; lane++) {
-				if (!check_ack(3, lane, TX)) {
-					pr_err("TX ACK not set for PHY3 LANE%d\n",
-					       lane);
-					return 1;
-				}
-				if (!check_ack(3, lane, RX)) {
-					pr_err("RX ACK not set for PHY3 LANE%d\n",
-					       lane);
-					return 1;
-				}
-			}
-
-			/* Set TX clock ready */
-			set_tx_clk_ready();
-		}
-
-		/* Enable SATA0/SATA1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (sata0_mode << 29) | (sata1_mode << 30);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-
-		if (sata0_mode || sata1_mode) {
-			if (!check_rx_valid(3, 0)) {
-				pr_err("RX clock/data recovery not asserted for PHY3 LANE0\n");
-				return 1;
-			}
-			if (!check_rx_valid(3, 1)) {
-				pr_err("RX clock/data recovery not asserted for PHY3 LANE1\n");
-				return 1;
-			}
-		}
-		break;
-	case 3:
-		/* PEI0x2_PEI2x2 */
-		/* PEI1x2_SATA0_SATA1 */
+	case 2:
+		/*
+		 * PEI0x2 + PEI2x2 + PEI1x2 + UNUSED (SATA0_SATA1)
+		 */
 		set_sw_port_config0(pc0_PEI0x2_PEI2x2);
 		set_sw_port_config1(pc1_PEI1x2_SATA0x1_SATA1x1);
 		set_pei0_rc_mode(rc_mode);
@@ -1357,6 +1282,7 @@ pei_setup(unsigned int control)
 			(pei2_mode << 2);
 		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
 
+#if 0
 		if (sata0_mode)
 			setup_sata_mode(SATA0, sata0_speed);
 		if (sata1_mode)
@@ -1394,137 +1320,13 @@ pei_setup(unsigned int control)
 				return 1;
 			}
 		}
+#endif
 		break;
-	case 4:
-		/* PEI0x2_SRIO0x2_PEI1x4 */
-		/* Enable PEI0/PEI1/SRIO0, PEI0 RC mode */
-		set_sw_port_config0(pc0_PEI0x2_SRIO0x2);
-		set_sw_port_config1(pc1_PEI1x4);
-		set_pei0_rc_mode(rc_mode);
-		set_pipe_port_sel(pp_0_1);
 
-		if (pei0_mode)
-			release_reset(0);
-		if (pei1_mode)
-			for (phy = 2; phy < 4; phy++)
-				release_reset(phy);
 
-		/* Enable PEI0/PEI1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (pei0_mode << 0) | (pei1_mode << 1);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-
-		set_srio_mode(SRIO0, srio0_ctrl);
-		set_srio_speed(SRIO0, srio0_speed);
-		pr_debug("Set up sRIO0 -- %d\n", srio0_speed);
-		if (srio0_mode && release_srio_reset(SRIO0, srio0_speed))
-			srio0_mode = 0;
-		pr_debug("Enabling sRIO .");
-		if (srio0_mode && check_srio_ack(SRIO0))
-			srio0_mode = 0;
-		/* Power up TX/RX lanes */
-		if (srio0_mode && powerup_srio_lanes(SRIO0, P1))
-			srio0_mode = 0;
-		/* Set TX clock ready */
-		if (srio0_mode)
-			set_tx_clk_ready();
-		if (srio0_mode && powerup_srio_lanes(SRIO0, P0))
-			srio0_mode = 0;
-		if (srio0_mode)
-			enable_srio_lanes(SRIO0);
-		/* Enable SRIO0 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (srio0_mode << 3);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-		pr_debug("Done\n");
-		break;
-	case 5:
-		/* PEI0x2_SRIO0x2_PEI1x2_SATA0x1_SATA1x1 */
-		/* Enable PEI0/PEI1/SRIO0, PEI0 RC mode */
-		set_sw_port_config0(pc0_PEI0x2_SRIO0x2);
-		set_sw_port_config1(pc1_PEI1x2_SATA0x1_SATA1x1);
-		set_pei0_rc_mode(rc_mode);
-		set_pipe_port_sel(pp_0_1);
-		set_pipe_nphy(three_phy);
-
-		if (pei0_mode)
-			release_reset(0);
-		if (pei1_mode)
-			release_reset(2);
-
-		/* Enable PEI0/PEI1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (pei0_mode << 0) | (pei1_mode << 1);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-
-		set_srio_mode(SRIO0, srio0_ctrl);
-		set_srio_speed(SRIO0, srio0_speed);
-
-		if (sata0_mode)
-			setup_sata_mode(SATA0, sata0_speed);
-		if (sata1_mode)
-			setup_sata_mode(SATA1, sata1_speed);
-		if (srio0_mode)
-			setup_srio_mode(SRIO0, srio0_speed);
-		pr_debug("Set up sRIO0 -- %d\n", srio0_speed);
-		if (srio0_mode && release_srio_reset(SRIO0, srio0_speed))
-			srio0_mode = 0;
-		if (sata0_mode || sata1_mode)
-			release_reset(3);
-		if (sata0_mode || sata1_mode) {
-			for (lane = 0; lane < 2; lane++) {
-				if (!check_ack(3, lane, TX)) {
-					pr_err("TX ACK not set for PHY3 LANE%d\n",
-					       lane);
-					return 1;
-				}
-				if (!check_ack(3, lane, RX)) {
-					pr_err("RX ACK not set for PHY3 LANE%d\n",
-					       lane);
-					return 1;
-				}
-			}
-		}
-		pr_debug("Enabling sRIO/SATA .");
-		if (srio0_mode && check_srio_ack(SRIO0))
-			srio0_mode = 0;
-		if (srio0_mode && powerup_srio_lanes(SRIO0, P1))
-			srio0_mode = 0;
-
-		/* Set TX clock ready */
-		if (srio0_mode || sata0_mode || sata1_mode)
-			set_tx_clk_ready();
-
-		if (srio0_mode && powerup_srio_lanes(SRIO0, P0))
-			srio0_mode = 0;
-		if (srio0_mode)
-			enable_srio_lanes(SRIO0);
-
-		/* Enable SATA0/SATA1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (sata0_mode << 29) | (sata1_mode << 30);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-
-		if (sata0_mode || sata1_mode) {
-			if (!check_rx_valid(3, 0)) {
-				pr_err("RX clock/data recovery not asserted for PHY3 LANE0\n");
-				return 1;
-			}
-			if (!check_rx_valid(3, 1)) {
-				pr_err("RX clock/data recovery not asserted for PHY3 LANE1\n");
-				return 1;
-			}
-		}
-
-		/* Enable SRIO0 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (srio0_mode << 3);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-		pr_debug("Done\n");
-		break;
-	case 6:
-		/* PEI0x2_SRIO0x2_PEI1x2_PEI2x2 */
-		/* Enable PEI0/PEI1/PEI2/SRIO0, PEI0 RC mode */
+	case 3:
+		/* PEI0x2 + SRIO0x2 + UNUSED (PEI1x2) + PEI2x2 */
+		/* Enable PEI0/PEI2/SRIO0, PEI0 RC mode */
 		set_pei0_rc_mode(rc_mode);
 		set_sw_port_config0(pc0_PEI0x2_SRIO0x2);
 		set_sw_port_config1(pc1_PEI1x2_PEI2x2);
@@ -1533,15 +1335,12 @@ pei_setup(unsigned int control)
 
 		if (pei0_mode)
 			release_reset(0);
-		if (pei1_mode)
-			release_reset(2);
 		if (pei2_mode)
 			release_reset(3);
 
 		/* Enable PEI0/PEI1/PEI2 */
 		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (pei0_mode << 0) | (pei1_mode << 1) |
-			(pei2_mode << 2);
+		reg_val |= (pei0_mode << 0) | (pei2_mode << 2);
 		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
 
 		set_srio_mode(SRIO0, srio0_ctrl);
@@ -1572,166 +1371,21 @@ pei_setup(unsigned int control)
 		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
 		pr_debug("Done\n");
 		break;
-	case 7:
-		/* SRIO1x2_SRIO0x2_PEI1x4 */
-		/* Enable PEI1/SRIO0/SRIO1 */
-		set_sw_port_config0(pc0_SRIO1x2_SRIO0x2);
-		set_sw_port_config1(pc1_PEI1x4);
-		set_pipe_port_sel(pp_0_1);
-		set_pipe_nphy(four_phy);
 
-		if (pei1_mode)
-			for (phy = 2; phy < 4; phy++)
-				release_reset(phy);
-		/* Enable PEI1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (pei1_mode << 1);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
 
-		set_srio_mode(SRIO0, srio0_ctrl);
-		set_srio_mode(SRIO1, srio1_ctrl);
-		set_srio_speed(SRIO0, srio0_speed);
-		set_srio_speed(SRIO1, srio1_speed);
-		pr_debug("Set up sRIO0 -- %d\n", srio0_speed);
-		if (srio0_mode) {
-			setup_srio_mode(SRIO0, srio0_speed);
-			if (release_srio_reset(SRIO0, srio0_speed))
-				srio0_mode = 0;
-		}
-		pr_debug("Set up sRIO1 -- %d\n", srio1_speed);
-		if (srio1_mode) {
-			setup_srio_mode(SRIO1, srio1_speed);
-			if (release_srio_reset(SRIO1, srio1_speed))
-				srio1_mode = 0;
-		}
-		pr_debug("Enabling sRIO .");
-		/* Power up TX/RX lanes */
-		if (srio0_mode) {
-			pr_debug("0 .");
-			if (powerup_srio_lanes(SRIO0, P1))
-				srio0_mode = 0;
-		}
-		if (srio1_mode) {
-			pr_debug("1 .");
-			if (powerup_srio_lanes(SRIO1, P1))
-				srio1_mode = 0;
-		}
-		pr_debug(".");
-		/* Set TX clock ready */
-		if (srio0_mode || srio1_mode)
-			set_tx_clk_ready();
-
-		/* Power up TX/RX lanes */
-		if (srio0_mode && powerup_srio_lanes(SRIO0, P0))
-			srio0_mode = 0;
-		if (srio1_mode && powerup_srio_lanes(SRIO1, P0))
-			srio1_mode = 0;
-		pr_debug(".");
-		if (srio0_mode)
-			enable_srio_lanes(SRIO0);
-		if (srio1_mode)
-			enable_srio_lanes(SRIO1);
-		pr_debug(".");
-		/* Enable SRIO0/SRIO1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (srio0_mode << 3) | (srio1_mode << 10);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-		pr_debug("Done\n");
-		break;
-	case 8:
-		/* SRIO1x2_SRIO0x2_PEI1x2_SATA0x1_SATA1x1 */
-		/* Enable PEI1 */
-		set_sw_port_config0(pc0_SRIO1x2_SRIO0x2);
-		set_sw_port_config1(pc1_PEI1x2_SATA0x1_SATA1x1);
-		set_pipe_port_sel(pp_0_1);
-		set_pipe_nphy(two_phy);
-
-		if (pei1_mode)
-			release_reset(2);
-
-		/* Enable PEI1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (pei1_mode << 1);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-
-		set_srio_mode(SRIO0, srio0_ctrl);
-		set_srio_mode(SRIO1, srio1_ctrl);
-		set_srio_speed(SRIO0, srio0_speed);
-		set_srio_speed(SRIO1, srio1_speed);
-		if (sata0_mode)
-			setup_sata_mode(SATA0, sata0_speed);
-		if (sata1_mode)
-			setup_sata_mode(SATA1, sata1_speed);
-		pr_debug("Set up sRIO0 -- %d\n", srio0_speed);
-		if (srio0_mode) {
-			setup_srio_mode(SRIO0, srio0_speed);
-			if (release_srio_reset(SRIO0, srio0_speed))
-				srio0_mode = 0;
-		}
-		pr_debug("Set up sRIO1 -- %d\n", srio1_speed);
-		if (srio1_mode) {
-			setup_srio_mode(SRIO1, srio1_speed);
-			if (release_srio_reset(SRIO1, srio1_speed))
-				srio1_mode = 0;
-		}
-		if (sata0_mode || sata1_mode)
-			release_reset(3);
-
-		pr_debug("Enabling sRIO/SATA .");
-		/* Power up TX/RX lanes */
-		if (srio0_mode && powerup_srio_lanes(SRIO0, P1))
-			srio0_mode = 0;
-		if (srio1_mode && powerup_srio_lanes(SRIO1, P1))
-			srio1_mode = 0;
-
-		pr_debug(".");
-		/* Set TX clock ready */
-		if (srio0_mode || srio1_mode || sata0_mode || sata1_mode)
-			set_tx_clk_ready();
-
-		/* Power up TX/RX lanes */
-		if (srio0_mode && powerup_srio_lanes(SRIO0, P0))
-			srio0_mode = 0;
-		if (srio1_mode && powerup_srio_lanes(SRIO1, P0))
-			srio1_mode = 0;
-		pr_debug(".");
-
-		if (srio0_mode)
-			enable_srio_lanes(SRIO0);
-		if (srio1_mode)
-			enable_srio_lanes(SRIO1);
-		pr_debug(".");
-
-		/* Enable SATA0/SATA1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (sata0_mode << 29) | (sata1_mode << 30);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-
-		if (sata0_mode && !check_rx_valid(3, 0))
-			pr_err("RX clock/data recovery not asserted for PHY3 LANE0\n");
-		if (sata1_mode && !check_rx_valid(3, 1))
-			pr_err("RX clock/data recovery not asserted for PHY3 LANE1\n");
-		/* Enable SRIO0/SRIO1 */
-		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (srio0_mode << 3) | (srio1_mode << 10);
-		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
-		pr_debug("Done\n");
-		break;
-	case 9:
-		/* SRIO1x2_SRIO0x2_PEI1x2_PEI2x2 */
+	case 4:
+		/* SRIO1x2 + SRIO0x2 + UNUSED(PEI1x2) + PEI2x2 */
 		/* Enable PEI2/PEI1 */
 		set_sw_port_config0(pc0_SRIO1x2_SRIO0x2);
 		set_sw_port_config1(pc1_PEI1x2_PEI2x2);
 		set_pipe_port_sel(pp_0_1_2_3);
 
-		if (pei1_mode)
-			release_reset(2);
 		if (pei2_mode)
 			release_reset(3);
 
 		/* Enable PEI1/PEI2 */
 		ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
-		reg_val |= (pei1_mode << 1) | (pei2_mode << 2);
+		reg_val |= (pei2_mode << 2);
 		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
 
 		set_srio_mode(SRIO0, srio0_ctrl);
@@ -1780,6 +1434,89 @@ pei_setup(unsigned int control)
 		ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
 		pr_debug("Done\n");
 		break;
+
+	default:
+		pr_err("axxia_pei: invalid PCI/SRIO config\n");
+		pr_err("pei_setup control=0x%08x pci_srio_sata_mode=%d\n",
+			control, pci_srio_sata_mode);
+
+	return -1;
+	}
+
+
+	update_settings();
+
+	return 0;
+}
+
+static int
+pei_setup_67xx(unsigned int control)
+{
+	unsigned int pci_mode;
+	unsigned int rc_mode;
+	unsigned int pei0_mode;
+	u32 reg_val = 0;
+
+	pci_mode = (control & 0x00c00000) >> 22;
+
+	pei0_mode = (control & 0x1);
+
+	rc_mode = (control & 0x80) >> 7;
+
+	if (pei0_mode)
+		disable_ltssm(PEI0);
+
+	/* enable serdes  reset */
+	enable_reset(0);
+
+	/* Disable pei0 interfaces */
+	ncr_read32(NCP_REGION_ID(0x115, 0), 0, &reg_val);
+	reg_val &= ~(0x1);
+	ncr_write32(NCP_REGION_ID(0x115, 0), 0, reg_val);
+	mdelay(100);		/* TODO: Why is this needed? */
+
+	switch (pci_mode) {
+
+	case 1:
+		/*
+		 * PEI0x2
+		 */
+		set_pei0_rc_mode(rc_mode);
+		set_pipe_port_sel(pp_0);
+		set_pipe_nphy(one_phy);
+
+		if (pei0_mode)
+			release_reset(0);
+
+		/* Enable PEI0 */
+		ncr_read32(NCP_REGION_ID(0x115, 0), 0x0, &reg_val);
+		reg_val |= (pei0_mode << 0);
+		ncr_write32(NCP_REGION_ID(0x115, 0), 0x0, reg_val);
+		break;
+
+	case 2:
+		/*
+		 * PEI0x1
+		 */
+		set_pei0_rc_mode(rc_mode);
+		set_pipe_port_sel(pp_0);
+		set_pipe_nphy(one_phy);
+
+		if (pei0_mode)
+			release_reset(0);
+
+		/* Enable PEI0 */
+		ncr_read32(NCP_REGION_ID(0x115, 0), 0x0, &reg_val);
+		reg_val |= (pei0_mode << 0);
+		ncr_write32(NCP_REGION_ID(0x115, 0), 0x0, reg_val);
+		break;
+
+	default:
+		pr_err("axxia_pei: invalid PCI/SRIO config\n");
+		pr_err("pei_setup control=0x%08x pci_mode=%d\n",
+			control, pci_mode);
+
+	return -1;
 	}
 
 
@@ -1787,7 +1524,6 @@ pei_setup(unsigned int control)
 
 	return 0;
 }
-EXPORT_SYMBOL(pei_setup);
 
 /*
   ------------------------------------------------------------------------------
@@ -1835,6 +1571,7 @@ get_v2_coefficients(struct device_node *pei_control)
 int axxia_pei_setup(unsigned int control, unsigned int force)
 {
 	int ret = 0;
+	int rv = -1;
 
 	mutex_lock(&axxia_pei_mux);
 
@@ -1855,7 +1592,12 @@ int axxia_pei_setup(unsigned int control, unsigned int force)
 	  assumption.
 	*/
 	if (0 == axxia_pei.initialized) {
-		if (0 != pei_setup(control)) {
+		if (is_5600)
+			rv = pei_setup_56xx(control);
+		else if (is_6700)
+			rv = pei_setup_67xx(control);
+
+		if (0 != rv) {
 			pr_err("pcie-axxia: PEI setup failed!\n");
 
 			ret = -EINVAL;
diff --git a/drivers/pci/host/pcie-axxia.c b/drivers/pci/host/pcie-axxia.c
index 7bc54e0..05430e3 100644
--- a/drivers/pci/host/pcie-axxia.c
+++ b/drivers/pci/host/pcie-axxia.c
@@ -976,13 +976,6 @@ static int axxia_pcie_probe(struct platform_device *pdev)
 	pp->root_bus_nr = 0;
 	pei_control = of_find_node_by_name(NULL, "pei_control");
 
-	/* LTSSM disable */
-	axxia_cc_gpreg_readl(pp, PEI_GENERAL_CORE_CTL_REG, &val);
-	msleep(100);
-	val &= ~(0x1);
-	axxia_cc_gpreg_writel(pp, val, PEI_GENERAL_CORE_CTL_REG);
-	msleep(100);
-
 	if (pei_control) {
 		control = of_get_property(pei_control, "control", NULL);
 
-- 
2.7.4



More information about the linux-yocto mailing list