Tool/software:
Hi
1. Current Understanding
Per the Linux 6.12 kernel driver and AM62x TRM documentation:
2. Application Requirements
3. Requested Assistance
Regards
ShunGang
Tool/software:
Hi
Per the Linux 6.12 kernel driver and AM62x TRM documentation:
P0_CPDMA_RX_CH_MAP
register, which is present in the AM335x’s CPSW3G.Regards
ShunGang
Hi,
Thank you for following up. To confirm our development environment in detail:
We are working with the Linux domain—specifically using SDK version 11.01.05.03 and running the Linux 6.12 kernel for our AM623-based system.
Hello Shungang,
Apologies for the delayed response as I was/am out of office this week.
A couple of initial questions
1. Are you developing on a custom board featuring AM623 processor?
Documentation Gap: While the SDK mentions flow-based interrupts, it provides no clear guidance on configuring port-to-flow mapping.
2. Can you share where in the SDK you have found the mention of "flow-based interrupts"? I assume it is in the SDK release notes but I would like the specific part of the release notes or from the TRM if that is where you are looking.
Below are some steps of using RX DMA flows that I personally haven't gotten the chance to try myself but could be helpful for your effort to implement packet interrupt separation per port. Please let me know if you encounter issues/have follow-up questions.
Example to set RX DMA flows to 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:~#
Hardware Difference: The CPSW3G in the AM623 appears to differ from that in the AM335x—it lacks theP0_CPDMA_RX_CH_MAP
register, which is present in the AM335x’s CPSW3G.
I need to check with colleague about this and if the CPSW3G features on AM335x should be different from AM623 or not.
-Daolin
Hello Daolin,
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
Hi Shungang,
I need to check with colleague about this and if the CPSW3G features on AM335x should be different from AM623 or not.
AM335x has similar CPSW3G hardware but it is not the same version so how things might have been handled in AM335x will differ in AM623.
Further investigation revealed that the command requires the `struct ethtool_ops.set_rxnfc()` interface to be implemented in the network card driver. However, this interface is not implemented in `am65-cpsw-ethtool.c`.Fullscreen123456789101112131415root@am62xx-evm:~# ethtool -l eth0Channel parameters for eth0:Pre-set maximums:RX: 8TX: 8Other: n/aCombined: n/aCurrent hardware settings:RX: 2TX: 8Other: n/aCombined: n/aroot@am62xx-evm:~# ethtool -N eth0 flow-type ether dst f4:84:4c:fc:1c:dc action 1rxclass: Cannot get RX class rule count: Operation not supportedCannot insert classification ruleXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXroot@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
Thanks for informing us that this operation does not seem to be supported. Upon further checking with "ethtool -i eth0", the "supports-rxnfc" parameter also doesn't show up, indicating the CPSW Linux driver hasn't implement RX flow classification as you mentioned.
Below are some references to RX flow from the AM62x TRM that I hope can be helpful. Unfortunately, we just don't seem to have a good guide step-by-step guide on how to use/setup the RX flows (between the TRM and SDK documentation). A colleague has mentioned using RX flows have been configured in EthFW before so I'm waiting to get more information about that.
As such, we're seeking explicit guidance on register-level configurations that would allow us to implement this functionality ourselves.
Please let me know if these references are somewhat helpful or specifically what other information you would need to implement the functionality.
-Daolin
Update:
I recently learned that there is a patch series, not yet fully upstreamed to Linux mainline, that implements support for the missing operation (including the set_rxnfc op that is missing): https://lore.kernel.org/all/20250514-am65-cpsw-rx-class-v4-0-5202d8119241@kernel.org/
Since the patch series is not yet upstreamed, there may be more changes going forward, but at least it will give some starting point.
-Daolin
Hi Daolin,
Hi Shunwang,
No problem. If you find a breakthrough in this please do let us know. My understanding is that you are looking to implement RX flow mapping based on port to separate out EtherCAT traffic and non-EtherCAT traffic?
-Daolin