This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VM:TDA4VM RTOS 0806:Ethfw Loopbacken 测试

Guru**** 1810440 points
Other Parts Discussed in Thread: TDA4VM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1431855/tda4vm-tda4vm-rtos-0806-ethfw-loopbacken-test

器件型号:TDA4VM

工具与软件:

您好!
 TDA4VM RTOS 0806
  当我将 loopbacken 设置为 true [将端口2设置为 SGMII]时、按所示

void CpswMacPort_initCfg (Cpsw3874 Port_Cfg * macPortCfg)
macPortCfg->loopbackEn = true
macPortCfg->crcType = ENET_CRC_Ethernet
macPortCfg->rxMTu = CPSW_MACPORT_RX_MTU_DEFAULT
macPortCfg->passPriorityTaggedUnchanged = false
macPortCfg->vlanCfg.portPri = 0u
macPortCfg->vlanCfg.portCfi = 0u
macPortCfg->vlanCfg.portVID = 0u
macPortCfg->txPriorityType = ENET_EXEMPTY_PRI_TYPE_FIXED
macPortCfg->sgmiiMode = ENET_MAC_SGMIIMODE_INVALID
}
我的 EVM 硬件:
  serdes0 lane1无连接。  

MCU2_0运行成功。 注册表为:
已映射地址0xffa2271000处的存储器。
在地址0x0C000210 (0xffffff2271210)处读取:0x00000010
/dev/mem 打开。
存储器映射在地址0xffbb0f8000处。
在地址0x0C000214 (0xffbb0f8214)处读取:0x00000031
我的硬件:
  serdes0 lane1 无连接。
MCU2_0运行被阻止。
日志:
[MCU2_0] 16.979613 s:01:80:C2:00:00:0e
[MCU2_0] 16.979663 s:01:1b:19:00:00:00
[MCU2_0] 16.979931s:EnetMcm:主 NAVSS 上的 CPSW_9G
[MCU2_0] 16.990179s:MDIO_open:MDIO 手动模式已启用
在这里停留......

注册表为:
已映射地址0xffa2271000处的存储器。
在地址0x0C000210 (0xffffff2271210)处读取:0x00000000
/dev/mem 打开。
存储器映射在地址0xffbb0f8000处。
在地址0x0C000214 (0xffbb0f8214):0x00000000处读取
硬件重新引导时、  
已映射地址0xffa2271000处的存储器。
在地址0x0C000210 (0xffffff2271210)处读取:0x00000010
/dev/mem 打开。
存储器映射在地址0xffbb0f8000处。
在地址0x0C000214 (0xffffff0f8214):0x00000038、、、、某些时间3C 处读取
使用了相同的 SD 卡和映像。
是否有任何因素可能导致此问题?
谢谢
dongzhang
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    团队的一部分正在度假.. 请预计下周早些时候作出回应。

    此致、

    基尔西  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现死区环路。

    static int32_t Cpsw_isPortLinkUp(Cpsw_Handle hCpsw,
                                     Enet_MacPort macPort,
                                     bool *linked)
    {
        int32_t status = ENET_SOK;
    #if ENET_CFG_IS_ON(CPSW_SGMII)
        EnetPer_Handle hPer = (EnetPer_Handle)hCpsw;
        CSL_Xge_cpsw_ss_sRegs *ssRegs = (CSL_Xge_cpsw_ss_sRegs *)hPer->virtAddr2;
        uint32_t portNum = ENET_MACPORT_NORM(macPort);
        uint32_t portId = ENET_MACPORT_ID(macPort);
        EnetMod_Handle hMacPort = hCpsw->hMacPort[portNum];
        Enet_IoctlPrms prms;
        EnetMacPort_GenericInArgs macPortInArgs;
        EnetMacPort_Interface mii;
        EnetMac_LayerType enetLayer;
        EnetMac_SublayerType enetSublayer;
        bool sgmiiLink;
        uint32_t qsgmiiId;
    
        ENETTRACE_VAR(portId);
        status = EnetSoc_getMacPortMii(hPer->enetType, hPer->instId, macPort, &mii);
        ENETTRACE_ERR_IF(status != ENET_SOK, "Port %u: Failed to get ENET_CTRL: %d\n", portId, status);
    
        if (status == ENET_SOK)
        {
            enetLayer = mii.layerType;
            enetSublayer = mii.sublayerType;
    
            if (enetLayer == ENET_MAC_LAYER_GMII)
            {
                if (enetSublayer == ENET_MAC_SUBLAYER_SERIAL)
                {
                    /* We have link status in CPSW subsystem regs as well as in SGMII regs,
                     * check SGMII regs as link status in CPSW subsystem regs is only for
                     * QSGMII link status */
                    macPortInArgs.macPort = macPort;
                    ENET_IOCTL_SET_INOUT_ARGS(&prms, &macPortInArgs, &sgmiiLink);
                    status = EnetMod_ioctl(hMacPort, CPSW_MACPORT_IOCTL_GET_SGMII_LINK_STATUS, &prms);
                    ENETTRACE_ERR_IF(status != ENET_SOK,
                                     "Port %u: Failed to get SGMII link state: %d\n", portId, status);
                    *linked = sgmiiLink;
                    printf("ZD goto ... func %s macPort %d ...Cpsw_isPortLinkUp IOCTL done sgmiiLink  %d\n",__func__,macPort,sgmiiLink);
    
                }
                else if ((enetSublayer == ENET_MAC_SUBLAYER_QUAD_SERIAL_MAIN) ||
                         (enetSublayer == ENET_MAC_SUBLAYER_QUAD_SERIAL_SUB))
                {

    输出日志:
    [MCU2_0]     61.143056 s: zd goto ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL done sgmiiLink   0
    [MCU2_0]     61.143127 s: zd 转到 ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL 完成 sgmiiLink   0
    [MCU2_0]     61.472563 s: zd 转到 ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL 完成 sgmiiLink   0
    [MCU2_0]     61.472635 s: zd 转到 ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL 完成 sgmiiLink   0
    ..........


    dongzhang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的板其他寄存器:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、

    1.我发现我们的板是100Mhz 时钟。 IC : CDCI6214RGET , 可以删除吗?  影响将是什么?  

    2.现在、 我们需要19.2Mhz 时钟、但我们将其更改为20Mhz、  会有什么影响?  其他一些模块...

    3.我发现 CSL_serdes3.c func: CSL_serdesRefclkSel 没有设置为20Mhz , 是否有修补程序为20Mhz ?

    非常感谢。

    dongzhang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    您需要更改20MHz 的引导模式引脚。

    有关引导模式引脚设置、请参阅 TRM。  

    此致、  

    Sudheer

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    硬件辅助我已将20Mhz 更改为19.2MHz、这与 EVM 相同
    然后我改变了:

    /* SGMII 配置*/
    serdesLane0EnableParams.serdesInstance =(CSL_SerdesInstance) 0;//AUTOX_LUOHUI_SGMII_SEDERS_INSTANCE
    serdesLane0EnableParams.baseAddr = CSL_SERDES_16G0_BASE;
    serdesLane0EnableParams.refclock = CSL_SERDES_REF_CLOCK_19p2M;/CSL_SERDES_REF_CLOCK_100M
    serdesLane0EnableParams.refClkSrc = CSL_SERDES_REF_CLOCK_INT;
    serdesLane0EnableParams.linkRate = CSL_SERDES_LINK_RATE_1p25G;
    serdesLane0EnableParams.numLanes = 0x1
    serdesLane0EnableParams.laneMask = 0x2// lane1
    serdesLane0EnableParams.ssc_mode = CSL_SERDES_NO_SSC
    serdesLane0EnableParams.phyType = CSL_SERDES_PHY_TYPE_SGMII;
    serdesLane0EnableParams.operatingMode = CSL_SERDES_FUNCTIONAL_MODE
    serdesLane0EnableParams.phyInstanceNum = SERDES_LANE_SELECT_CPSW
    serdesLane0EnableParams.pcieGenType = CSL_SERDES_PCIe_Gen3;

    serdesLane0EnableParams.laneCtrlRate[1]= CSL_SERDES_LANE_FULL_RATE;
    serdesLane0EnableParams.loopbackMode[1]= CSL_SERDES_LOOPBACK_DISABLED
    我是否需要修改这些位置?

    谢谢
    dongzhang
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    [报价 userid="564217" url="~/support/processors-group/processors/f/processors-forum/1431855/tda4vm-tda4vm-rtos-0806-ethfw-loopbacken-test/5492810 #5492810"] serdesLane0EnableParams.refclock = CSL_SERDES_REF_CLOCK_19p2M;//CSL_SERDES_REF_CLOCK_100M[/QUOT]

    参考时钟为100M 不是19.2

    此外、确保 Serdes0未从 u-boot 和 Linux 配置。  

    此外、请确保串行器/解串器时钟配置为  CSL_SERDES_REF_CLOCK_INT、100M。

    请参阅 ethfw/utils/board/j721e/中的 board_j721e_evm.c 文件。

    此致、  

    Sudheer

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢!
    我把它改回来了
    serdesLane0EnableParams.refclock
      =  CSL_SERDES_REF_CLOCK_100M;
    好的、 我现在使用了 TDA4VM EVM、并使用19.2作为 SERDES 基本时钟。
    (使用 WKUP_OSC0_XI WKUP_OSC0_XO 19.2Mhz)

    uboot 和 Linux 使用了默认的0806映像。  

    在 board_j721e_evm.c 中 、我找到了此配置:

    static void EthFwBoard_configSierra0Clks(void)
    {
        uint32_t moduleId = TISCI_DEV_SERDES_16G0;
        uint32_t clkRateHz = 100000000U;
        uint32_t clkId[] = {
            TISCI_DEV_SERDES_16G0_CORE_REF1_CLK,
            TISCI_DEV_SERDES_16G0_CORE_REF_CLK};
        uint32_t clkParId[] = {
            TISCI_DEV_SERDES_16G0_CORE_REF1_CLK_PARENT_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK,
            TISCI_DEV_SERDES_16G0_CORE_REF_CLK_PARENT_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK};
        uint32_t i;
        int32_t status;
    
        for (i = 0U; i < ENET_ARRAYSIZE(clkId); i++)
        {
            status = Sciclient_pmSetModuleClkParent(moduleId, clkId[i], clkParId[i], SCICLIENT_SERVICE_WAIT_FOREVER);
            if (status != CSL_PASS)
            {
                appLogPrintf("Failed to reparent clk %u: %d\n", clkId[i], status);
                EnetAppUtils_assert(false);
            }
    
            EnetAppUtils_clkRateSet(moduleId, clkId[i], clkRateHz);
        }
    
        EnetAppUtils_setDeviceState(moduleId, TISCI_MSG_VALUE_DEVICE_SW_STATE_ON, 0U);
    }
    

    那么我是否应该更改 val "uint32_t clkParId[]={}"? 它应该设置什么值?

    I 测试 val:

    uint32_t clkParId[]={
    //TISCI_DEV_SERDES_16G0_CORE_REF1_CLK_PARTNER_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK、
    //TISCI_DEV_SERDES_16G0_CORE_REF_CLK_PARTNER_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK};
    TISCI_DEV_SERDES_16G0_CORE_REF1_CLK_PARTNER_GLUELOGIC_HFOSC0_CLKOUT
    TISCI_DEV_SERDES_16G0_CORE_REF_CLK_PARTNER_GLUELOGIC_HFOSC0_CLKOUT};

     日志。

    [MCU2_0]     17.961974 s: APP: Syncing with 5 CPUs ... Done !!!
    [MCU2_0]     17.962169 s: REMOTE_SERVICE: Init ... !!!
    [MCU2_0]     17.963853 s: REMOTE_SERVICE: register service name [com.ti.remote_service_test]
    [MCU2_0]     17.963928 s: REMOTE_SERVICE: Init ... Done !!!
    [MCU2_0]     17.963969 s: REMOTE_SERVICE: register service name [rtos_test]
    [MCU2_0]     17.964007 s: REMOTE_SERVICE: register service name [com.ti.perf_stats]
    [MCU2_0]     17.964045 s: ETHFW: Init ... !!!
    [MCU2_0]     17.964090 s: ZD goto ... func EthFwBoard_init
    [MCU2_0]     18.001078 s: PMLIBClkRateSet failed for clock Id = 42
    [MCU2_0]     18.001171 s: Assertion @ Line: 190 in enet_apputils_k3.c: false : failed !!!

    谢谢

    dongzhang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    如果您要使用具有19.2M 的外部时钟的串行器/解串器、则需要将串行器/解串器时钟配置为19.2M、并且时钟源不应为  CSL_SERDES_REF_CLOCK_INT。

    那么可以使用上述时钟配置。  

    如果您要使用具有内部时钟的串行器 /解串器、则需要使用与 ethfw/utils/board/j721e/board_j721e_evm.c 中默认值相同的100m 和时钟

    注意:

    我们尚未使用 TI SDK 的外部时钟源测试串行器/解串器。

    此外、默认情况下 U-boot、Linux 会将串行器/解串器0配置为 PCIe+ QSGMII。  

    当您希望从 RTOS 进行配置和使用时、请确保不应从 U-boot 和 Linux (从器件树禁用节点)配置 SerDes0。  

    此致、  

    Sudheer

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    我们要使用 WKUP_OSC0作为串行器/解串器时钟 PLL 的时钟源。 该 WKUP_OSC0连接到19.2M 晶体振荡器。
    19.2M、通过图中所示的路径、生成100MHz、达到 CMN_REFCLK1_INT、并提供给串行器/解串器。
    这种行为合适吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    [报价 userid="605881" URL"~/support/processors-group/processors/f/processors-forum/1431855/tda4vm-tda4vm-rtos-0806-ethfw-loopbacken-test/5493106 #5493106"]我们要使用 WKUP_OSC0作为串行器/解串器时钟 PLL 的时钟源。 该 WKUP_OSC0连接到19.2M 晶体振荡器。
    19.2M、通过图中所示的路径、生成100MHz、达到 CMN_REFCLK1_INT、并提供给串行器/解串器[/QUOT]

    从上述路径来看、串行器/解串器似乎是使用内部时钟馈送的。  

    因此、您必须对串行器/解串器使用100MHz 时钟。 使用上述共享/建议的串行器/解串器配置和串行器/解串器时钟。  

    此外、请确保在 U-boot 和 Linux 下禁用串行器/解串器配置。  

    此致、  

    Sudheer