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.

[参考译文] AM623:AM623:CPSW3G:如何在独立 MAC 模式下将各自的 RX 流 ID 分配给 CPSW3G 的两个端口?

Guru**** 2535150 points
Other Parts Discussed in Thread: AM623

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1562624/am623-am623-cpsw3g-how-to-assign-respective-rx-flow-ids-to-the-two-ports-of-cpsw3g-in-independent-mac-mode

器件型号:AM623


工具/软件:

你(们)好

我们正在使用 AM623 处理器开发一个系统、并需要配置 CPSW3G 以太网子系统、以将网络数据包从特定端口定向到专用 RX 流 ID。 以下是我们的详细 要求:

1、当前理解

     根据 Linux 6.12 内核驱动程序和 AM62x TRM 文档:

  • AM62x 系列中的 CPSW3G 具有 8 个 TX DMA 通道 1 个 RX DMA 通道 分解 8 个 RX 流程 (0-7)。
  • 每个 RX 流都可以生成独立的中断、从而实现每个流 CPU 内核分配、从而提高性能

2.应用要求

我们需要实施以下措施:
  • 来自端口 1 的所有数据包仅由 RX 流 0 接收。
  • 来自端口 2 的所有数据包仅由 RX 流 1 接收。
这种分离将启用:
  • 每个端口的专用中断处理。
  • 用于数据包处理的 CPU 内核隔离。
  • 避免共享缓冲区争用和中断风暴。

3.请求的协助

我们在文档和硬件差异方面遇到了以下挑战:
  • 文档缺口 :虽然 SDK 提到基于流的中断,但它没有提供关于配置端口到流映射的明确指导。
  • 硬件差异 :AM623 中的 CPSW3G 与 AM335x 中的 CPSW3G 不同 — 它缺少寄存器,该寄存器存在于P0_CPDMA_RX_CH_MAP AM335x 的 CPSW3G 中。
我们迫切需要明确指导如何将入口端口映射到 AM623 中 CPSW3G 的流。 感谢你的帮助。

此致

Shungang

 

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

    您好、

    您能否确认您使用的是 Linux 还是 MCU+、RTOS、裸机域?

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

    您好、

    感谢您的跟进。 详细确认我们的开发环境:
    我们正在使用 Linux 域、特别是在基于 AM623 的系统中使用 SDK 版本 11.01.05.03 并运行 Linux 6.12 内核。


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

    您好 Shungang、  

    由于我本周不在办公室、因此延迟了回复、对此深表歉意。

    有几个初始问题

    1.您是在采用 AM623 处理器的定制电路板上进行开发吗?

    [报价 userid=“587843" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562624/am623-am623-cpsw3g-how-to-assign-respective-rx-flow-ids-to-the-two-ports-of-cpsw3g-in-independent-mac-mode 文档缺口 :虽然 SDK 提到基于流的中断,但它没有提供关于配置端口到流映射的明确指导。

    2.您能分享一下在 SDK 中提到“基于流的中断“的位置吗? 我假设它包含在 SDK 版本说明中、但我希望了解版本说明的特定部分或 TRM 中的特定部分(如果您需要了解该部分)。

    以下是使用 RX DMA 流的一些步骤、我个人没有机会自行尝试、但有助于您努力实现每个端口的数据包中断分离。 如果您遇到问题/有后续问题、请告诉我。

    • 使用 ethtool -L 命令可按以下方式启用多达 8 个 RX DMA 流:
      ethtool -L eth0 rx 8
    • 请注意、  在运行上述命令之前、应使用 ifconfig ethX 关闭 Linux 中的所有 CPSW3G 接口。
    • 与每个 RX DMA 流相关的中断将显示在 cat /proc/interrupts 命令的输出中。
    • 识别出与 RX DMA 流对应的 IRQ 编号后、可以使用 SMP 亲和性将中断绑定到一个或多个 CPU。 Linux 文档中介绍了该过程、其网址为:
      https://docs.kernel.org/core-api/irq/irq-affinity.html
    •  应为 SMP Affinity 工作而删除/禁用 irqbalance 二进制文件。 这可以使用以下命令来完成:
      systemctl stop irqbalance.service
    • 可以使用特定的 ethtool 命令(示例如下)、使用端口的 MAC 地址将流量从端口的 MAC 地址映射到特定的 RX DMA 流
      • ethtool -N eth0 流量类型 ether dst aa:bb:cc:dd:ee:ff 操作 5
      • 示例 将 RX DMA 流编号 5 分配给目标 MAC 地址为 aa:bb:cc:dd:ee:ff 的流量

    将 RX DMA 流设置为 8 的示例:

    root@am64xx-evm:~# ethtool -l eth0
    Channel parameters for eth0:
    Pre-set maximums:
    RX:       8
    TX:       8
    Other:     n/a
    Combined:    n/a
    Current hardware settings:
    RX:       1
    TX:       8
    Other:     n/a
    Combined:    n/a
    root@am64xx-evm:~# ip link set dev eth0 down
    [ 1030.925065] am65-cpsw-nuss 8000000.ethernet eth0: Link is Down
    root@am64xx-evm:~# ethtool -L eth0 rx 8
    [ 1042.528606] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 16
    root@am64xx-evm:~# ip link set dev eth0 up
    [ 1055.718707] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq)
    [ 1055.718739] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode
    root@am64xx-evm:~# [ 1058.789119] am65-cpsw-nuss 8000000.ethernet eth0: Link is Up - 1Gbps/Full - fx
    
    root@am64xx-evm:~# ethtool -l eth0
    Channel parameters for eth0:
    Pre-set maximums:
    RX:       8
    TX:       8
    Other:     n/a
    Combined:    n/a
    Current hardware settings:
    RX:       8
    TX:       8
    Other:     n/a
    Combined:    n/a
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.12.35-gf462b01e9ac7-dirty #7 SMP PREEMPT_RT Fri Aug 22 14:20:37 CDT 2025 aarch64x
    root@am64xx-evm:~#

    [报价 userid=“587843" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562624/am623-am623-cpsw3g-how-to-assign-respective-rx-flow-ids-to-the-two-ports-of-cpsw3g-in-independent-mac-mode 硬件差异 :AM623 中的 CPSW3G 与 AM335x 中的 CPSW3G 不同 — 它缺少寄存器,该寄存器存在于P0_CPDMA_RX_CH_MAP AM335x 的 CPSW3G 中。

    我需要与同事核实这一点、以及 AM335x 上的 CPSW3G 特性是否应与 AM623 不同。

    -道林

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

    您好、Daolin、   

    感谢您的跟进。 要解决第二个查询的问题:

    我们确认每个 RX 流都可以生成独立的中断、我们已通过两种方法进行了验证:

    1、我们对`am65-cpsw-nuss`驱动程序代码的审查表明、驱动程序会为每个单独的 RX 流程明确注册中断。
    2、`cat /proc/interrupts`的输出提供了具体确认,因为它清楚地显示了与每个 RX 流对应的单独中断条目。

    我们感谢您提供的建议、这些建议最初似乎可以解决我们的问题。 不幸的是,当我们试图实现它们时,我们收到了一个“不受支持的“错误。 `s调查显示、该命令要求在网卡驱动程序中实施“正确的 ethtool_ops.set_rxnfc()`接口“。 但是、此接口未在`am65-cpsw-ethtool.c`中实现。
    root@am62xx-evm:~# ethtool -l eth0
    Channel parameters for eth0:
    Pre-set maximums:
    RX:             8
    TX:             8
    Other:          n/a
    Combined:       n/a
    Current hardware settings:
    RX:             2
    TX:             8
    Other:          n/a
    Combined:       n/a
    root@am62xx-evm:~# ethtool -N eth0 flow-type ether dst f4:84:4c:fc:1c:dc action 1
    rxclass: Cannot get RX class rule count: Operation not supported
    Cannot insert classification rule

    因此、我们正在寻求有关寄存器级配置的明确指导、以便我们能够自己实现该功能。 具体而言、我们需要有关如何将特定入口端口映射到 AM623 CPSW3G 中寄存器级别的专用 RX 流的详细信息。

    与端口到流映射相关的任何文档引用、寄存器地址、位定义或配置序列都对我们的实现工作非常有帮助。

    感谢您的持续帮助。

    此致、
    Shungang

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

    尊敬的 Shungang:

    我需要与同事核实这一点、以及 AM335x 上的 CPSW3G 功能是否应与 AM623 不同。

    AM335x 具有相似的 CPSW3G 硬件、但其版本不同、因此 AM335x 在 AM623 中可能处理的内容会有所不同。

    进一步调查发现、该命令需要在网卡驱动程序中实施`struct ethtool_ops.set_rxnfc()`接口。 但是、此接口未在`am65-cpsw-ethtool.c`中实现。
    全屏
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12
    13
    14
    15
    Root@am62xx-EVM:~# ethtool -l eth0
    eth0 通道参数:
    预设最大值:
    接收: 8.
    TX: 8.
    其他: 不适用
    组合: 不适用
    当前硬件设置:
    接收: 2.
    TX: 8.
    其他: 不适用
    组合: 不适用
    root@am62xx-EVM:~# ethtool -N eth0 flow type ether dst f4:84:4c:fc:1c:dc 操作 1
    rxclass:无法获取 RX 类规则计数:不支持操作
    无法插入分类规则
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    [/报价]

    感谢您告知我们此操作似乎不受支持。 使用“ethtool -i eth0“进行进一步检查后、也不会显示“support-rxnfc"参数“参数、这表明 CPSW Linux 驱动程序未像您提到的那样实现 RX 流分级。  

    下面是一些有关 AM62x TRM 中 RX 流的参考资料、我希望这些参考资料会有所帮助。 遗憾的是、我们似乎没有很好的关于如何使用/设置 RX 流程的分步指南(在 TRM 和 SDK 文档之间)。 一位同事提到使用 RX 流之前已在 EthFW 中配置、因此我正在等待了解更多相关信息。

    • 12.3.1.4.6.13 以太网端口流控制
    • 12.3.1.4.6.13.1 以太网接收流控制
    • 11.1.4.3 PKTDMA/BCDMA — 输出事件生成
    • 11.1.4.12 PKTDMA — 接收操作
    • 14.7.3.2.1 PKTDMA_RFLOW_RFLOW_RFA_RFA_J_Register(DMA 控制器寄存器)
    因此、我们正在寻求有关寄存器级配置的明确指导、以便我们自己实现此功能。

    请告诉我这些参考信息是否有所帮助、或者具体说明您需要哪些其他信息来实现该功能。

    -道林

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

    更新:

    我最近了解到、有一个补丁系列尚未完全上流式传输到 Linux 主线、用于实现对缺失运算的支持(包括缺少的 set_rxnfc 运算): https://lore.kernel.org/all/20250514-am65-cpsw-rx-class-v4-0-5202d8119241@kernel.org/ 

    由于增补程序系列尚未上流化、可能会有更多更改、但至少它将提供一些起点。

    -道林

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

    尊敬的 Daolin:

    非常感谢您分享这一重要更新—这一补丁系列正是我们一直在寻找的起点!
    此致、
    Shungang
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:顺旺:  

    没问题。 如果您发现这方面的突破、请告知我们。 我的理解是、您希望基于端口实施 RX 流映射、以将 EtherCAT 流量和非 EtherCAT 流量分开?

    -道林