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.

[参考译文] EVMK2H:以太网问题 EVMK2H

Guru**** 2551640 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/873250/evmk2h-ethernet-problem-evmk2h

器件型号:EVMK2H

我有一个 EVMK2H 板、其修订版为最后一个(4)。 我使用的是最后一个 SDK  06.01.00.08。

我有两个问题:

 1)  I have a MDIO issue (Ethernet link down intermitly)(MDIO 问题(以太网链路已互连))。 我这个论坛这个问题在一段时间内被问及、例如 https://e2e.ti.com/support/processors/f/791/t/574040?EVMK2H-Ethernet-link-down-intermittently

 IT 解决方案(更改 DTS 文件以禁用 PHY MDIO)不起作用。   我看到了像 e2e.ti.com/.../720199 这样的问题、并且在启动后输出消息、如"CPT  :无法获取时间戳"(无限期重复)。  

如何解决此硬件问题?

2) 2) 当我使用 UDP 传输(PC 是发送器、EVMK2H 是接收器)、并且传输速率约为400Mbit/s 时、我会丢失大量数据包。 我的问题就像 https://e2e.ti.com/support/processors/f/791/t/451659?K2HK-UDP-packet-loss-issue 。 但增加 Rx-queue 深度和 Rx-buffer-size 不起作用。 当我运行 iperf 测试或运行自定义应用程序时、我会放弃使用。

如何提高 UDP 事务的性能?

 

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

    您好、Pavel、

    这是 TI K2H 修订版4.0 EVM、对吧? 让我尝试使用 PLSDK 6.1、然后返回给您。

    雷克斯

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

    感谢您的支持。 是的、我有  TI K2H 修订版4.0 EVM。 我不明白 、您在 PLSDK 6.1中的意思是什么?  我 使用 Linux SDK http://software-dl.ti.com/processor-sdk-linux/esd/K2HK/latest/index_FDS.html

    它的版本为6.01.00.08。 我认为这是最后一个版本。 我在上一版本中遇到问题

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

    Pavel、

    是的、这是我刚才下载并将尝试的版本。 处理器 Linux SDK (PLSDK) 6.1.x.x

    雷克斯

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

    你好,张先生。

    您是否成功检查了具有以太网的 PLSDK 6.1? 感谢你的帮助 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    很抱歉、回答很慢。 我上周五外出了。 请参阅运行 PLSDK 6.1.0.8的 K2H 修订版4.0中随附的日志。 我在电路板上看不到以太网问题、我可以获得大约811 Mbit/s 的聚合吞吐量 所有映像和文件系统均来自预编译的 PLSDK 6.1。

    在日志中、您可以看到我首先将 uboot 升级到6.1版本、并在5分钟内执行了"日期"命令。 然后、iperf 在2个线程上使用 UDP 1分钟

    雷克斯

    e2e.ti.com/.../k2h_5F00_psdk61_2D00_netboot.log

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

    感谢您的回答

    我已检查您的日志。

    首先、我测试了 Uboot -它与之类似(我保存了最后一个版本)。

    接下来、我测试了我的 zImage (uname -a)  -它与之类似(最后版本)

    但我使用 bitbake 从 NAND 闪存启动 Linux、从而制作了自己的映像。

    我看到我的引导日志有一个不同之处

    我的日志:

    [0.451169] ti、keystone-SerDes 232a000.phy:ks2_gbe_serdes.bin 的直接固件加载失败、错误-2
    [0.451180] ti、梯形串行器/解串器232a000.phy:无法获取任何串行器/解串器初始化固件
    [0.451189] ti、keystone-SerDes 232a000.phy:Serdes procider init 失败-19
    [0.454833] keystone-navigator-qmss soc@0:qmss@2a40000:qmgr 开始队列0、队列数8192
    [0.454966] keystone-navigator-qmss soc@0:qmss@2a40000:添加了 qmgr 开始队列0、队列数量8192、reg_peek (ptrval)、reg_status (ptrval)、reg_config (ptrval)、reg_reg_reg_region (ptrval)、 reg_push (ptrval)、reg_pop (ptrval)
    [0.454977] keystone-navigator-qmss soc@0:qmss@2a40000:qmgr 启动队列8192、队列数8192
    [0.455092] keystone-navigator-qmss soc@0:qmss@2a40000:添加了 qmgr 开始队列8192、队列数量8192、reg_peek (ptrval)、reg_status (ptrval)、reg_config (ptrval)、reg_reg_reg_region (ptrval)、 reg_push (ptrval)、reg_pop (ptrval)
    [0.455221] keystone-navigator-qmss soc@0:qmss@2a40000:无法获取 pdsp 的固件
    [0.456850] keystone-navigator-qmss soc@0:qmss@2A40000:pdsp id 0未在范围 acc-l低位 启动

    您的日志:

    [0.416723] ti、keystone-SerDes 232a000.phy:init FW ks2_Gbe_SerDes.bin:版本3.3.0.2c
    [0.421480] keystone-navigator-qmss soc@0:qmss@2a40000:qmgr 启动队列0、队列数8192
    [0.42164] keystone-navigator-qmss soc@0:qmss@2a40000:添加了 qmgr 开始队列0、队列数量8192、reg_peek (ptrval)、reg_status (ptrval)、reg_config (ptrval)、reg_reg_region (ptrval)、 reg_push (ptrval)、reg_pop (ptrval)
    [0.421637] keystone-navigator-qmss soc@0:qmss@2a40000:qmgr 启动队列8192、队列数8192
    [0.421767] keystone-navigator-qmss soc@0:qmss@2a40000:添加了 qmgr 开始队列8192、队列数量8192、reg_peek (ptrval)、reg_status (ptrval)、reg_config (ptrval)、reg_reg_reg_region (ptrval)、 reg_push (ptrval)、reg_pop (ptrval)
    [0.421934] keystone-navigator-qmss soc@0:qmss@2a40000:为 PDSP 下载的固件文件 ks2_qmss_pdsp_acc48.bin

    但我在/lib/firmware 文件夹中看到了这些文件。 我需要在何处链接到该文件?

    我附上了完整的日志 filee2e.ti.com/.../0602.bootlog.txt 

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

    您好、Pavel、

    [0.451169] ti、keystone-SerDes 232a000.phy:ks2_gbe_serdes.bin 的直接固件加载失败、错误-2
    

    检查您的文件系统是否存在/lib/firmware/ks2_gbe_serdes.bin。 该错误表示文件丢失。 您可以从发行包中的 untared 文件系统中对其进行 tftp。

    雷克斯

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

    你好,张先生

    我检查了 NAND 文件系统。 一切都好。 我将所有文件夹/lib/firmware 从 SDK 的 targetNFS 文件夹复制到了我的 EVMK2H。

    但我也有同样的问题:  

    ks2_gbe_serdes.bin 的直接固件加载失败、错误-2 

    我想问您:  

    1.我是否可以使用功能齐全的以太网(但有时会断开链路、有时会丢弃 UDP 封包)?QMSS 和 Serdes 是否未进行配置?

    2.据我所知,文件 ks2_gbe_serdes.bin   只有在安装文件系统时才可用。  但是、根据我的日志 NAND 文件系统在 SerDes 和 qmss 尝试初始化后装载。 它是刚性的吗?

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

    上一帖子的附加内容。

    我解决 了 ks2_gbe_serdes.bin 的直接固件加载问题  -在我的/boot 文件夹中不是/boot/k2-fw-initrd.cpio.gz  文件。 (我认为在进行 bitbake 编译时不会复制它)。

    但是我已经删除了 UDP  和  netcp-1.0 2620110.netcp eth0:链接已关闭...

    我能在板上看到更多内容吗? 请回答我之前的问题1、非常有趣。

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

    再添加一个说明。

    我有  

    netcp-1.0 2620110.netcp eth0:链接已关闭 ...  误差

    当我使用活动的 HTTP 服务器(Lighttpd)处理重要的 UDP 流(EVMK2H 接收的350Mbit/s)(从 EVMK2H 发送的35Mbit/s)时。 它可能在一分钟或一小时内发生。 在空闲状态下、此错误很少发生。

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

    您好、Pavel、

    实际上、您的 eth0稍后会启动。  

    [16.313024] netcp-1.0 2620110.netcp eth0:链路向上- 1Gbps/全-流控制 Rx/TX
    [16.321014] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪

    由于您使用的是 ubi 引导、我也使用 了 PLSDK 6.1版本中的 Arago-base-tisdk-image-k2hk-evm.ubi 更改了我的引导、因此比较起来很容易。 附件是我的日志。 我能够获得929 Mbps 的吞吐量、其中一个线程中丢弃4个数据包、另一个线程中丢弃15个数据包。 我看不到 ehthernet 端口上下移动。 我在您的日志中注意到、您的流程与我的流程不同。 这是您修改过的内容吗? 您能否尝试使用 TI 的映像、看看它在您的设置中的行为、以排除在您的位烘烤中可能引入的问题。

    雷克斯

    e2e.ti.com/.../8321.k2h_2D00_psdk61_2D00_ubiboot.log

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

    你好,张先生。

    我已经尝试过您的建议、但我确信这是硬件问题。

    我对 EVMK2H 板进行了一些更改。:

     -将 MDC 时钟从2.5MHz 降低至100kHz

    -在 MDC 和 MDA 线路的末端添加下拉电阻器(1KOhm)(我将其焊接到 J2连接器上)

    -将220 Ω 电阻器更改为750 Ω 电阻器 R399和 R400  

    -将 R399和 R400的上拉电压更改为 3.3V

    我的系统现在更加稳健(奇怪的是、我的配置中 MDC 信号的 VOH 电压仅为1.5V)、但我的问题(链路断开)是重复出现的(但很少出现)。

    请帮助我在 Linux 内核中关闭 MDIO 接口(如以下文章 https://e2e.ti.com/support/processors/f/791/t/574040?EVMK2H-Ethernet-link-down-intermittently 中所述)。 但我不能遵循这一帖子指示、因为我遇到了这样的问题、例如"CPT :无法获取时间戳"(无限期重复)。

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

    你好,张先生

    请回答我有关在 EVMK2H 和最后一个 SDK 上禁用 MDIO 交换的可能性的问题。 我无法解决我的问题...

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

    您好、Pavel、

    按照 https://e2e.ti.com/support/processors/f/791/t/574040?EVMK2H-Ethernet-link-down-intermittently 中的说明禁用 MDIO 后、您是否会看到"CPT: Unable to obtain a time stamp messages"?  

    您是否尝试过中所述的修补程序  

    https://e2e.ti.com/support/legacy_forums/embedded/linux/f/354/t/526541

    虽然该线程的标题适用于 AM335、但 Cvetolin 的帖子中提供的补丁适用于 Keystone-2器件。

    雷克斯

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

    大家好、 张先生  

    我已经检查了我的 Linux 内核代码-这个补丁已经被使用了、它包含在这个(4.19)版本中。

    当我说有问题 "CPT:无法获取时间戳消息"时、我需要清除:Vhen 我 按照 https://e2e.ti.com/support/processors/f/791/t/574040?EVMK2H-Ethernet-link-down-intermittently 中的说明禁用 MDIO、以太网绝对不起作用(ping 不起作用)、并且定期显示消息 "CPT:无法获取时间戳消息"。  您可以尝试禁用电路板上的 MDIO 吗?

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

    您好、Pavel、

    我的板上没有显示以太网上下移动。 因此、我无法验证更改。 内核 NetCP 驱动程序中介绍了该变通办法、

    http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components/Kernel/Kernel_Drivers/Network/NetCP.html

    雷克斯

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

    你好,张先生

    是的、我知道您的电路板没有连接问题。 但我想请您提供帮助:您能使用 具有 最新 SDK 的 e2e.ti.com/.../574040 尝试禁用电路板上的 MDIO 吗? 我认为您将面临相同的问题(CPT:无法获取时间戳消息)、并将帮助我解决该问题。  

    谢谢

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

    您好、Pavel、

    是否可以尝试从 menuconfig 中禁用 CPT、并查看它是否适合您?

    雷克斯

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

    您好、Pavel、

    请改为使用以下更改来禁用 CPT。

    diff --git a/drivers/net/ti/cpsw.c b/drivers/net/ti/cpsw.c
    索引6bfd2db259..07aae4572e 100644
    -- a/drivers/net/ethernet/ti/cpsw.c
    ++ b/drivers/net/ethernet/ti/cpsw.c
    @@-1941、10 +1941、10 @@静态 int cpsw_no_open (struct net_device *ndev)
    RET = cpsw_fill_rx_channels (priv);
    如果(RET < 0)
    转至 ERR_clean;
    -
    +#if 0
    IF (CPT_register (cpsw->CPT))
    DEV_ERR(priv->dev,"Error registering CPTS device\n";
    -
    +#endif

    cpsw_restore (priv);
    @@-3816、13 +3816、13 @@静态 int cpsw_probe (struct platform_device *pdev)
    RET =-ENODEV;
    转至 clear_dma_ret;

    -
    +#if 0
    cpsw->CPTS = CPT_create (cpsw->dev、CPT_regs、cpsw->dev->of 节点);
    if (is_ERR (cpsw->CPT)){
    RET = PTR_ERR (cpsw->CPT);
    转至 clear_dma_ret;

    -
    +#endif
    ndev->IRQ = platform_get_IRQ (pdev、1);
    if (ndev->IRQ < 0){
    DEV_ERR(priv->dev,"error getting IRQ resources\n");

    雷克斯

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

    你好,张先生

    我曾尝试使用您的硫磷、但我遇到了一些问题

    我成功地使用 bitbake 重新构建了内核(它与预构建的 Processor SDK 类似、大小为4.3Mb)。 当我从默认配置 PSDK 构建内核时、我的映像大小大于8 MB、它会在"正在启动内核..."上挂起 。

    在图像中,当我可以使用 bitbake 进行重建时, cpsw.c 在配置中不使用(因为我在  Keystone 中将 netcp_ethss.c 用于类似用途)

    我还能做什么来禁用 MDIO?  

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

    你好,张先生

    我想我可以解决我的问题

    我已经使用函数 Davinci_MDIO_read 中的此修改从 PSDK 构建内核。 它修改重复错误的写入/读取 MDIO 事务

    我认为这是 MDIO 的已知硬件问题、在 Rev4 EVMK2H 中重复出现

    ------------------

    static int Davinci_mdio_read (struct MII_bus *总线、int phy_id、int phy_reg)
    {
    struct Davinci_mdio_data * data = bus->privi;
    u32 reg;
    u32 reg_write;
    int ret;
    u32 cntNewCycle = 0;
    
    if (phy_reg &~Phy_REG_MASK || phy_id &~Phy_ID_MASK)
    return -EINVAL;
    
    ret = pm_runtime_get_sync (data->dev);
    if (ret < 0){
    pm_runtime_put _nodley(data->dev);
    return;
    }
    
    reg_write =(useraccess_GO |<21)| userret_read (phy |<21)
    (phy_id << 16));
    
    while (1){
    NewCycle:
    RET = WAIT_for_USER_ACCESS (DATA);
    if (ret =-EAGAIN)
    CONTINUE;
    if (ret < 0)
    break;
    
    __raW_writel (reg_write、&data->user[0]);
    
    &rack_ret_ret_user=ret_access;&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=&rate=
    
    
    
    
    
    
    (reg & useraccess_data):-EIO;
    if (ret=-EIO)&&(cntNewCycle <3)
    {
    printk (Kern_info "**** ***** EIO ******** ");
    cntNewCycle ++;
    转至 NewCycle;
    }
    break;
    }
    
    pm_runtime_mark_last_busy (data->dev);
    Pm_runtime_put_autosuspend (data->dev);
    
    
    return;
    } 

    ------------

    我修改了 phy_device.c

    int genphy_update_link (struct phy_device * phydev)
    {
    int status;
    static int last_status_eth0=0;
    static int last_status_eth1=0;
    
    //链接状态被锁存为低电平,以便
    检测到瞬时链接*中断。
    请勿在轮询模式下双读状态*以检测此类短链路中断。
    //
    
    
    if (!phy_polling_mode (phydev)){
    status = phy_read (phydev、MII_BMSR);
    
    if (status < 0)
    return status;
    }
    
    // read link and autonegotation status */
    status = phy_read (phydev、MII_BMSR);
    if (status < 0)
    return status;
    
    if (if (status = 0)= nul_status
    
    
    
    
    
    
    
    
    = 0);phydev (status = 0)= nalent (status = 0>phydev_status = 0>phydev (status)
    
    if (strcmp (phydev->attached_dev->name、"eth1")=0)
    {
    if (last_status_eth1!=status)
    {
    last_status_eth1 = status;
    return 0;
    }
    last_status_eth1 = status;
    }
    
    
    if (status & BULL_STATUS)=0){s=phydev_link=0>phydev_connectedev<!-->phydev_name>phydev<!--kadov= status<!--}{</spaces>}}phydev_dev<!--}{</spaces>}phydev_dev_dev=0>phydev<!--}(phydev_connected<!--}(phydev_connected<!--}}-->
    phydev<!--}{</spaces>}}phydev_dev_dev<!--}phydev<!--}(phydev<!--}}(phydev_dev_