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.

[参考译文] AM5716:CPSW-3G 启用端口后、更改 MAC 地址会导致流量中断

Guru**** 2554340 points
Other Parts Discussed in Thread: AM69, AM5716

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1402940/am5716-cpsw-3g-after-enable-the-port-change-mac-address-will-cause-traffic-broken

器件型号:AM5716
主题中讨论的其他器件:AM69、TDA2、

工具与软件:

客户:阳光电源

SDK 6.3、A53 Linux

CPSW-3G 2端口在 Linux 中配置、

将以下命令添加到初始化脚本中

ifconfig eth0 up

ifconfig eth0 down

ifconfig eth0 hw ether 00:00:2d:3a:2a:28

ifconfig eth0 up

during bring up, if send 100Mbps traffic to the eth0

then after port up, this port can send out frame, but can not receive traffic,

during bring up, if does not send traffic to the eth0, after port up, send traffic to eth0, port can receive traffic


but if do following configuration during init:

ifconfig eth0 down

ifconfig eth0 hw ether 00:00:2d:3a:2a:28

ifconfig eth0 up

during brin up, send huge traffic to eth0, port can work well

read the ale table, after change MAC address, the MAC address can be seen in the ALE table,
suspect the RX DMA fifo damaged when change MAC address 

please help check this issue,

from the TRM, there is one group traffic stats register, in AM5716, there is no traffic stats register for each port?




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

    您好、Semon:

    只是想再次确认您是否使用 AM57x、我假设以下是一个拼写错误?

    SDK 6.3、A53 Linux

    AM57x 具有 A15内核。

    另一个问题是  

    在启动期间、如果向 eth0
    发送100Mbps 流量

    此陈述是否涉及 Linux 引导?

    您能否共享完整的引导日志?

    请使用"Insert"->"Image/Video/File"、然后单击"Upload words"(上传单词)。

    -若苏厄

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="504839" url="~/support/processors-group/processors/f/processors-forum/1402940/am5716-cpsw-3g-after-enable-the-port-change-mac-address-will-cause-traffic-broken/5370981 #5370981"]

    此陈述是否涉及 Linux 引导?

    您能否共享完整的引导日志?

    请使用"Insert"->"Image/Video/File"、然后单击"Upload words"(上传单词)。

    [报价]

    e2e.ti.com/.../env3_5F00_start_5F00_2024_2D00_08_2D00_19_5F00_19_2D00_01_2D00_49.log

    请查看客户阳光电源的日志

    问题在于、在 Linux 启动期间、将全速流量作为后台流量(ifconfig up/ifconfig down/change MAC address/ifconfig up/)发送到以太网端口、该操作过程将导致网络端口  

    异常,甚至在端口连接后删除后台流量,网络无法恢复

    此致

      Semon  

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

    Semon、

    您能否检查 MAC 地址更改后 IP 地址是否发生变化? 如果将相同的 IP 地址重新分配给该端口、它将正常工作吗?
    该板连接到了什么? 是 DHCP 服务器吗?

    -若苏厄

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否检查 MAC 地址更改后 IP 地址是否发生变化? 如果将相同的 IP 地址重新分配给该端口、它将正常工作吗?
    该板连接到了什么? 它是 DHCP 服务器吗?[/QUOT]

    您好、Josue  

       IP 地址是在更改 MAC 地址后配置的、开始时未配置 IP 地址

      将以下脚本添加到/etc/network/interfaces 后、将全速流量发送到端口并重新启动电路板。

       

    Linux 启动后、移除网络风暴流量、从 PC ping 此端口、ping 失败、

    在板的 eth0处捕获、帧可以发送到 PC、但无法接收来自外部的流量、

    此致

      Semon

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

    您好、Semon:  

    IP 地址是否与第一个 MAC 地址设置的 IP 地址相同?  

    他们是否尝试过在不关闭接口的情况下更改 MAC 地址?

    -若苏厄

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

    尊敬的 Semon:

    我的理论是 MAC 地址的快速变化导致 DHCP 服务器混淆、因为 MAC 地址通常是固定的。 我的建议也是这样

    1. 分配 IP 地址后、请勿在运行时更改 MAC 地址、或
    2. 如果需要在运行时更改 MAC 地址、则登录路由器或正在处理 DHCP 服务器的任何设备、观察 IP 地址与 MAC 地址的关联是否正确发生。 下面我的视频是该实验的一个示例

    原因如下:

    作为一个实验、我使用了 J784S4/AM69器件(AM57x 的下一代器件)并在您的终端执行了类似的实验来更改 MAC 地址。 下面随附的是一个视频。

    一些兴趣点是:

    1. 我从 MAC 地址00:55:22:33:44:FF 开始、IP 地址192.168.1.3
    2. 然后、我将 MAC 地址更改为00: 66 :22:33:44:FF 无切换 IP 地址
    3. 当路由器上的 DHCP 服务器看到两个与192.168.1.3相关联的 MAC 地址时、会出现一个短暂的时刻
    4. 新 IP 地址分配给 00: 66  192.168.1.8的:22:33:44:FF、旧 MAC 地址和 IP 地址被遗忘
    5. Ping 停止是因为 IP 地址不再是原始192.168.1.3

    事件3和事件4看起来是 一个潜在问题、根据路由器的智能程度以及地址列表更新的频率、这种行为可能在您的端有所不同

    e2e.ti.com/.../mac_5F00_address_5F00_change_5F00_experiment.webm

    免责声明:AM57x 和网络不是我的专业领域、因此请谨慎考虑我的理论。

    此致、

    Takuma

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

    我的理论是 MAC 地址的快速变化导致 DHCP 服务器混淆、因为 MAC 地址通常是固定的。 我的建议也是这样

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

    你好、Takuma

       在客户系统中、他们不使用 DHCP、而是静态配置 IP 地址、因此不应混淆 IP 和 MAC 地址

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

    根据新的测试结果、只需执行以下配置步骤、同时向 eth0端口发送1Gbps 流量、然后停止流量、  

    然后对该端口执行 ping 操作、ping 操作将失败

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

      ifconfig eth0 up

      ifconfig eth0 down

      ifconfig eth0 up

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

    此致

      Semon

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

    Josue、Takuma、您好

        根据客户测试、sdk6.3存在问题、但 SDK9.2似乎无法重新生成它、

        请帮助查看这两个 SDK 版本之间的代码更改

    谢谢

      Semon

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

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

      ifconfig eth0 up

      ifconfig eth0 down

      ifconfig eth0 up

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

    Josue、Takuma、您好

       我在 TDA2 EVM 板上验证了这些步骤、它是 Linux 4.19内核、和 AM5716一样、以上可以重新产生客户问题、

       请帮助在 AM5716 EVM 上验证它、这应该是问题、

       我还比较了 sdk6.3和 sdk9.2 CPSW-3G 驱动程序、在 sdk9.2中、它在以太网驱动程序上添加了 XDP 功能、  

       这种差异能否解决 XDP 提取的数据包丢失问题?

       请给出一些解释

    谢谢

      Semon  

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

    尊敬的 Semon:

     我在视频中向您展示的问题是静态分配的 IP 地址会发生。 同样、建议不要在运行时更改 MAC 地址、或者作为替代方案、您需要充分了解本地网络/路由器的设置方式、以便您可以更改使用情况、从而使每个 IP 地址都具有唯一的 MAC 地址。

    在推理方面、使用 静态分配的 IP 地址将保证 会发生此问题。 这是因为问题不是由于 IP 地址的动态分配造成的、而是由于 DHCP 服务器跟踪 IP 到 MAC 地址 的关联、获取了两个具有相同 IP 地址的 MAC 地址。 实质上、是我之前响应中的第3步。 当 手动分配相同的静态 IP 地址时、由于同一 IP 地址将有两个 MAC 地址、并且没有动态重新分配 IP 地址、因此网络堆栈无法确定发送数据的位置、因此您可以保证失败。 作为可能的解决方法、您可以将另一个未使用的 IP 地址分配给第二个 MAC 地址、或者以某种方式强制路由器或正在跟踪 MAC 到 IP 地址关联的任何设备忘记旧的 MAC 地址。

    启用 XDP 解决此问题 是有道理的、因为 XDP 所做的是绕过进行一些 IP 地址检查的网络堆栈、如下所示:

    此致、

    Takuma

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

    尊敬的 Semon:

    请分享有关客户要求和设置的更多详细信息?

    为什么它们关闭并重新启动端口?

    为什么更改 MAC 地址?

    即使 IP 地址是静态的、网络上是否仍有 DCHP 服务器?

    -若苏厄

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="504839" url="~/support/processors-group/processors/f/processors-forum/1402940/am5716-cpsw-3g-after-enable-the-port-change-mac-address-will-cause-traffic-broken/5377764 #5377764"]

    请分享有关客户要求和设置的更多详细信息?

    为什么它们关闭并重新启动端口?

    为什么更改 MAC 地址?

    即使 IP 地址是静态的、网络上是否仍有 DCHP 服务器?

    [报价]

    您好、Josue

      使端口上下移动、  

        客户应用程序将关闭端口并配置 MAC 地址和 IP 地址、然后启动端口

      在客户设计中、MAC 地址由客户应用程序配置、而不是在内核引导脚本中设置

      网络中没有 DHCP 服务器

      现在的问题是、即使在 Linux 引导后没有更改 MAC 地址、仅是 ifconfig down/up eth0端口、该问题也可能会重新出现、

      如果驱动程序在 SDK 9.2中发生更改、则可移植到 SDk6.3?

    此致

      Semon

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

    您好、Semon:  

    由于尚未针对6.03进行新的开发或更新、TI 不会重新进行移植、此 SDK 处于原样状态。 客户将不得不自己执行此操作或联系第三方进行移植。

    我想我在 AM57板上也发现了这个问题。 需要在接下来的几天内进行更多测试。

    此致!

    若苏厄

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我可能已经在 AM57板上复制了该问题。 将需要在接下来的几天内进行更多测试。

    您好、Josue

      在我的测试中、 我将 Linux PC 连接到 eth0端口、运行 packeth 来生成 EVM 上的 eth0的全速流量、然后 ifconfig down/up eth0、

      停止 packeth、然后尝试 ping eth0、此时 ping 失败、不太难重新生成

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

    您好、Josue

      首先、 正如 Semon 所说、这个问题在我的 AM5716主板中也已复制、 生成到 eth0和 ifconfig down/up、stop packeth、eth0 将会 ping faild 的全速流量。  

     同样的问题也出现在 Semon EVM 板上、同时使用6.3 SDK、所以您不认为它是错误???  

      硬件和软件全都交给您了。 如果出现问题、为什么需要第三方支持? 请说明?

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

    Semon、

    [报价 userid="507109" url="~/support/processors-group/processors/f/processors-forum/1402940/am5716-cpsw-3g-after-enable-the-port-change-mac-address-will-cause-traffic-broken/5381567 #5381567"]我将 Linux PC 连接到 eth0端口、运行 packeth 以生成发送至 EVM 上 eth0的全速流量、然后是 ifconfig down/up eth0、

    这正是我所做的。 我正在 咨询 开发团队的某个人以解释结果。

    我不确定数据包风暴是否是本版本的 CPSW-3G 支持的用例、但您可以从 此处打开的另一个线程中看出、这是 PRU 上软件支持的用例。

    Zmg、

    该 SDK 版本非常旧、不再进行维护。 经客户测试、这不再是较新 SDK 中的错误、因此我们建议改用较新的 SDK。  

    此致!

    若苏厄

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

    您好 Josue:

          虽然这是一个较旧版本、但它也是您发布的版本、此问题触发了我们使用的字段的很大一部分、、因此这对我们来说是一个错误。

    即使你不在6.3中保留它,你仍然需要解释和解决这个 versoin 中的问题。  

    • 对于现场问题、时钟正在滴答声

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

    您好 zmg、

    我理解。 我将在内部讨论这一点、然后再给您回复。

    此致!

    若苏厄

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

    尊敬的 Semon 和 zmg、

    当你等待 Josue 的回应时,你可以尝试一下这个实验吗? 根据此实验的结果 、您可以  轻松解决此问题。

    1. 登录到 负责处理 EVM 所在网络的路由器
    2. 应该有一个 表来查看 IP 地址与 MAC 地址的关联、如我上周的视频中所示
    3.  使用"ifconfig eth0 up"、"ifconfig eth0 down"、ifconfig eth0 up"进行实验。 还请在每条命令后注意"ifconfig (配置)"的输出、因为我们需要确保在网络启动时将 IP 地址分配给 eth0。
    4. 录制视频、了解路由器上的 MAC 地址表的此 IP 地址是如何响应这些命令的

     通过替换步骤3、可以对到目前为止已尝试的所有实验(包括数据包风暴场景)执行相同的操作。 如果我们看到路由器端的表看起来不错、并且没有重复的 IP 地址条目、那么我们可以关闭此理论。  

    我的理论仍然是、 正在尝试的实验将此 IP 地址弄混到路由器上的 MAC 地址表。 这是因为如果我的理论是正确的、那么无论使用静态 IP 地址、不使用 DHCP 服务器、还是网络只是关闭(您提到没有 DHCP 服务器、因此网络关闭后必须手动分配 IP 地址、并且不清楚是否执行了此步骤)、问题都会发生。

    解决此问题的 XDP 功能进一步支持了我的理论、因为这允许绕过整个网络堆栈、因此它也绕过 IP 和 UDP/TCP 层。

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="492487" url="~/support/processors-group/processors/f/processors-forum/1402940/am5716-cpsw-3g-after-enable-the-port-change-mac-address-will-cause-traffic-broken/5385649 #5385649"]

     通过替换步骤3、可以对到目前为止已尝试的所有实验(包括数据包风暴场景)执行相同的操作。 如果我们看到路由器端的表看起来不错、并且没有重复的 IP 地址条目、那么我们可以关闭此理论。  

    我的理论仍然是、 正在尝试的实验将此 IP 地址弄混到路由器上的 MAC 地址表。 这是因为如果我的理论是正确的、那么无论使用静态 IP 地址、不使用 DHCP 服务器、还是网络只是关闭(您提到没有 DHCP 服务器、因此网络关闭后必须手动分配 IP 地址、并且不清楚是否执行了此步骤)、问题都会发生。

    解决此问题的 XDP 功能进一步支持了我的理论、因为这允许绕过整个网络堆栈、因此它也绕过 IP 和 UDP/TCP 层。

    此致、

    [报价]

    你好、Takuma

       现在、我们可以在不更改 MAC 地址的情况下重新生成此问题、而使用全速流量向 eth0端口发送流量、仅 ifconfig eth0 down/ifconfig eth0 up 可以在 AM5716上重新生成、  

       不能在 SDK 9.2上重新产生此问题、在 JIRA 中应该有跟踪、根据代码、我想 sdk8.2也可以解决此问题

       请帮助内部检查以查看哪些更改可以解决此问题

    谢谢

      Semon

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

    您好、Semon:

    您能否检查以下提交是否可以解决该问题?
    https://github.com/torvalds/linux/commit/51302f77bedab8768b761ed1899c08f89af9e4e2

    此致、
    Siddharth。

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

    到 Siddharth Vadapalli :

        此更改在代码中同步。 您能有其他建议吗

    好的。

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

    在切换接口时、是否在不再接收通信之前在 Linux 中看到任何错误? 您是否还可以共享 Linux 源代码所基于的提交散列或标记?

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

    您好、 Siddharth

       我检查 Linux 源代码、下面是标签信息

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

    (base) Semon@Semon-u18:~/tda2/ti-processor-sdk-linux-am57xx-evm-06.03.00.106/board-support/linux-4.19.94+gitAUTOINC+be5389fd85-gbe5389fd85$ git log
    提交070d88d712b9e7f3a5e4e78078b496bc51665541 (head -> PROCESSOR-SDK-LOCAL、PROCESSOR-SDK-LINUX-4.19.y)
    作者:德州仪器(TI) SDK 构建器<>
    日期:Sun Apr 19 02:36:19 2020 +0000

    创建本地分支

    下面的提交用于这个本地分支、是用来实现的
    此 SDK:
    be5389fd85b69250aeb1ba477447879fb392152f。

    为了减小 SDK 安装程序的大小、只需提交一部分 git 提交
    历史被保存了。 远程分支和标签的链接也是如此
    此存储库副本中不存在。
    要解决此问题、请运行 unshallow-repositories.sh
    该示例脚本位于 SDK 的 bin 目录中

    该脚本可能需要几分钟时间、但您将获得的完整副本
    包括其全部 Git 历史的 Git 存储库。

    提交 be5389fd85b69250aeb1ba477447879fb392152f
    合并:58f4443a8c f8e155c279
    作者:Muralidharan Karicheri.
    日期:Tue Apr 14 06:12:18 2020 -0500

    将 PROCESSOR-SDK/PROCESSOR-SDK-LINUX 中的#223从 ptest-2081合并到 PROCESSOR-SDK-LINUX-4.19.y

    * commit 'f8e155c2798d11903af1931568b543f49bfc3A92':
    net: ethernet: prueth: fix emac_ndo_open()错误路径

    提交 f8e155c2798d11903af1931568b543f49bfc3A92
    作者:Aaron Kramer

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在切换接口时、在不再接收流量之前、在 Linux 中是否看到任何错误? 您是否还可以共享
    的提交散列值或标记

    执行 ifconfig down/up 命令后没有错误日志、  

    此致

      Semon

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

    Semon、

    在电子邮件中离线更新 Thread。

    "旧版 SDK 只能以有限的方式获得支持。
    客户应迁移到较新的 SDK
    因为它们不仅引入了更多功能、而且还引入了更多特性
    修复了旧版 SDK 中存在的问题(如前所述)
    在本例中为)。 因为客户可能不愿意
    迁移到更新的 SDK、并且考虑到该问题
    已修复、至少自 SDK 8.6起、我建议将平分两分
    对其他 SDK 版本进行测试来解决问题
    系统。 正如您在 E2E 中指出的那样
    似乎没有与问题相关的错误日志
    要成为无声的故障、就很难确定要在何处发生
    开始查看。 如果我必须猜测、我会说是
    RX DMA 通道拆解由于较大而超时
    正在接收的通信、很可能已全部填满
    缓冲器。 则可以尝试增加超时
    看看这是否解决了问题。" - Siddharth

    -若苏厄

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我想的话、我可以说是
    RX DMA 通道拆解由于较大而超时
    正在接收的通信、很可能已全部填满
    缓冲器。 则可以尝试增加超时
    看看这是否解决了问题。" - Siddharth [/报价]

    您好 Siddharth / Josue

       如果有太多数据包导致 RXDMA 超时、是否可以禁用该端口以便在关闭期间不接收数据包?

    此致

      Semon

         

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
     如果有太多数据包导致 RXDMA 超时、是否可以禁用该端口从而在关闭期间不接收数据包?

    Rx DMA 通道拆卸在"NDO_STOP"(即接口关闭时)上执行。
    即使是高流量负载、只要接口已启动、您似乎也不会遇到任何问题。
    仅当接口关闭后才会出现问题。
    因此、我猜到在接口时正在执行的 RX DMA 通道拆卸
    是超时、因为有大量数据包要清除。

    要检查是否是这种情况、您可以减少描述符的数量并查看其是否有所不同:

    diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
    index 0b7a3eb06a65..b7ae2d77f45e 100644
    --- a/drivers/net/ethernet/ti/cpsw.c
    +++ b/drivers/net/ethernet/ti/cpsw.c
    @@ -155,7 +155,7 @@ do {                                                                     \
                    cpsw->data.active_slave)
     #define IRQ_NUM                        2
     #define CPSW_MAX_QUEUES                8
    -#define CPSW_CPDMA_DESCS_POOL_SIZE_DEFAULT 256
    +#define CPSW_CPDMA_DESCS_POOL_SIZE_DEFAULT 64
     #define CPSW_FIFO_QUEUE_TYPE_SHIFT     16
     #define CPSW_FIFO_SHAPE_EN_SHIFT       16
     #define CPSW_FIFO_RATE_EN_SHIFT                20

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在"ndo_stop"上执行 RX DMA 通道拆卸、此时接口已关闭。
    即使是高流量负载、只要接口已启动、您似乎也不会遇到任何问题。
    仅当接口关闭后才会出现问题。
    因此、我猜到在接口时正在执行的 RX DMA 通道拆卸
    是超时、因为有大量数据包要清除。

    要检查是否是这种情况、您可以减少描述符的数量并查看其是否有所不同:

    您好、Siddharth

      我尝试将 DESC 编号减小到64、但问题未解决、  

      如果是由于接口关闭时缓冲器中的数据包太多而导致的、禁用此端口应该没问题、但我找不到用于禁用端口的寄存器

      在哪里更改超时值?

    此致

      Semon

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

    Semon、

    由于有两个接口:eth0和 eth1、其中只有一个被关闭、因此 DMA 通道拆解不会发生。
    您能否尝试将 eth0和 eth1拉低、然后将这两者都拉高、看看问题是否仍然存在?

    此致、
    Siddharth。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于有两个接口:eth0和 eth1、其中只有一个接口被关闭、因此不会发生 DMA 通道拆卸。
    您是否可以尝试关闭 eth0和 eth1、然后将两者都启动并检查问题是否仍然存在?[/QUOT]

    您好、Siddharth

       当 eth0和 eth1都为 down 时、两者都为 up 时、不会发生该问题

    此致

      Semon

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

    Semon、

    当 eth0和 eth1都关闭时、两者都打开时、不会发生此问题

    很高兴知道可以通过同时启动 eth0和 eth1来解决该问题。

    基于上述观察、在我看来、修复方法并不像看起来那样简单。
    drivers/net/ethernet/ti/cpsw.c 驱动器中没有与此问题相关的解决方法。
    相反、由于切换到后置 SDK 会导致意外结果、该问题已在后续 SDK 中得到"修复"
    drivers/net/ti/cpsw_new.c
    与以下提交相关联:
    https://github.com/torvalds/linux/commit/ec9bc5bedb2000902c3fcf3a844964d099231881

    因此、选项为:
    1.关闭两个接口并启动它们
    2.迁移到 cpsw_new.c 驱动程序(SDK 6.3中不存在该驱动程序)

    此致、
    Siddharth。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 将两个接口关闭并启动
    2.迁移到 cpsw_new.c 驱动程序(SDK 6.3中不存在)[/QUOT]

    您好、Siddharth

       这两个选项可能很难被客户接受、

       我有一个问题、如何禁用 DOWN 端口以从网络接收帧、我找不到这样的寄存器?

    此致

      Semon

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

    Semon、

    您能否测试以下差异?

    diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
    index 0b7a3eb06a65..b7cfb29e2aa7 100644
    --- a/drivers/net/ethernet/ti/cpsw.c
    +++ b/drivers/net/ethernet/ti/cpsw.c
    @@ -1610,6 +1610,7 @@ static int cpsw_fill_rx_channels(struct cpsw_priv *priv)
     static void cpsw_slave_stop(struct cpsw_slave *slave, struct cpsw_common *cpsw)
     {
            u32 slave_port;
    +       u32 mac_control;
    
            slave_port = cpsw_get_slave_port(slave->slave_num);
    
    @@ -1620,6 +1621,14 @@ static void cpsw_slave_stop(struct cpsw_slave *slave, struct cpsw_common *cpsw)
            slave->phy = NULL;
            cpsw_ale_control_set(cpsw->ale, slave_port,
                                 ALE_PORT_STATE, ALE_PORT_STATE_DISABLE);
    +       /* Command Idle */
    +       mac_control = readl_relaxed(&slave->sliver->mac_control);
    +       mac_control |= BIT(11);
    +       writel_relaxed(mac_control, &slave->sliver->mac_control);
    +       msleep(500);
    +       mac_control = readl_relaxed(&slave->sliver->mac_control);
    +       mac_control &= ~BIT(11);
    +       writel_relaxed(mac_control, &slave->sliver->mac_control);
            soft_reset_slave(slave);
     }
    

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

    这种差异无法正常工作、

    如果可以使用以下寄存器来禁用端口?、但我不知道哪个寄存器可用于该端口? 有6个 PORTCTL 寄存器

    端口关闭时可将端口状态设置为禁用?

    此致

      Semon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    端口关闭时可将端口状态设置为禁用?

    您好、 Siddharth

      我尝试通过以下步骤进行测试、流量可在停机/升机操作后恢复:

      也许可以将这些设置添加到驱动程序以确保正常运行

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

    ifconfig eth0 down
    devmem2 0x484d40 w 0

    ifconfig eth0 up
    devmem2 0x484d40 w 3

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

    此致

      Semon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="507109" url="~/support/processors-group/processors/f/processors-forum/1402940/am5716-cpsw-3g-after-enable-the-port-change-mac-address-will-cause-traffic-broken/5395809 #5395809"]

      我尝试通过以下步骤进行测试、流量可在停机/升机操作后恢复:

      也许可以将这些设置添加到驱动程序以确保正常运行

    [报价]

    驱动程序已实现了以下功能:
    cpsw_ndo_stop()
    => for_each_slave (priv、cpsw_slave_stop、cpsw)
    => cpsw_ale_control_set (cpsw->ale、slave_port、ale_port_state、ale_port_state_disable);

    因此、在客户的设置中似乎没有执行此路径。
    "for_each_slave"定义为:

    #define for_each_slave(priv, func, arg...)				\
    	do {								\
    		struct cpsw_slave *slave;				\
    		struct cpsw_common *cpsw = (priv)->cpsw;		\
    		int n;							\
    		if (cpsw->data.dual_emac)				\
    			(func)((cpsw)->slaves + priv->emac_port, ##arg);\
    		else							\
    			for (n = cpsw->data.slaves,			\
    					slave = cpsw->slaves;		\
    					n; n--)				\
    				(func)(slave++, ##arg);			\
    	} while (0)

    根据器件树中是否设置了"DUAL_EMAC"、宏的扩展有所不同。
    这可能会在这里产生影响、从而导致该问题。

    此致、
    Siddharth。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据是否在设备树中设置了"Dual_EMAC"、宏扩展方式有所不同。
    这可能会在此处产生影响、从而导致此问题。

    尊敬的 Siddhart

      符号  

    -------

       cpsw_ale_control_set (cpsw->ale 、slave_port、
             ALE_PORT_STATE ALE_PORT_STATE_DISABLE);
    --------------------------------------------------------
    端口状态不会变为0、而是为3、  
    因此、我想 cpsw_ale_control_set 没有正确实现
    此致
      Semon
    --------------------------------------------------------
    静态 void cpsw_slave_stop (结构 cpsw_slave *从属结构 cpsw_common * cpsw)
      U32 SLAVE_PORT

      slave_port = cpsw_get_slave_port (slave->slave_num);

      如果(!slave->phy)
        返回
      PHY_STOP (SLAVE->PHY);
      PHY_DISCONNECT (SLAVE->PHY);
      SLAVE->phy =
      cpsw_ale_control_set (cpsw->ale、slave_port、
             ALE_PORT_STATEALE_PORT_STATE_DISABLE);
      cpsw_sl_reset (slave->mac_SL100);
      cpsw_sl_ctl_reset (slave->mac_SL);
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Semon、  

    您能否与客户分享 DTS 设置?

    -若苏厄

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

    我们代码中的 dts 与您发布的  SDK 6.3相同,并且"dual_emac"也设置在 device-tree 中

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

    您好、Siddharth

      在我对 TDA2P EVM 的测试中、如果发送的流量小于480Mbps、则在 ifconfig eth0 down/up 操作后、eth0可以恢复、 但如果流量大于500Mbps、

      eth0无法恢复、这可能与 DMA 缓冲区问题有关吗?

      抱歉、我之前犯了一个错误、端口1在 eth0关闭时已被禁用、此时流量无法输入到 CPSW-3G、

      问题应该是 DMA 缓冲器管理器问题或 Linux 栈缓冲器问题

       

    此致

      Semon

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

    您好、Semon:

    启用中断节奏是否有所不同?

    ethtool -C eth0 rx-usecs 250

    此致、
    Siddharth。

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

    Semon、

    请检查 Linux 源代码中是否存在以下提交:
    github.com/.../871e846585919adf727f21398f433fd424b6f0e1

    此致、
    Siddharth。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="532086" url="~/support/processors-group/processors/f/processors-forum/1402940/am5716-cpsw-3g-after-enable-the-port-change-mac-address-will-cause-traffic-broken/5399079 #5399079"]
    请检查 Linux 源代码中是否存在以下提交:
    github.com/.../871e846585919adf727f21398f433fd424b6f0e1

    Siddharth

       我试过它,但它不起作用

    此致

      Semon

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

    我已经标记了 Siddharth 的答案、很好地总结了 该线程的状态。  

    将以下选项作为相关操作:

    因此、选项为:
    1.关闭两个接口并启动它们
    2.迁移到 cpsw_new.c 驱动程序(SDK 6.3中不存在该驱动程序)
    [报价]

    此致!

    若苏厄