Tool/software:
SDK Version:0902
board: custom hardware
out custom board MAC <- sgmii -> switch MAC
Dear TI's experts,
We aim to establish network communication between our hardware and the peer switch via MAC-to-MAC connection. While we've modified the ETHFW and confirmed successful link-up, the Linux encounters errors and fails to boot.
Linux Client Error message:
[ 12.598152] ti_cpsw_proxy_client virtio4.ti.ethfw.ethdevice.-1.108: resending request
Linux Full Boot Log as below:
Change Record:
diff --git a/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_ethernet_config.c b/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_ethernet_config.c
index 5d513ea495..cd52ffb353 100755
--- a/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_ethernet_config.c
+++ b/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_ethernet_config.c
@@ -741,6 +741,27 @@ Board_STATUS Board_ethConfigCpsw9g(void)
/* On J721E EVM to use all 8 ports simultaneously, we use below configuration
RGMII Ports - 1,3,4,8. QSGMII ports - 2 (main),5,6,7 (sub)*/
+#ifdef BOARD_CMS_V2^M
+^M
+#ifdef BOARD_CMS_V2_SGMII_1G_PORT_2_ENABLE^M
+//#error 6 test ok ^M
+ portNum = 1;^M
+ status = Board_cpsw9gEthConfig(portNum, SGMII);^M
+ if(status != BOARD_SOK)^M
+ {^M
+ return BOARD_FAIL;^M
+ }^M
+#endif ^M
+^M
+#else^M
/* Configures the CPSW9G RGMII ports */
for(portNum = 0; portNum < BOARD_CPSW9G_PORT_MAX; portNum++)
@@ -769,7 +790,7 @@ Board_STATUS Board_ethConfigCpsw9g(void)
return BOARD_FAIL;
}
}
-
+#endif^M
return BOARD_SOK;
}
diff --git a/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_serdes_cfg.c b/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_serdes_cfg.c
index ff1b329621..80f20fba8d 100755
--- a/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_serdes_cfg.c
+++ b/PDK0902M_RTOS/pdk_jacinto_09_02_00_30/packages/ti/board/src/j721e_evm/board_serdes_cfg.c
@@ -573,3 +573,87 @@ Board_STATUS Board_serdesCfg(void)
return BOARD_SOK;
}
+^M
+#ifdef BOARD_CMS_V2
+static Board_STATUS Board_CfglhSgmii(void)^M
+{^M
+ CSL_SerdesResult result;^M
+ CSL_SerdesLaneEnableStatus laneRetVal = CSL_SERDES_LANE_ENABLE_NO_ERR;^M
+ CSL_SerdesLaneEnableParams serdesLane0EnableParams = {0};^M
+^M
+ memset(&serdesLane0EnableParams, 0, sizeof(serdesLane0EnableParams));^M
+^M
+ /* SGMII Config */^M
+ serdesLane0EnableParams.serdesInstance = (CSL_SerdesInstance)0;^M
+ serdesLane0EnableParams.baseAddr = CSL_SERDES_16G0_BASE;^M
+ serdesLane0EnableParams.refClock = CSL_SERDES_REF_CLOCK_100M;^M
+ serdesLane0EnableParams.refClkSrc = CSL_SERDES_REF_CLOCK_INT;^M
+ serdesLane0EnableParams.linkRate = CSL_SERDES_LINK_RATE_1p25G;^M
+ serdesLane0EnableParams.numLanes = 0x1;^M
+ serdesLane0EnableParams.laneMask = 0x2; // lane1^M
+ serdesLane0EnableParams.SSC_mode = CSL_SERDES_NO_SSC;^M
+ serdesLane0EnableParams.phyType = CSL_SERDES_PHY_TYPE_SGMII;^M
+ serdesLane0EnableParams.operatingMode = CSL_SERDES_FUNCTIONAL_MODE;^M
+ serdesLane0EnableParams.phyInstanceNum = SERDES_LANE_SELECT_CPSW;^M
+ serdesLane0EnableParams.pcieGenType = CSL_SERDES_PCIE_GEN3;^M
+^M
+ serdesLane0EnableParams.laneCtrlRate[1] = CSL_SERDES_LANE_FULL_RATE;^M
+ serdesLane0EnableParams.loopbackMode[1] = CSL_SERDES_LOOPBACK_DISABLED;^M
+^M
+ CSL_serdesPorReset(serdesLane0EnableParams.baseAddr);^M
+^M
+ /* Select the IP type, IP instance num, Serdes Lane Number */^M
+ CSL_serdesIPSelect(CSL_CTRL_MMR0_CFG0_BASE,^M
+ serdesLane0EnableParams.phyType,^M
+ serdesLane0EnableParams.phyInstanceNum,^M
+ serdesLane0EnableParams.serdesInstance,^M
+ SGMII_LANE_NUM);^M
+^M
+^M
+ result = CSL_serdesRefclkSel(CSL_CTRL_MMR0_CFG0_BASE,^M
+ serdesLane0EnableParams.baseAddr,^M
+ serdesLane0EnableParams.refClock,^M
+ serdesLane0EnableParams.refClkSrc,^M
+ serdesLane0EnableParams.serdesInstance,^M
+ serdesLane0EnableParams.phyType);^M
+^M
+ if (result != CSL_SERDES_NO_ERR)^M
+ {^M
+ return BOARD_FAIL;^M
+ }^M
+ /* Assert PHY reset and disable all lanes */^M
+ CSL_serdesDisablePllAndLanes(serdesLane0EnableParams.baseAddr, 2, serdesLane0EnableParams.laneMask);^M
+^M
+ /* Load the Serdes Config File */^M
+ result = CSL_serdesEthernetInit(&serdesLane0EnableParams);^M
+ /* Return error if input params are invalid */^M
+ if (result != CSL_SERDES_NO_ERR)^M
+ {^M
+ return BOARD_FAIL;^M
+ }^M
+^M
+ /* Common Lane Enable API for lane enable, pll enable etc */^M
+ laneRetVal = CSL_serdesLaneEnable(&serdesLane0EnableParams);^M
+ if (laneRetVal != 0)^M
+ {^M
+ return BOARD_FAIL;^M
+ }^M
+^M
+ return BOARD_SOK;^M
+}^M
+^M
+Board_STATUS Board_serdesCfglh(void)^M
+{^M
+ Board_STATUS ret;^M
+^M
+ ret = Board_CfglhSgmii();^M
+ if(ret != BOARD_SOK)^M
+ {^M
+ return ret;^M
+ }^M
+^M
+ return BOARD_SOK;^M
+}^M
+#endif^M
+
diff --git a/PDK0902M_RTOS/vision_apps/utils/ethfw/src/app_ethfw_freertos.c b/PDK0902M_RTOS/vision_apps/utils/ethfw/src/app_ethfw_freertos.c
index f0d8969c4b..e88eb31079 100644
--- a/PDK0902M_RTOS/vision_apps/utils/ethfw/src/app_ethfw_freertos.c
+++ b/PDK0902M_RTOS/vision_apps/utils/ethfw/src/app_ethfw_freertos.c
@@ -151,6 +151,18 @@ static EthAppObj gEthAppObj =
static Enet_MacPort gEthAppPorts[] =
{
#if defined(SOC_J721E)
+#ifdef BOARD_CMS_V2
+#ifdef BOARD_CMS_V2_SGMII_1G_PORT_2_ENABLE
+ ENET_MAC_PORT_2, /* SGMII */
+#endif
+
+#else
+
/* On J721E EVM to use all 8 ports simultaneously, we use below configuration
RGMII Ports - 1,3,4,8. QSGMII ports - 2,5,6,7 */
ENET_MAC_PORT_1, /* RGMII */
@@ -163,6 +175,7 @@ static Enet_MacPort gEthAppPorts[] =
ENET_MAC_PORT_6, /* QSGMII sub */
ENET_MAC_PORT_7, /* QSGMII sub */
#endif
+#endif
#elif defined(SOC_J784S4)
ENET_MAC_PORT_1, /* QSGMII main */
ENET_MAC_PORT_3, /* QSGMII sub */
@@ -175,6 +188,9 @@ static Enet_MacPort gEthAppPorts[] =
static Enet_MacPort gEthAppSwitchPorts[]=
{
#if defined(SOC_J721E)
+#ifdef BOARD_CMS_V2_SGMII_1G_PORT_2_ENABLE
+ ENET_MAC_PORT_2, /* SGMII */
+#else
ENET_MAC_PORT_3,
ENET_MAC_PORT_8,
#if defined(ENABLE_QSGMII_PORTS)
@@ -182,6 +198,7 @@ static Enet_MacPort gEthAppSwitchPorts[]=
ENET_MAC_PORT_5,
#endif
#endif
+#endif
#if defined(SOC_J784S4)
ENET_MAC_PORT_3,
@@ -275,6 +292,7 @@ static EthFw_VirtPortCfg gEthApp_virtPortCfg[] =
.numMacAddress = 1U,
.clientIdMask = ETHFW_BIT(ETHREMOTECFG_CLIENTID_AUTOSAR) | ETHFW_BIT(ETHREMOTECFG_CLIENTID_RTOS),
},
+#ifndef BOARD_CMS_V2
{
.remoteCoreId = IPC_MPU1_0,
.portId = ETHREMOTECFG_MAC_PORT_1,
@@ -297,6 +315,7 @@ static EthFw_VirtPortCfg gEthApp_virtPortCfg[] =
.numMacAddress = 1U,
.clientIdMask = ETHFW_BIT(ETHREMOTECFG_CLIENTID_RTOS),
},
+#endif
};
static EthFw_AllocCfg gEthApp_allocCfg[] =
@@ -546,7 +565,9 @@ int32_t appEthFwInit()
#elif defined(SOC_J784S4)
flags |= (ETHFW_BOARD_QENET_ENABLE | ETHFW_BOARD_SERDES_CONFIG);
#endif
-
+#ifdef BOARD_CMS_V2
+ flags = ETHFW_BOARD_SERDES_CONFIG;
+#endif
/* Board related initialization */
status = EthFwBoard_init(flags);
if (status != ENET_SOK)
@@ -948,36 +969,38 @@ static void EthApp_netifStatusCb(struct netif *netif)
{
Enet_MacPort macPort = ENET_MAC_PORT_1;
int32_t status;
-
- if (netif_is_up(netif))
+ if(0)//set no ENET_MAC_PORT_3 for gptp
{
- const ip4_addr_t *ipAddr = netif_ip4_addr(netif);
-
- appLogPrintf("Added interface '%c%c%d', IP is %s\n",
- netif->name[0], netif->name[1], netif->num, ip4addr_ntoa(ipAddr));
-
- if (ipAddr->addr != 0)
- {
-#if defined(ETHFW_DEMO_SUPPORT)
- /* Assign functions that are to be called based on actions in GUI.
- * These cannot be dynamically pushed to function pointer array, as the
- * index is used in GUI as command */
- EnetCfgServer_fxn_table[9] = &EthApp_startSwInterVlan;
- EnetCfgServer_fxn_table[10] = &EthApp_startHwInterVlan;
-
- /* Start Configuration server */
- status = EnetCfgServer_init(gEthAppObj.enetType, gEthAppObj.instId);
- EnetAppUtils_assert(ENET_SOK == status);
-
- /* Start the software-based interVLAN routing */
- EthSwInterVlan_setupRouting(gEthAppObj.enetType, ETH_SWINTERVLAN_TASK_PRI);
-#endif
- }
- }
- else
- {
- appLogPrintf("Removed interface '%c%c%d'\n", netif->name[0], netif->name[1], netif->num);
- }
+ if (netif_is_up(netif))
+ {
+ const ip4_addr_t *ipAddr = netif_ip4_addr(netif);
+
+ appLogPrintf("Added interface '%c%c%d', IP is %s\n",
+ netif->name[0], netif->name[1], netif->num, ip4addr_ntoa(ipAddr));
+
+ if (ipAddr->addr != 0)
+ {
+ #if defined(ETHFW_DEMO_SUPPORT)
+ /* Assign functions that are to be called based on actions in GUI.
+ * These cannot be dynamically pushed to function pointer array, as the
+ * index is used in GUI as command */
+ EnetCfgServer_fxn_table[9] = &EthApp_startSwInterVlan;
+ EnetCfgServer_fxn_table[10] = &EthApp_startHwInterVlan;
+
+ /* Start Configuration server */
+ status = EnetCfgServer_init(gEthAppObj.enetType, gEthAppObj.instId);
+ EnetAppUtils_assert(ENET_SOK == status);
+
+ /* Start the software-based interVLAN routing */
+ EthSwInterVlan_setupRouting(gEthAppObj.enetType, ETH_SWINTERVLAN_TASK_PRI);
+ #endif
+ }
+ }
+ else
+ {
+ appLogPrintf("Removed interface '%c%c%d'\n", netif->name[0], netif->name[1], netif->num);
+ }
+ }
}
#if defined(ETHFW_MONITOR_SUPPORT)