PROCESSOR-SDK-AM64X: Duplicate Packets are not removed with HSR PRU Firmware

Part Number: PROCESSOR-SDK-AM64X
Other Parts Discussed in Thread: TEST2

Tool/software:

Hello Ti, 

I'm currently testing with the release : 11.00.09.04

I found that there are two IRQs coming from queues from eth1 and eth2 for HSR packets. But the duplicated packets should be removed by the PRU firmware, I would expect only one IRQ. 

Here is the procedure : 

On u-boot : 

=> setenv name_overlays 'ti/k3-am642-evm-icssg1-dualemac.dtbo'
=> printenv name_overlays
=> saveenv

Disable Network Manager : 

systemctl disable dhcpcd.service
systemctl disable NetworkManager.service
systemctl disable systemd-resolved.service
systemctl disable systemd-networkd.service
sync
reboot


Set Link speed to
ethtool -s eth1 speed 100 duplex full
ethtool -s eth2 speed 100 duplex full

Enable HSR with the script proposed on ti doc + up eth1 and eth2

More details :
root@am64xx-evm:~# cat hsr_script_ti.sh
#!/bin/sh

#For non offload - sh hsr_setup.sh hsr_sw <INTF_A> <INTF_B> <HSR_INTF_IP_ADDR>
#For offload - sh hsr_setup.sh hsr_hw <INTF_A> <INTF_B> <HSR_INTF_IP_ADDR>

if [ "$#" != "4" ]
then
        echo "$0 <hsr_sw/hsr_hw> <intf1> <intf2> <ip addr>"
        exit
fi

if [ "$1" != "hsr_sw" ] && [ "$1" != "hsr_hw" ]
then
        echo "$0 <hsr_sw|hsr_hw>"
        exit
fi

if=hsr0

ifa=$2
ifb=$3

ip=$4
mac=$(ifconfig "$ifa" | grep ether | cut -d " " -f 10)

echo "ip=$ip"
echo "if=$if"
echo "mac=$mac"
echo "slave-a=$ifa"
echo "slave-b=$ifb"

ip link set hsr0 down
ip link delete hsr0  2> /dev/null

if [ "$1" = "hsr_hw" ]
then
        ethtool -k "$ifa" | grep hsr
        ethtool -K "$ifa" hsr-fwd-offload on
        ethtool -K "$ifa" hsr-dup-offload on
        ethtool -K "$ifa" hsr-tag-ins-offload on
        ethtool -K "$ifa" hsr-tag-rm-offload on
        ethtool -k "$ifa" | grep hsr

        ethtool -k "$ifb" | grep hsr
        ethtool -K "$ifb" hsr-fwd-offload on
        ethtool -K "$ifb" hsr-dup-offload on
        ethtool -K "$ifb" hsr-tag-ins-offload on
        ethtool -K "$ifb" hsr-tag-rm-offload on
        ethtool -k "$ifb" | grep hsr
fi

ip link set dev "$ifa" address "$mac"
ip link set dev "$ifb" address "$mac"

ip link add name $if type hsr slave1 "$ifa" slave2 "$ifb" supervision 45 version 1

sleep 3

ip addr add "$ip"/24 dev $if
ip link set $if up

ip link set $ifa up                            
sleep 1                                       
                                            
ip link set $ifb up                                                                   
sleep 1


Here is what I've observed :

***************************************************************
***************************************************************
root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full
ed 100 duplex fullroot@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full
root@am64xx-evm:~# 
root@am64xx-evm:~# 
root@am64xx-evm:~# 
root@am64xx-evm:~# ./hsr_script_ti.sh hsr_hw eth1 eth2 192.168.1.19                            
ip=192.168.1.19
if=hsr0
mac=70:ff:76:1f:41:11
slave-a=eth1
slave-b=eth2
Cannot find device "hsr0"
hsr-tag-ins-offload: off
hsr-tag-rm-offload: off
hsr-fwd-offload: off
hsr-dup-offload: off
Actual changes:
hsr-tag-ins-offload: on [not requested]
hsr-dup-offload: on
hsr-tag-ins-offload: on
hsr-tag-rm-offload: on
hsr-fwd-offload: on
hsr-dup-offload: on
hsr-tag-ins-offload: off
hsr-tag-rm-offload: off
hsr-fwd-offload: off
hsr-dup-offload: off
Actual changes:
hsr-tag-ins-offload: on [not requested]
hsr-dup-offload: on
hsr-tag-ins-offload: on
hsr-tag-rm-offload: on
hsr-fwd-offload: on
hsr-dup-offload: on
[   31.757554] icssg-prueth icssg1-eth eth1: timeout waiting for command done
[   31.774708] icssg-prueth icssg1-eth eth2: timeout waiting for command done
[   31.781651] icssg-prueth icssg1-eth: Failed to restart the firmwares, aborting the process
[   34.830876] hsr0: Slave A (eth1) is not up; please bring it up to get a fully working HSR network
[   34.839846] hsr0: Slave B (eth2) is not up; please bring it up to get a fully working HSR network
[   34.869401] remoteproc remoteproc13: powering up 300b4000.pru
[   34.881567] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
[   34.891101] remoteproc remoteproc13: unsupported resource 5
[   34.896760] remoteproc remoteproc13: remote processor 300b4000.pru is now up
[   34.903924] remoteproc remoteproc16: powering up 30084000.rtu
[   34.913148] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz0
[   34.922672] remoteproc remoteproc16: remote processor 30084000.rtu is now up
[   34.929805] remoteproc remoteproc7: powering up 3008a000.txpru
[   34.939081] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si2
[   34.948748] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
[   34.958728] remoteproc remoteproc14: powering up 300b8000.pru
[   34.967992] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
[   34.977474] remoteproc remoteproc14: unsupported resource 5
[   34.983087] remoteproc remoteproc14: remote processor 300b8000.pru is now up
[   34.990236] remoteproc remoteproc15: powering up 30086000.rtu
[   34.999348] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz6
[   35.008831] remoteproc remoteproc15: remote processor 30086000.rtu is now up
[   35.015949] remoteproc remoteproc8: powering up 3008c000.txpru
[   35.025142] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si0
[   35.034722] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
[   35.053607] icssg-prueth icssg1-eth eth1: Link is Up - 100Mbps/Full - flow control off
[   36.089765] icssg-prueth icssg1-eth eth2: Link is Up - 100Mbps/Full - flow control off
root@am64xx-evm:~#

After pinging we see that the number of IRQs are increasing for eth1 and eth2.

I also have these undesired logs when enable HSR offload with the script :
[   31.757554] icssg-prueth icssg1-eth eth1: timeout waiting for command done
[   31.774708] icssg-prueth icssg1-eth eth2: timeout waiting for command done
[   31.781651] icssg-prueth icssg1-eth: Failed to restart the firmwares, aborting the process


Is it possible to reproduce this on your side ?

-Tianyi
  • I also observe that : when only enable the script hsr above : 

    #!/bin/sh
    
    #ffload - sh hsr_setup.sh hsr_sw <INTF_A> <INTF_B> <HSR_INTF_IP_ADDR> 
    #For non offload - sh hsr_setup.sh hsr_hw <INTF_A> <INTF_B> <HSR_INTF_IP_ADDR> 
    
    echo "$@"
    
    if [ "$#" -ne "4" ]
    then
        echo "usage:"
        echo "$0 <hsr_sw/hsr_hw> <intf1> <intf2> <IPaddress>"
        exit
    fi
    
    if [ "$1" != "hsr_hw" ] && [ "$1" != "hsr_sw" ]
    then
        echo "the first argument must be 'hsr_hw' or 'hsr_sw' by default, cut-through is enable for hsr_hw."
        exit
    fi
    
    if=hsr0 
    
    ifa=$2 
    ifb=$3 
    
    ip=$4 
    mac=`ifconfig $ifa | grep ether | cut -d " " -f 10` 
    # Hardcode the device name
    device="platform/icssg1-eth"
    #device+=`dmesg | grep $ifa | grep icssg-prueth | grep -m 1 "Link is Up" | awk '{print $4}'` 
    
    echo "ip=$ip" 
    echo "if=$if" 
    echo "mac=$mac" 
    echo "slave-a=$ifa" 
    echo "slave-b=$ifb" 
    echo "device=$device" 
    
    ip link delete hsr0  2> /dev/null 
    
    ip link set $ifa down 
    ip link set $ifb down 
    sleep 1 
    
    if [ "$1" == "hsr_hw" ] 
    then 
            ethtool -k "$ifa" | grep hsr
            ethtool -K "$ifa" hsr-fwd-offload on
            ethtool -K "$ifa" hsr-dup-offload on
            ethtool -K "$ifa" hsr-tag-ins-offload on
            ethtool -K "$ifa" hsr-tag-rm-offload on
            ethtool -k "$ifa" | grep hsr
    
            ethtool -k "$ifb" | grep hsr
            ethtool -K "$ifb" hsr-fwd-offload on
            ethtool -K "$ifb" hsr-dup-offload on
            ethtool -K "$ifb" hsr-tag-ins-offload on
            ethtool -K "$ifb" hsr-tag-rm-offload on
            ethtool -k "$ifb" | grep hsr
    
            #devlink dev param set "$device" name hsr_offload_mode value true cmode runtime
    
            sleep 3 
    
            # Enable Cut-Through : queue 0 of SLICE0 and SLICE1: 
            devlink dev param set "$device" name cut_thru value 257 cmode runtime
    fi
    
    ip link set dev $ifa address $mac 
    ip link set dev $ifb address $mac 
    
    ip link set $ifa up 
    sleep 1 
    
    ip link set $ifb up 
    sleep 1 
    
    ip link add name $if type hsr slave1 $ifa slave2 $ifb supervision 45 version 1 
    
    sleep 3 
    
    ip addr add $ip/24 dev $if 
    ip link set $if up 

    (In the script I first up eth1 and eth2 then up hsr0 interface) 

    The PRU-ICSSG firmware is well loaded : 

    am64xx-evm login: 
    am64xx-evm login: 
    am64xx-evm login: root
    [   22.121765] audit: type=1006 audit(1736375379.704:12): pid=912 uid=0 subj=kernel old-auid=4294961
    [   22.135424] audit: type=1300 audit(1736375379.704:12): arch=c00000b7 syscall=64 success=yes exit)
    [   22.163149] audit: type=1327 audit(1736375379.704:12): proctitle="(systemd)"
    [   22.242954] audit: type=1334 audit(1736375379.828:13): prog-id=16 op=LOAD
    [   22.251103] audit: type=1300 audit(1736375379.828:13): arch=c00000b7 syscall=280 success=yes exi)
    [   22.279043] audit: type=1327 audit(1736375379.828:13): proctitle="(systemd)"
    [   22.287073] audit: type=1334 audit(1736375379.828:14): prog-id=16 op=UNLOAD
    [   22.295140] audit: type=1300 audit(1736375379.828:14): arch=c00000b7 syscall=57 success=yes exit)
    [   22.322626] audit: type=1327 audit(1736375379.828:14): proctitle="(systemd)"
    [   22.330589] audit: type=1334 audit(1736375379.828:15): prog-id=17 op=LOAD
    
    
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ./hsr_eoc_script.sh hsr_hw eth1 eth2 192.168.1.19                           
    hsr_hw eth1 eth2 192.168.1.19
    ip=192.168.1.19
    if=hsr0
    mac=70:ff:76:1f:41:11
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    [   30.627854] remoteproc remoteproc15: powering up 300b4000.pru
    [   30.640145] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru0-prueth-fw.elf, siz6
    [   30.650057] remoteproc remoteproc15: unsupported resource 5
    [   30.655824] remoteproc remoteproc15: remote processor 300b4000.pru is now up
    [   30.663007] remoteproc remoteproc16: powering up 30084000.rtu
    [   30.672172] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu0-prueth-fw.elf, siz4
    [   30.681651] remoteproc remoteproc16: remote processor 30084000.rtu is now up
    [   30.688760] remoteproc remoteproc7: powering up 3008a000.txpru
    [   30.698100] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-prueth-fw.elf, si8
    [   30.707662] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [   30.714856] remoteproc remoteproc13: powering up 300b8000.pru
    [   30.723976] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru1-prueth-fw.elf, siz6
    [   30.733438] remoteproc remoteproc13: unsupported resource 5
    [   30.741670] remoteproc remoteproc13: remote processor 300b8000.pru is now up
    [   30.748879] remoteproc remoteproc14: powering up 30086000.rtu
    [   30.758073] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu1-prueth-fw.elf, siz0
    [   30.767559] remoteproc remoteproc14: remote processor 30086000.rtu is now up
    [   30.774660] remoteproc remoteproc8: powering up 3008c000.txpru
    [   30.783874] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-prueth-fw.elf, si6
    [   30.793450] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [   32.835277] icssg-prueth icssg1-eth eth1: Link is Up - 100Mbps/Full - flow control off
    [   32.887161] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [   32.894244] remoteproc remoteproc16: stopped remote processor 30084000.rtu
    [   32.901157] remoteproc remoteproc15: stopped remote processor 300b4000.pru
    [   32.908093] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [   32.915081] remoteproc remoteproc14: stopped remote processor 30086000.rtu
    [   32.922009] remoteproc remoteproc13: stopped remote processor 300b8000.pru
    [   32.932552] icssg-prueth icssg1-eth eth1: cut-thru enabled for q0
    [   32.939153] icssg-prueth icssg1-eth eth2: cut-thru enabled for q0
    [   32.945459] remoteproc remoteproc15: powering up 300b4000.pru
    [   32.958223] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
    [   32.967834] remoteproc remoteproc15: unsupported resource 5
    [   32.976819] remoteproc remoteproc15: remote processor 300b4000.pru is now up
    [   32.986124] remoteproc remoteproc16: powering up 30084000.rtu
    [   32.997453] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz0
    [   33.008885] remoteproc remoteproc16: remote processor 30084000.rtu is now up
    [   33.017583] remoteproc remoteproc7: powering up 3008a000.txpru
    [   33.028327] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si2
    [   33.038109] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [   33.046039] remoteproc remoteproc13: powering up 300b8000.pru
    [   33.055248] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
    [   33.064725] remoteproc remoteproc13: unsupported resource 5
    [   33.070338] remoteproc remoteproc13: remote processor 300b8000.pru is now up
    [   33.077485] remoteproc remoteproc14: powering up 30086000.rtu
    [   33.086632] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz6
    [   33.096126] remoteproc remoteproc14: remote processor 30086000.rtu is now up
    [   33.103256] remoteproc remoteproc8: powering up 3008c000.txpru
    [   33.112469] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si0
    [   33.122059] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [   33.891309] icssg-prueth icssg1-eth eth2: Link is Up - 100Mbps/Full - flow control off
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    146:         45          7  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         16          0  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:          0          0  MSI-INTA 1971824 Level     icssg1-eth
    262:          0          0  MSI-INTA 1971840 Level     icssg1-eth
    542:          0          0  pruss-intc  24 Level     icssg1-eth
    543:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    146:         61         12  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         16          1  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:          0          0  MSI-INTA 1971824 Level     icssg1-eth
    262:         10          2  MSI-INTA 1971840 Level     icssg1-eth
    542:          0          0  pruss-intc  24 Level     icssg1-eth
    543:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# ethtool eth1
    Settings for eth1:
            Supported ports: [ TP    MII ]
            Supported link modes:   10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Supported pause frame use: No
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                                 100baseT/Half 100baseT/Full
            Link partner advertised pause frame use: Symmetric
            Link partner advertised auto-negotiation: Yes
            Link partner advertised FEC modes: Not reported
            Speed: 100Mb/s
            Duplex: Full
            Auto-negotiation: on
            master-slave cfg: preferred slave
            master-slave status: slave
            Port: Twisted Pair
            PHYAD: 15
            Transceiver: external
            MDI-X: Unknown
            Current message level: 0x00000000 (0)
                                  
            Link detected: yes
    root@am64xx-evm:~# ethtool eth2
    Settings for eth2:
            Supported ports: [ TP    MII ]
            Supported link modes:   10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Supported pause frame use: No
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                                 100baseT/Half 100baseT/Full
            Link partner advertised pause frame use: Symmetric
            Link partner advertised auto-negotiation: Yes
            Link partner advertised FEC modes: Not reported
            Speed: 100Mb/s
            Duplex: Full
            Auto-negotiation: on
            master-slave cfg: preferred slave
            master-slave status: slave
            Port: Twisted Pair
            PHYAD: 3
            Transceiver: external
            MDI-X: Unknown
            Current message level: 0x00000000 (0)
                                  
            Link detected: yes
    root@am64xx-evm:~# 

    And we can see that we only receive one IRQ from eth1 or eth2 : 

    However, when I try to set link speed with 100Mbps link speed with the command above : 

    ethtool -s eth1 speed 100 duplex full
    ethtool -s eth2 speed 100 duplex full


    Here are the logs : 

    am64xx-evm login: root
    [   21.618852] audit: type=1006 audit(1736375583.980:12): pid=911 uid=0 subj=kernel old-auid=4294961
    [   21.632485] audit: type=1300 audit(1736375583.980:12): arch=c00000b7 syscall=64 success=yes exit)
    [   21.660321] audit: type=1327 audit(1736375583.980:12): proctitle="(systemd)"
    [   21.703546] audit: type=1334 audit(1736375584.064:13): prog-id=16 op=LOAD
    [   21.711728] audit: type=1300 audit(1736375584.064:13): arch=c00000b7 syscall=280 success=yes exi)
    [   21.740021] audit: type=1327 audit(1736375584.064:13): proctitle="(systemd)"
    [   21.749864] audit: type=1334 audit(1736375584.064:14): prog-id=16 op=UNLOAD
    [   21.759794] audit: type=1300 audit(1736375584.064:14): arch=c00000b7 syscall=57 success=yes exit)
    [   21.787545] audit: type=1327 audit(1736375584.064:14): proctitle="(systemd)"
    [   21.794859] audit: type=1334 audit(1736375584.064:15): prog-id=17 op=LOAD
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full
    ool -sroot@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ./hsr_eoc_script.sh hsr_hw eth1 eth2 192.168.1.19                           
    hsr_hw eth1 eth2 192.168.1.19
    ip=192.168.1.19
    if=hsr0
    mac=70:ff:76:1f:41:11
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    [   31.467323] remoteproc remoteproc15: powering up 300b4000.pru
    [   31.477790] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru0-prueth-fw.elf, siz6
    [   31.491195] remoteproc remoteproc15: unsupported resource 5
    [   31.498401] remoteproc remoteproc15: remote processor 300b4000.pru is now up
    [   31.506684] remoteproc remoteproc16: powering up 30084000.rtu
    [   31.515784] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu0-prueth-fw.elf, siz4
    [   31.525270] remoteproc remoteproc16: remote processor 30084000.rtu is now up
    [   31.532374] remoteproc remoteproc7: powering up 3008a000.txpru
    [   31.541690] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-prueth-fw.elf, si8
    [   31.551273] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [   31.558501] remoteproc remoteproc11: powering up 300b8000.pru
    [   31.567614] remoteproc remoteproc11: Booting fw image ti-pruss/am65x-sr2-pru1-prueth-fw.elf, siz6
    [   31.577085] remoteproc remoteproc11: unsupported resource 5
    [   31.582696] remoteproc remoteproc11: remote processor 300b8000.pru is now up
    [   31.590009] remoteproc remoteproc12: powering up 30086000.rtu
    [   31.599151] remoteproc remoteproc12: Booting fw image ti-pruss/am65x-sr2-rtu1-prueth-fw.elf, siz0
    [   31.608674] remoteproc remoteproc12: remote processor 30086000.rtu is now up
    [   31.615799] remoteproc remoteproc8: powering up 3008c000.txpru
    [   31.625029] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-prueth-fw.elf, si6
    [   31.634606] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [   31.652202] icssg-prueth icssg1-eth eth1: Link is Up - 100Mbps/Full - flow control off
    [   32.689858] icssg-prueth icssg1-eth eth2: Link is Up - 100Mbps/Full - flow control off
    [   33.751747] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [   33.758829] remoteproc remoteproc16: stopped remote processor 30084000.rtu
    [   33.765745] remoteproc remoteproc15: stopped remote processor 300b4000.pru
    [   33.772682] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [   33.779671] remoteproc remoteproc12: stopped remote processor 30086000.rtu
    [   33.786597] remoteproc remoteproc11: stopped remote processor 300b8000.pru
    [   33.796613] icssg-prueth icssg1-eth eth1: cut-thru enabled for q0
    [   33.803084] icssg-prueth icssg1-eth eth2: cut-thru enabled for q0
    [   33.809265] remoteproc remoteproc15: powering up 300b4000.pru
    [   33.818714] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
    [   33.828191] remoteproc remoteproc15: unsupported resource 5
    [   33.833801] remoteproc remoteproc15: remote processor 300b4000.pru is now up
    [   33.841186] remoteproc remoteproc16: powering up 30084000.rtu
    [   33.850384] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz0
    [   33.860246] remoteproc remoteproc16: remote processor 30084000.rtu is now up
    [   33.867451] remoteproc remoteproc7: powering up 3008a000.txpru
    [   33.876780] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si2
    [   33.886386] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [   33.893880] remoteproc remoteproc11: powering up 300b8000.pru
    [   33.903110] remoteproc remoteproc11: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
    [   33.912595] remoteproc remoteproc11: unsupported resource 5
    [   33.918205] remoteproc remoteproc11: remote processor 300b8000.pru is now up
    [   33.925396] remoteproc remoteproc12: powering up 30086000.rtu
    [   33.934709] remoteproc remoteproc12: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz6
    [   33.944196] remoteproc remoteproc12: remote processor 30086000.rtu is now up
    [   33.951366] remoteproc remoteproc8: powering up 3008c000.txpru
    [   33.960639] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si0
    [   33.970218] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    root@am64xx-evm:~# tcpdump -i hsr0
    [   44.647449] hsr0: entered promiscuous mode
    [   44.651757] kauditd_printk_skb: 5 callbacks suppressed
    [   44.651769] audit: type=1700 audit(1736375607.008:17): dev=hsr0 prom=256 old_prom=0 auid=42949675
    [   44.668586] audit: type=1300 audit(1736375607.008:17): arch=c00000b7 syscall=208 success=yes exi)
    [   44.696447] audit: type=1327 audit(1736375607.008:17): proctitle=74637064756D70002D690068737230
    tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
    listening on hsr0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
    22:33:33.373381 IP6 am64xx-evm > ip6-allrouters: ICMP6, router solicitation, length 16
    ^C
    1 packet captured[   56.086412] hsr0: left promiscuous mode
    
    1 packet received by filter
    0 packets dropped by kernel
    [   56.091380] audit: type=1700 audit(1736375618.448:18): dev=hsr0 prom=0 old_prom=256 auid=42949675
    [   56.134682] audit: type=1300 audit(1736375618.448:18): arch=c00000b7 syscall=57 success=yes exit)
    [   56.161991] audit: type=1327 audit(1736375618.448:18): proctitle=74637064756D70002D690068737230
    root@am64xx-evm:~# tcpdump -i eth1
    [   58.879618] icssg-prueth icssg1-eth eth1: entered promiscuous mode
    [   58.886092] audit: type=1700 audit(1736375621.240:19): dev=eth1 prom=256 old_prom=0 auid=42949675
    [   58.897597] audit: type=1300 audit(1736375621.240:19): arch=c00000b7 syscall=208 success=yes exi)
    [   58.925443] audit: type=1327 audit(1736375621.240:19): proctitle=74637064756D70002D690065746831
    tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
    listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
    22:33:41.661365 70:ff:76:1f:41:11 (oui Unknown) > 01:15:4e:00:01:2d (oui Unknown), ethertype Unknow 
            0x0000:  0001 7e0a 1706 70ff 761f 4111 0000 0000  ..~...p.v.A.....
            0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
            0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
    22:33:42.077384 IP6 am64xx-evm > ip6-allrouters: ICMP6, router solicitation, length 16
    22:33:43.677360 70:ff:76:1f:41:11 (oui Unknown) > 01:15:4e:00:01:2d (oui Unknown), ethertype Unknow 
            0x0000:  0001 7e0b 1706 70ff 761f 4111 0000 0000  ..~...p.v.A.....
            0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
            0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
    22:33:45.032544 LLDP, length 214: am64xx-evm
    22:33:45.693362 70:ff:76:1f:41:11 (oui Unknown) > 01:15:4e:00:01:2d (oui Unknown), ethertype Unknow 
            0x0000:  0001 7e0c 1706 70ff 761f 4111 0000 0000  ..~...p.v.A.....
            0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
            0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
    ^C
    5 packets captured[   63.556085] icssg-prueth icssg1-eth eth1: left promiscuous mode
    
    5 packets received by filter
    0 packets dropped by kernel
    [   63.563358] audit: type=1700 audit(1736375625.916:20): dev=eth1 prom=0 old_prom=256 auid=42949675
    [   63.606680] audit: type=1300 audit(1736375625.916:20): arch=c00000b7 syscall=57 success=yes exit)
    [   63.634195] audit: type=1327 audit(1736375625.916:20): proctitle=74637064756D70002D690065746831
    root@am64xx-evm:~# 

    I cannot ping from my VM with the same setup : 

    My questions here are : 

    - For HSR Script, could you confirm that we need first start icssg (up eth1 and eth2) before up hsr0 interface ? (I would say yes since hsr offload is working in this case)

    - When doing like this, if we want to set first with ethtool 100 Mbps link speed eth1 and eth2, the Device Under Tests cannot receive any packets, is it normal ? Maybe could you try to reproduce this on your side ? 

    - Tianyi  

  • Comment3

    Additional observations : 

    when enable hsr script with the script above on 100 Mbps link speed, I can see that the hsr firmware removes duplicate packets with IRQs check. But 

    when down eth1 and eth2. Then up them back, And then ping, I observe that packets are not removed correctly based on IRQs check You can find the DUT logs : 

    am64xx-evm login: 
    am64xx-evm login: 
    am64xx-evm login: 
    am64xx-evm login: root
    [   21.459045] audit: type=1006 audit(1736376188.768:12): pid=910 uid=0 subj=kernel old-auid=42949671
    [   21.473357] audit: type=1300 audit(1736376188.768:12): arch=c00000b7 syscall=64 success=yes exit=)
    [   21.501228] audit: type=1327 audit(1736376188.768:12): proctitle="(systemd)"
    [   21.555081] audit: type=1334 audit(1736376188.864:13): prog-id=16 op=LOAD
    [   21.561967] audit: type=1300 audit(1736376188.864:13): arch=c00000b7 syscall=280 success=yes exit)
    [   21.588781] audit: type=1327 audit(1736376188.864:13): proctitle="(systemd)"
    [   21.595950] audit: type=1334 audit(1736376188.864:14): prog-id=16 op=UNLOAD
    [   21.603172] audit: type=1300 audit(1736376188.864:14): arch=c00000b7 syscall=57 success=yes exit=)
    [   21.632615] audit: type=1327 audit(1736376188.864:14): proctitle="(systemd)"
    [   21.642045] audit: type=1334 audit(1736376188.864:15): prog-id=17 op=LOAD
    
    
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.12.17-ti-00771-gc85877d40f8e #1 SMP PREEMPT Tue Mar 25 12:45:29 UTC 2025 aarch64 x
    root@am64xx-evm:~# ./hsr_eoc_script.sh hsr_hw eth1 eth2 192.168.1.19                         
    hsr_hw eth1 eth2 192.168.1.19
    ip=192.168.1.19
    if=hsr0
    mac=70:ff:76:1f:41:11
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    [   32.841334] remoteproc remoteproc9: powering up 300b4000.pru
    [   32.853235] remoteproc remoteproc9: Booting fw image ti-pruss/am65x-sr2-pru0-prueth-fw.elf, size 6
    [   32.862702] remoteproc remoteproc9: unsupported resource 5
    [   32.868280] remoteproc remoteproc9: remote processor 300b4000.pru is now up
    [   32.875359] remoteproc remoteproc10: powering up 30084000.rtu
    [   32.884449] remoteproc remoteproc10: Booting fw image ti-pruss/am65x-sr2-rtu0-prueth-fw.elf, size4
    [   32.893957] remoteproc remoteproc10: remote processor 30084000.rtu is now up
    [   32.901083] remoteproc remoteproc7: powering up 3008a000.txpru
    [   32.910348] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-prueth-fw.elf, siz8
    [   32.919931] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [   32.927123] remoteproc remoteproc15: powering up 300b8000.pru
    [   32.936359] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-prueth-fw.elf, size6
    [   32.945889] remoteproc remoteproc15: unsupported resource 5
    [   32.951546] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [   32.958729] remoteproc remoteproc16: powering up 30086000.rtu
    [   32.967858] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-prueth-fw.elf, size0
    [   32.977367] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [   32.984471] remoteproc remoteproc8: powering up 3008c000.txpru
    [   32.993730] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-prueth-fw.elf, siz6
    [   33.003337] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [   35.075694] icssg-prueth icssg1-eth eth1: Link is Up - 100Mbps/Full - flow control off
    [   35.114597] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [   35.121716] remoteproc remoteproc10: stopped remote processor 30084000.rtu
    [   35.128658] remoteproc remoteproc9: stopped remote processor 300b4000.pru
    [   35.135504] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [   35.142492] remoteproc remoteproc16: stopped remote processor 30086000.rtu
    [   35.149417] remoteproc remoteproc15: stopped remote processor 300b8000.pru
    [   35.159101] icssg-prueth icssg1-eth eth1: cut-thru enabled for q0
    [   35.165502] icssg-prueth icssg1-eth eth2: cut-thru enabled for q0
    [   35.171689] remoteproc remoteproc9: powering up 300b4000.pru
    [   35.181143] remoteproc remoteproc9: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, size 8
    [   35.190688] remoteproc remoteproc9: unsupported resource 5
    [   35.196314] remoteproc remoteproc9: remote processor 300b4000.pru is now up
    [   35.203452] remoteproc remoteproc10: powering up 30084000.rtu
    [   35.212670] remoteproc remoteproc10: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, size0
    [   35.222177] remoteproc remoteproc10: remote processor 30084000.rtu is now up
    [   35.229308] remoteproc remoteproc7: powering up 3008a000.txpru
    [   35.238592] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, siz2
    [   35.248162] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [   35.255355] remoteproc remoteproc15: powering up 300b8000.pru
    [   35.264527] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, size8
    [   35.274053] remoteproc remoteproc15: unsupported resource 5
    [   35.279746] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [   35.286932] remoteproc remoteproc16: powering up 30086000.rtu
    [   35.296150] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, size6
    [   35.305658] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [   35.312771] remoteproc remoteproc8: powering up 3008c000.txpru
    [   35.322013] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, siz0
    [   35.331579] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [   37.123399] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow control off
    root@am64xx-evm:~# [   40.194474] icssg-prueth icssg1-eth eth2: Link is Down
    
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# [   42.243398] icssg-prueth icssg1-eth eth2: Link is Up - 100Mbps/Full - flow conf
    
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ifconfig
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1f:4111  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:41:11  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 68  bytes 9988 (9.7 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1f:4111  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:41:11  txqueuelen 1000  (Ethernet)
            RX packets 2  bytes 345 (345.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 54  bytes 7655 (7.4 KiB)
            TX errors 0  dropped 1 overruns 0  carrier 0  collisions 0
    
    hsr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.1.19  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::72ff:76ff:fe1f:4111  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:41:11  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 34  bytes 4558 (4.4 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 170  bytes 13434 (13.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 170  bytes 13434 (13.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg                                           
    146:         50          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         13          5  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:          0          0  MSI-INTA 1971824 Level     icssg1-eth
    262:          0          0  MSI-INTA 1971840 Level     icssg1-eth
    542:          0          0  pruss-intc  24 Level     icssg1-eth
    543:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    146:         70          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         13          6  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:          0          0  MSI-INTA 1971824 Level     icssg1-eth
    262:          0         12  MSI-INTA 1971840 Level     icssg1-eth
    542:          0          0  pruss-intc  24 Level     icssg1-eth
    543:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# ifconfig eth1 down
    [   64.903701] icssg-prueth icssg1-eth eth1: Link is Down
    root@am64xx-evm:~# ifconfig eth2 down                                                                
    [   66.951846] icssg-prueth icssg1-eth eth2: Link is Down
    [   66.960773] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [   66.967866] remoteproc remoteproc10: stopped remote processor 30084000.rtu
    [   66.974791] remoteproc remoteproc9: stopped remote processor 300b4000.pru
    [   66.981878] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [   66.988918] remoteproc remoteproc16: stopped remote processor 30086000.rtu
    [   66.995827] remoteproc remoteproc15: stopped remote processor 300b8000.pru
    root@am64xx-evm:~# ifconfig eth1 up
    [   70.170528] icssg-prueth icssg1-eth eth1: cut-thru enabled for q0
    [   70.176984] icssg-prueth icssg1-eth eth2: cut-thru enabled for q0
    [   70.185962] remoteproc remoteproc9: powering up 300b4000.pru
    [   70.191997] remoteproc remoteproc9: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, size 8
    [   70.201376] remoteproc remoteproc9: unsupported resource 5
    [   70.206968] remoteproc remoteproc9: remote processor 300b4000.pru is now up
    [   70.214075] remoteproc remoteproc10: powering up 30084000.rtu
    [   70.220142] remoteproc remoteproc10: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, size0
    [   70.229681] remoteproc remoteproc10: remote processor 30084000.rtu is now up
    [   70.236842] remoteproc remoteproc7: powering up 3008a000.txpru
    [   70.242994] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, siz2
    [   70.252595] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [   70.259805] remoteproc remoteproc15: powering up 300b8000.pru
    [   70.265972] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, size8
    [   70.275486] remoteproc remoteproc15: unsupported resource 5
    [   70.281099] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [   70.288244] remoteproc remoteproc16: powering up 30086000.rtu
    [   70.294306] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, size6
    [   70.303807] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [   70.310925] remoteproc remoteproc8: powering up 3008c000.txpru
    [   70.317041] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, siz0
    [   70.326634] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    root@am64xx-evm:~# ifconfig eth2[   72.387182] icssg-prueth icssg1-eth eth1: Link is Up - 100Mbps/Fuf
    
    root@am64xx-evm:~# [   75.555180] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow contrf
    cat /proc/interrupts | grep icssg[   78.626257] icssg-prueth icssg1-eth eth2: Link is Down
    [   79.651203] icssg-prueth icssg1-eth eth2: Link is Up - 100Mbps/Full - flow control off
    ^C
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg                                           
    146:        113          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         13         26  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:         17          0  MSI-INTA 1971824 Level     icssg1-eth
    262:          0         19  MSI-INTA 1971840 Level     icssg1-eth
    542:          0          0  pruss-intc  24 Level     icssg1-eth
    543:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# 
    

    Here are the logs for the sender packets : 

    root@am64xx-evm:~# ping 192.168.1.19 -c 10                                                          
    PING 192.168.1.19 (192.168.1.19): 56 data bytes                                                     
    64 bytes from 192.168.1.19: seq=0 ttl=64 time=0.809 ms                                              
    64 bytes from 192.168.1.19: seq=1 ttl=64 time=0.570 ms                                              
    64 bytes from 192.168.1.19: seq=2 ttl=64 time=0.565 ms                                              
    64 bytes from 192.168.1.19: seq=3 ttl=64 time=0.551 ms                                              
    64 bytes from 192.168.1.19: seq=4 ttl=64 time=0.557 ms                                              
    64 bytes from 192.168.1.19: seq=5 ttl=64 time=0.552 ms                                              
    64 bytes from 192.168.1.19: seq=6 ttl=64 time=0.567 ms                                              
    64 bytes from 192.168.1.19: seq=7 ttl=64 time=0.532 ms                                              
    64 bytes from 192.168.1.19: seq=8 ttl=64 time=0.555 ms                                              
    64 bytes from 192.168.1.19: seq=9 ttl=64 time=0.550 ms                                              
                                                                                                        
    --- 192.168.1.19 ping statistics ---                                                                
    10 packets transmitted, 10 packets received, 0% packet loss                                         
    round-trip min/avg/max = 0.532/0.580/0.809 ms                                                       
    root@am64xx-evm:~# ping 192.168.1.19 -c 10                                                          
    PING 192.168.1.19 (192.168.1.19): 56 data bytes                                                     
    64 bytes from 192.168.1.19: seq=0 ttl=64 time=0.735 ms                                              
    64 bytes from 192.168.1.19: seq=1 ttl=64 time=0.523 ms                                              
    64 bytes from 192.168.1.19: seq=2 ttl=64 time=0.519 ms                                              
    64 bytes from 192.168.1.19: seq=3 ttl=64 time=0.560 ms                                              
    64 bytes from 192.168.1.19: seq=4 ttl=64 time=0.605 ms                                              
    64 bytes from 192.168.1.19: seq=5 ttl=64 time=0.571 ms                                              
    64 bytes from 192.168.1.19: seq=6 ttl=64 time=0.526 ms                                              
    64 bytes from 192.168.1.19: seq=7 ttl=64 time=0.545 ms                                              
    64 bytes from 192.168.1.19: seq=8 ttl=64 time=0.541 ms                                              
    64 bytes from 192.168.1.19: seq=9 ttl=64 time=0.548 ms                                              
                                                                                                        
    --- 192.168.1.19 ping statistics ---                                                                
    10 packets transmitted, 10 packets received, 0% packet loss                                         
    round-trip min/avg/max = 0.519/0.567/0.735 ms                                                       
    root@am64xx-evm:~#

    Is it possible to try to reproduce o your side this issue ? 

    - Tianyi 

  • Hi Tianyi, 

    Thanks for sharing these details of the behavior you are seeing on SDK 11.0. 

    I found that there are two IRQs coming from queues from eth1 and eth2 for HSR packets. But the duplicated packets should be removed by the PRU firmware, I would expect only one IRQ. 

    Just to double check, on the previous SDK 9.2 version, using the same steps did you also see IRQ counts show up for both eth1 and eth2? Is there a possibility that the first copy of each packet that is received could change/alternate which port the frame arrives at? Or do you expect that the first copy of each packet should always arrive at one specific port?

    - For HSR Script, could you confirm that we need first start icssg (up eth1 and eth2) before up hsr0 interface ? (I would say yes since hsr offload is working in this case)

    When you did not first up eth1 and eth2 before up hsr0 interface, did you see issues with eth1 and eth2 IRQ behavior with the default 1Gbps link speed?

    Can you also try to use the below script for running HSR on SDK 11.0. The below HSR script has been used mainly testing on SDK 10.1 and is slightly different from what you have used for SDK 9.2

    x=1
    if=$1
    ifa=eth1
    ifb=eth2
    ip=$4
    forwarding=$5
    cutthruq=$6
    mac=`ifconfig $ifa | grep ether | cut -d " " -f 10`
    device="platform/icssg1-eth"
    
    # Helper API
    err_on_cmd() {                 
            if [ $? != 0 ]; then   
                    echo "FAILED: $1"
                    echo "HSR OFFload failed in $x 'th try"
                    echo "Going Back to dual EMAC mode"
                    icssg_disable_hsr_offload
                    exit 1;
            fi                     
    } 
    
    # Enable HSR Offload mode.
    
    usage() {
            echo "USAGE: $0 <hsr_iface> <on/off> <enable/disable> <ip> <forwarding_method> <cut-thru-que"
            echo ""
            echo "  hsr_iface implies name of the hsr interface to be created i.e. hsr0."
            echo "  On implies hsr offloading is done in hardware, off implies same is done in sw."
            echo "  enables / disables the hsr offload mechanism, this willd delete the hsr iface."
            echo "  ip to be assigned to hsr_iface"
            echo "  forwarding_method implies cut-thru is enabled or store and forward"
            echo "  cut-thru-queue implies the queues on which cut-thru is enabled"
            echo "  Sample cmd - $0 hsr0 on enable 192.168.10.10 cutthru 257"
            echo "  Sample cmd - $0 hsr0 on enable 192.168.10.10"
            echo ""
            exit   
    }
    
    icssg_enable_hsr_offload () {
    
            if [ "$#" != "1" ]
            then
                  usage  
            fi
    
            if [ "$1" != "on" ] && [ "$1" != "off" ]
            then
                    usage
            fi
    
            # Enable all offloads.
            ethtool -K $ifa hsr-fwd-offload $1
            ethtool -K $ifa hsr-dup-offload $1
            ethtool -K $ifa hsr-tag-ins-offload $1
            ethtool -K $ifa hsr-tag-rm-offload $1
            ethtool -K $ifb hsr-fwd-offload $1
            ethtool -K $ifb hsr-dup-offload $1
            ethtool -K $ifb hsr-tag-ins-offload $1
            ethtool -K $ifb hsr-tag-rm-offload $1
            ethtool -k $ifa | grep hsr
            ethtool -k $ifb | grep hsr
    
            sleep 2
    
            ip link set dev $ifa address $mac
            ip link set dev $ifb address $mac
    
            if [[ "$forwarding" == "cutthru" ]]; then
                    # Enable cut-thru
                    echo "Enabling cutthru $cutthruq"
                    devlink dev param set platform/icssg1-eth name cut_thru value $cutthruq cmode runtime
            else 
                    echo "not enabling cutthru"
            fi
    
            ip link add name $if type hsr slave1 $ifa slave2 $ifb supervision 45 version 1
    
            sleep 3
    
            ip addr add $ip/24 dev $if
            ip link set $if up
    
            #show cut-through properties                                                                
            devlink dev param show
    
    }
    
    icssg_disable_hsr_offload () {
            ip link set $if down
            sleep 1
            ip link delete $if  2> /dev/null
            sleep 1
    }
    
    if [[ "$2" != "on" ]] && [[ "$2" != "off" ]]; then
            echo "second if"
            usage
    fi
    
    if [[ "$3" != "enable" ]] && [[ "$3" != "disable" ]]; then
            echo "third if"
            usage
    fi
    
    # Test starts
    echo "ip=$ip"
    echo "if=$if"
    echo "mac=$mac"
    echo "slave-a=$ifa"
    echo "slave-b=$ifb"
    echo "device=$device"
    echo "hw_offload=$2"
    echo "forwarding_method=$forwarding"
    
    if [[ "$3" == "enable" ]]; then
            icssg_enable_hsr_offload $2
    else
            icssg_disable_hsr_offload
    fi

    - When doing like this, if we want to set first with ethtool 100 Mbps link speed eth1 and eth2, the Device Under Tests cannot receive any packets, is it normal ? Maybe could you try to reproduce this on your side ? 

    I need to try and test this out and see if I can reproduce. From my understanding, our internal testing for HSR was focused on 1Gbps so there could be a chance there is some issue with 100Mbps. Unfortunately, I'm out of the office this week but should be back in office to be able to test next week.

    -Daolin

  • Hi Daolin, 

    Thank you for the fast response.

    Just to double check, on the previous SDK 9.2 version, using the same steps did you also see IRQ counts show up for both eth1 and eth2? Is there a possibility that the first copy of each packet that is received could change/alternate which port the frame arrives at? Or do you expect that the first copy of each packet should always arrive at one specific port?

    Yes on previous SDK 9.X. And when up first hsr0 then eth1 and eth2, I indeed found similar issue. I assume we need to up first eth1 and eth2 then up hsr0. (as described in the SDK 9.X). When I did the same test on SDK but up first eth1 and eth2 then up hsr0, I only find one IRQ which means the packet is removed with PRU firmware. I would expect the same result for SDK 11.X

    When you did not first up eth1 and eth2 before up hsr0 interface, did you see issues with eth1 and eth2 IRQ behavior with the default 1Gbps link speed?

    Here we are targeting for 100Mbps link speed, I can give a quick try. 

    ip link set dev "$ifa" address "$mac"
    ip link set dev "$ifb" address "$mac"
    
    ip link add name $if type hsr slave1 "$ifa" slave2 "$ifb" supervision 45 version 1
    
    sleep 3
    
    ip addr add "$ip"/24 dev $if
    ip link set $if up
    
    ip link set $ifa up                            
    sleep 1                                       
                                                
    ip link set $ifb up                                                                   
    sleep 1

    I will double check to be sure. 

    I may have a couple of questions here, based on SDK TI documentation : 

    - 9.X : https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/09_02_01_10/exports/docs/linux/Foundational_Components/Kernel/Kernel_Drivers/Network/HSR_Offload.html?highlight=hsr%20offload

    - 11.X : https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_00_09_04/exports/docs/linux/Foundational_Components/Kernel/Kernel_Drivers/Network/HSR_Offload.html

    There are some changes on the script about how to enable hsr offload pru. Especially about turning up eth1 and eth2 before turning up hsr0 on SDK 9.X .  And on SDK 11.X, we just up hsr0. Do you know if there are any reasons ? 

    I try to sum up all the observations from previous message based on the tests on SDK 11.X, on 100 Mbps link speed : 

    - if turning up hsr0 then, eth1 and eth2, the HSR interface receives HSR packets but the duplicated packets are not removed based on with IRQs. ==> KO (here I assume we need to up eth1 and eth2 first (start icssg firmware), then up hsr0 as highlighted in SDK 9.X and not highlighted on 11.X, is it possible on your side to reproduce this ? )

    - if turning up eth1 and eth2 up then hsr0 (as suggested SDK 9.X), the HSR interface receives packets and the HSR duplicated packets are removed based on with IRQs. ==> OK

    - if we set with ethtool 100 Mbps link speed for eth1 and eth2 + turning up eth1 and eth2 up then hsr0 (as suggested SDK 9.X), the HSR interface receives packets and the HSR duplicated packets are removed based on with IRQs. ==> KO (For me, this shouldn't happened when set the interface link speed with ethtool, is it possible on your side to reproduce this ? )

    - if turning up eth1 and eth2 up then hsr0 (like SDK 9.X), then turning down + up eth1 and eth2, the HSR duplicated packets are not removed based on with IRQs. ==> KO (For me, this shouldn't happened when restarting PRU_ICSSG firmware, is it possible on your side to reproduce this ? )

    - Tianyi 

  • Hi Tianyi, 

    Yes on previous SDK 9.X. And when up first hsr0 then eth1 and eth2, I indeed found similar issue. I assume we need to up first eth1 and eth2 then up hsr0. (as described in the SDK 9.X). When I did the same test on SDK but up first eth1 and eth2 then up hsr0, I only find one IRQ which means the packet is removed with PRU firmware. I would expect the same result for SDK 11.X

    I checked internally regarding eth1 and eth2 kept up before setting up the hsr interface and you are correct in that the script should ensure eth1 and eth2 are kept up before hsr setup. Below is a slightly updated version of the script I shared in my last response. In this script, you should ensure that eth1 and eth2 are kept up before running the script. Please note I have not yet been able to test this modified script yet since I'm not in office currently. 

    x=1
    if=$1
    ifa=eth1
    ifb=eth2
    ip=$4
    forwarding=$5
    cutthruq=$6
    mac=`ifconfig $ifa | grep ether | cut -d " " -f 10`
    device="platform/icssg1-eth"
    
    # Helper API
    err_on_cmd() {                 
            if [ $? != 0 ]; then   
                    echo "FAILED: $1"
                    echo "HSR OFFload failed in $x 'th try"
                    echo "Going Back to dual EMAC mode"
                    icssg_disable_hsr_offload
                    exit 1;
            fi                     
    } 
    
    # Enable HSR Offload mode.
    
    usage() {
            echo "USAGE: $0 <hsr_iface> <on/off> <enable/disable> <ip> <forwarding_method> <cut-thru-que"
            echo ""
            echo "  hsr_iface implies name of the hsr interface to be created i.e. hsr0."
            echo "  On implies hsr offloading is done in hardware, off implies same is done in sw."
            echo "  enables / disables the hsr offload mechanism, this willd delete the hsr iface."
            echo "  ip to be assigned to hsr_iface"
            echo "  forwarding_method implies cut-thru is enabled or store and forward"
            echo "  cut-thru-queue implies the queues on which cut-thru is enabled"
            echo "  Sample cmd - $0 hsr0 on enable 192.168.10.10 cutthru 257"
            echo "  Sample cmd - $0 hsr0 on enable 192.168.10.10"
            echo ""
            exit   
    }
    
    icssg_enable_hsr_offload () {
    
            if [ "$#" != "1" ]
            then
                  usage  
            fi
    
            if [ "$1" != "on" ] && [ "$1" != "off" ]
            then
                    usage
            fi
    
            # Enable all offloads.
            ethtool -K $ifa hsr-fwd-offload $1
            ethtool -K $ifa hsr-dup-offload $1
            ethtool -K $ifa hsr-tag-ins-offload $1
            ethtool -K $ifa hsr-tag-rm-offload $1
            ethtool -K $ifb hsr-fwd-offload $1
            ethtool -K $ifb hsr-dup-offload $1
            ethtool -K $ifb hsr-tag-ins-offload $1
            ethtool -K $ifb hsr-tag-rm-offload $1
            ethtool -k $ifa | grep hsr
            ethtool -k $ifb | grep hsr
    
            sleep 2
    
            ip link set dev $ifa address $mac
            ip link set dev $ifb address $mac
    
            if [[ "$forwarding" == "cutthru" ]]; then
                    # Enable cut-thru
                    echo "Enabling cutthru $cutthruq"
                    devlink dev param set platform/icssg1-eth name cut_thru value $cutthruq cmode runtime
            else 
                    echo "not enabling cutthru"
            fi
    
            ip link add name $if type hsr slave1 $ifa slave2 $ifb supervision 45 version 1
    
            sleep 3
    
            ip addr add $ip/24 dev $if
            ip link set $if up
    
            #show cut-through properties                                                                
            devlink dev param show
    
    }
    
    icssg_disable_hsr_offload () {
            ip link set $if down
            sleep 1
            ip link delete $if  2> /dev/null
            sleep 1
    }
    
    if [[ "$2" != "on" ]] && [[ "$2" != "off" ]]; then
            echo "second if"
            usage
    fi
    
    if [[ "$3" != "enable" ]] && [[ "$3" != "disable" ]]; then
            echo "third if"
            usage
    fi
    
    # Test starts
    echo "ip=$ip"
    echo "if=$if"
    echo "mac=$mac"
    echo "slave-a=$ifa"
    echo "slave-b=$ifb"
    echo "device=$device"
    echo "hw_offload=$2"
    echo "forwarding_method=$forwarding"
    
    if [[ "$3" == "enable" ]]; then
            icssg_enable_hsr_offload $2
    else
            icssg_disable_hsr_offload
    fi
    

    I've also noticed from prior testing with your test sequence (including the disable of the network systemd services) that the eth1 and eth2 interfaces were not enabled/up prior to running the script. Perhaps this might be the reason why you have been observing the issues with IRQ as you described.

    There are some changes on the script about how to enable hsr offload pru. Especially about turning up eth1 and eth2 before turning up hsr0 on SDK 9.X .  And on SDK 11.X, we just up hsr0. Do you know if there are any reasons ? 

    The change I believe on SDK 11.x is that instead of explicitly bringing up the eth1 and eth2 interfaces, the eth1 and eth2 interfaces are kept up prior to running the script.

    - if turning up eth1 and eth2 up then hsr0 (as suggested SDK 9.X), the HSR interface receives packets and the HSR duplicated packets are removed based on with IRQs. ==> OK

    - if we set with ethtool 100 Mbps link speed for eth1 and eth2 + turning up eth1 and eth2 up then hsr0 (as suggested SDK 9.X), the HSR interface receives packets and the HSR duplicated packets are removed based on with IRQs. ==> KO (For me, this shouldn't happened when set the interface link speed with ethtool, is it possible on your side to reproduce this ? )

    Can you explain what is the main difference between these two cases? Is it that the first case here is with the default 1Gbps link speed? In the second case are you describing that you are seeing IRQ counts on both eth1 and eth2?

    - if turning up eth1 and eth2 up then hsr0 (like SDK 9.X), then turning down + up eth1 and eth2, the HSR duplicated packets are not removed based on with IRQs. ==> KO (For me, this shouldn't happened when restarting PRU_ICSSG firmware, is it possible on your side to reproduce this ? )

    I will have to try this out when I'm back in office next week.

    -Daolin

  • Hi Daolin, 

    Thank you for your fast answer. 

    - TEST1: if turning up eth1 and eth2 up then hsr0 (as suggested SDK 9.X), the HSR interface receives packets and the HSR duplicated packets are removed based on with IRQs. ==> OK

    - TEST2: if we set with ethtool 100 Mbps link speed for eth1 and eth2 + turning up eth1 and eth2 up then hsr0 (as suggested SDK 9.X), the HSR interface receives packets and the HSR duplicated packets are removed based on with IRQs. ==> KO (For me, this shouldn't happened when set the interface link speed with ethtool, is it possible on your side to reproduce this ? )

    Can you explain what is the main difference between these two cases? Is it that the first case here is with the default 1Gbps link speed? In the second case are you describing that you are seeing IRQ counts on both eth1 and eth2?

    Yes sure. The difference between TEST1 and TEST2 is in TEST 2 we set manually 100 Mbps link speed with the following commands.

    With TEST1, we are using ReDBox Hirshman 100 Mbps link speed as sender, therefore, AM64x (DUT) takes 100Mbps link speed with auto negociation

    With TEST2, we are using AM64x as sender, we must here set 100 Mbps link speed on the DUT side to force somehow the 100Mbps link speed. 

    ethtool -s eth1 speed 100 duplex full
    ethtool -s eth2 speed 100 duplex full

    Because some of our board support 1000Mbps link speed we must use these command to set to 100Mbps link speed. 

    - if turning up eth1 and eth2 up then hsr0 (like SDK 9.X), then turning down + up eth1 and eth2, the HSR duplicated packets are not removed based on with IRQs. ==> KO (For me, this shouldn't happened when restarting PRU_ICSSG firmware, is it possible on your side to reproduce this ? )

    I will have to try this out when I'm back in office next week.

    Yes thank you very much. 

    - Tianyi

  • Hi Tianyi, 

    Yes sure. The difference between TEST1 and TEST2 is in TEST 2 we set manually 100 Mbps link speed with the following commands.

    With TEST1, we are using ReDBox Hirshman 100 Mbps link speed as sender, therefore, AM64x (DUT) takes 100Mbps link speed with auto negociation

    With TEST2, we are using AM64x as sender, we must here set 100 Mbps link speed on the DUT side to force somehow the 100Mbps link speed. 

    Thanks for explaining that the difference is manual setup of 100Mbps link speed. During TEST2, did you manually configure the 100Mbps link speed prior to bringing up the eth1 and eth2 interfaces? 

    I'll need to investigate what is the main difference between using auto-negotiation to set link speed versus manual configuration of link speed, I appreciate your patience while I look into it.

    -Daolin

  • Hi Daolin, 

    Thank you for your fast answer. Yes indeed, I configure manually the 100Mbps link speed prior to bringing up the eth1 and eth2 

    - Tianyi

  • Hi Tianyi, 

    Thank you for your fast answer. Yes indeed, I configure manually the 100Mbps link speed prior to bringing up the eth1 and eth2 

    Thanks for confirming.

    - if turning up eth1 and eth2 up then hsr0 (like SDK 9.X), then turning down + up eth1 and eth2, the HSR duplicated packets are not removed based on with IRQs. ==> KO (For me, this shouldn't happened when restarting PRU_ICSSG firmware, is it possible on your side to reproduce this ? )

    As mentioned in the call yesterday, for this issue, as a sanity check can you try re-setting up the hsr interface after the turning down and back up eth1 and eth2 step to see if that results in the correct behavior? I will try to do the same test when I'm back in office.

    -Daolin

  • Hi Tianyi, 

    Just wanted to give you an update

    - When doing like this, if we want to set first with ethtool 100 Mbps link speed eth1 and eth2, the Device Under Tests cannot receive any packets, is it normal ? Maybe could you try to reproduce this on your side ? 

    I need to try and test this out and see if I can reproduce. From my understanding, our internal testing for HSR was focused on 1Gbps so there could be a chance there is some issue with 100Mbps. Unfortunately, I'm out of the office this week but should be back in office to be able to test next week.

    1. I was able to reproduce this issue of no ping on 100Mbps line rate configured with ethtool commands, although I did so on SDK 10.1. I've filed a bug on this issue and informed the internal team regarding this issue. I suspect this slipped through our testing because 100Mbps line rate case was not added as an automated test case which I hope to mitigate by adding 100Mbps case as automated test case as well.

    - if turning up eth1 and eth2 up then hsr0 (like SDK 9.X), then turning down + up eth1 and eth2, the HSR duplicated packets are not removed based on with IRQs. ==> KO (For me, this shouldn't happened when restarting PRU_ICSSG firmware, is it possible on your side to reproduce this ? )

    As mentioned in the call yesterday, for this issue, as a sanity check can you try re-setting up the hsr interface after the turning down and back up eth1 and eth2 step to see if that results in the correct behavior? I will try to do the same test when I'm back in office.

    2. Since for the time being due to the 100Mbps ping issue, I tested this case with 1Gbps line rate (I kept the network services enabled), and I see that even after bringing down and back up the eth1 and eth2 interfaces on all 3 EVMs in my HSR ring setup after the hsr interfaces were already setup, the IRQ count seems to only increase on one port at a time during a ping from EVM1 to EVM3, which seems to be the expected behavior? I checked this by dumping the icssg /proc/interrupts during when ping is happening and checking which counters were incrementing during the ping. Is there something I am missing here? Or this behavior only observable on 100Mbps line rate? If so, how were you able to test this case on 100Mbps given the problem with the ping failure?

    EVM1:

    Save New Duplicate & Edit Just Text Twitter
    root@am64xx-evm:~# ./hsr_setup_v2.sh hsr1 on enable 192.168.10.10 cutthru 257               
    ip=192.168.10.10
    if=hsr1
    mac=70:ff:76:1e:9c:46
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hw_offload=on
    forwarding_method=cutthru
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    RTNETLINK answers: Device or resource busy
    Enabling cutthru 257
    [ 6253.057815] icssg-prueth icssg1-eth: Cut-Thru not supported in MAC mode
    kernel answers: Invalid argument
    [ 6253.098185] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [ 6253.098806] remoteproc remoteproc14: stopped remote processor 30084000.rtu
    [ 6253.098827] remoteproc remoteproc13: stopped remote processor 300b4000.pru
    [ 6253.098840] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [ 6253.098849] remoteproc remoteproc16: stopped remote processor 30086000.rtu
    [ 6253.098859] remoteproc remoteproc15: stopped remote processor 300b8000.pru
    [ 6253.099126] remoteproc remoteproc13: powering up 300b4000.pru
    [ 6253.107280] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
    [ 6253.107327] remoteproc remoteproc13: unsupported resource 5
    [ 6253.107356] remoteproc remoteproc13: remote processor 300b4000.pru is now up
    [ 6253.107401] remoteproc remoteproc14: powering up 30084000.rtu
    [ 6253.137694] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz6
    [ 6253.137760] remoteproc remoteproc14: remote processor 30084000.rtu is now up
    [ 6253.137808] remoteproc remoteproc7: powering up 3008a000.txpru
    [ 6253.139607] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si2
    [ 6253.139672] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [ 6253.139885] remoteproc remoteproc15: powering up 300b8000.pru
    [ 6253.141495] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
    [ 6253.141534] remoteproc remoteproc15: unsupported resource 5
    [ 6253.141562] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [ 6253.141607] remoteproc remoteproc16: powering up 30086000.rtu
    [ 6253.142996] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz4
    [ 6253.143056] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [ 6253.143101] remoteproc remoteproc8: powering up 3008c000.txpru
    [ 6253.146874] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si4
    [ 6253.146934] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    platform/8000000.ethernet:
      name switch_mode type driver-specific
        values:
          cmode runtime value false
    platform/icssg1-eth:
      name cut_thru type driver-specific
        values:
          cmode runtime value 0
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg                                          
    145:        158        263  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        150        191  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        169        168  MSI-INTA 1971824 Level     icssg1-eth
    261:        148        180  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# ping 192.168.10.30                                                        
    PING 192.168.10.30 (192.168.10.30) 56(84) bytes of data.
    64 bytes from 192.168.10.30: icmp_seq=1 ttl=64 time=0.688 ms
    64 bytes from 192.168.10.30: icmp_seq=2 ttl=64 time=0.297 ms
    64 bytes from 192.168.10.30: icmp_seq=3 ttl=64 time=0.389 ms
    64 bytes from 192.168.10.30: icmp_seq=4 ttl=64 time=0.301 ms
    64 bytes from 192.168.10.30: icmp_seq=5 ttl=64 time=0.368 ms
    64 bytes from 192.168.10.30: icmp_seq=6 ttl=64 time=0.317 ms
    64 bytes from 192.168.10.30: icmp_seq=7 ttl=64 time=0.384 ms
    64 bytes from 192.168.10.30: icmp_seq=8 ttl=64 time=0.330 ms
    64 bytes from 192.168.10.30: icmp_seq=9 ttl=64 time=0.384 ms
    64 bytes from 192.168.10.30: icmp_seq=10 ttl=64 time=0.398 ms
    64 bytes from 192.168.10.30: icmp_seq=11 ttl=64 time=0.376 ms
    64 bytes from 192.168.10.30: icmp_seq=12 ttl=64 time=0.346 ms
    64 bytes from 192.168.10.30: icmp_seq=13 ttl=64 time=0.416 ms
    64 bytes from 192.168.10.30: icmp_seq=14 ttl=64 time=0.300 ms
    64 bytes from 192.168.10.30: icmp_seq=15 ttl=64 time=0.362 ms
    64 bytes from 192.168.10.30: icmp_seq=16 ttl=64 time=0.314 ms
    64 bytes from 192.168.10.30: icmp_seq=17 ttl=64 time=0.384 ms
    64 bytes from 192.168.10.30: icmp_seq=18 ttl=64 time=0.334 ms
    64 bytes from 192.168.10.30: icmp_seq=19 ttl=64 time=0.381 ms
    64 bytes from 192.168.10.30: icmp_seq=20 ttl=64 time=0.368 ms
    64 bytes from 192.168.10.30: icmp_seq=21 ttl=64 time=0.377 ms
    64 bytes from 192.168.10.30: icmp_seq=22 ttl=64 time=0.321 ms
    64 bytes from 192.168.10.30: icmp_seq=23 ttl=64 time=0.382 ms
    64 bytes from 192.168.10.30: icmp_seq=24 ttl=64 time=0.301 ms^C
    --- 192.168.10.30 ping statistics ---
    24 packets transmitted, 24 received, 0% packet loss, time 23591ms
    rtt min/avg/max/mdev = 0.297/0.367/0.688/0.075 ms
    root@am64xx-evm:~# ip link set dev eth1 down
    [ 6444.723495] icssg-prueth icssg1-eth eth1: Link is Down
    root@am64xx-evm:~# ip link set dev eth2 down                                                        
    [ 6450.139479] icssg-prueth icssg1-eth eth2: Link is Down
    [ 6450.144885] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [ 6450.144957] remoteproc remoteproc14: stopped remote processor 30084000.rtu
    [ 6450.144968] remoteproc remoteproc13: stopped remote processor 300b4000.pru
    [ 6450.144979] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [ 6450.144990] remoteproc remoteproc16: stopped remote processor 30086000.rtu
    [ 6450.145000] remoteproc remoteproc15: stopped remote processor 300b8000.pru
    root@am64xx-evm:~# [ 6505.188446] page_pool_release_retry() stalled pool shutdown 366 inflight 60 sc
    
    root@am64xx-evm:~# [ 6510.628443] page_pool_release_retry() stalled pool shutdown 332 inflight 60 sc
    
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    root@am64xx-evm:~# ip link set dev eth1 up  
    [ 6537.568931] remoteproc remoteproc13: powering up 300b4000.pru
    [ 6537.569233] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
    [ 6537.569270] remoteproc remoteproc13: unsupported resource 5
    [ 6537.569300] remoteproc remoteproc13: remote processor 300b4000.pru is now up
    [ 6537.569341] remoteproc remoteproc14: powering up 30084000.rtu
    [ 6537.571621] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz6
    [ 6537.571681] remoteproc remoteproc14: remote processor 30084000.rtu is now up
    [ 6537.571719] remoteproc remoteproc7: powering up 3008a000.txpru
    [ 6537.571886] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si2
    [ 6537.571918] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [ 6537.572192] remoteproc remoteproc15: powering up 300b8000.pru
    [ 6537.572314] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
    [ 6537.572331] remoteproc remoteproc15: unsupported resource 5
    root@am64xx-evm:~# [ 6537.572354] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [ 6537.572373] remoteproc remoteproc16: powering up 30086000.rtu
    [ 6537.577569] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz4
    [ 6537.577632] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [ 6537.577674] remoteproc remoteproc8: powering up 3008c000.txpru
    [ 6537.577860] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si4
    [ 6537.577892] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [ 6537.584932] pps pps1: new PPS source ptp2
    
    root@am64xx-evm:~# ip link set dev eth2 up
    root@am64xx-evm:~# [ 6559.333035] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow contf
    [ 6565.604456] page_pool_release_retry() stalled pool shutdown 366 inflight 120 sec
    [ 6571.044456] page_pool_release_retry() stalled pool shutdown 332 inflight 120 sec
    [ 6575.525044] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbps/Full - flow control off
    
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        198        329  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        185        194  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        184        196  MSI-INTA 1971824 Level     icssg1-eth
    261:        161        183  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ping 192.168.10.30                                                        
    PING 192.168.10.30 (192.168.10.30) 56(84) bytes of data.
    64 bytes from 192.168.10.30: icmp_seq=1 ttl=64 time=0.636 ms
    [ 6626.020463] page_pool_release_retry() stalled pool shutdown 366 inflight 181 sec
    64 bytes from 192.168.10.30: icmp_seq=2 ttl=64 time=0.413 ms
    64 bytes from 192.168.10.30: icmp_seq=3 ttl=64 time=0.369 ms
    64 bytes from 192.168.10.30: icmp_seq=4 ttl=64 time=0.408 ms
    64 bytes from 192.168.10.30: icmp_seq=5 ttl=64 time=0.368 ms
    64 bytes from 192.168.10.30: icmp_seq=6 ttl=64 time=0.409 ms
    64 bytes from 192.168.10.30: icmp_seq=7 ttl=64 time=0.407 ms
    [ 6631.460451] page_pool_release_retry() stalled pool shutdown 332 inflight 181 sec
    64 bytes from 192.168.10.30: icmp_seq=8 ttl=64 time=0.444 ms
    64 bytes from 192.168.10.30: icmp_seq=9 ttl=64 time=0.393 ms
    64 bytes from 192.168.10.30: icmp_seq=10 ttl=64 time=0.392 ms
    64 bytes from 192.168.10.30: icmp_seq=11 ttl=64 time=0.386 ms
    64 bytes from 192.168.10.30: icmp_seq=12 ttl=64 time=0.402 ms
    64 bytes from 192.168.10.30: icmp_seq=13 ttl=64 time=0.374 ms
    64 bytes from 192.168.10.30: icmp_seq=14 ttl=64 time=0.436 ms
    64 bytes from 192.168.10.30: icmp_seq=15 ttl=64 time=0.392 ms
    64 bytes from 192.168.10.30: icmp_seq=16 ttl=64 time=0.413 ms
    ^C
    --- 192.168.10.30 ping statistics ---
    16 packets transmitted, 16 received, 0% packet loss, time 15369ms
    rtt min/avg/max/mdev = 0.368/0.415/0.636/0.060 ms
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.6.58-rt45-ti-rt-01780-gc79d7ef3a56f-dirty #1 SMP PREEMPT_RT Wed Nov 27 14:15:26 x
    root@am64xx-evm:~# 

    EVM2:

    Save New Duplicate & Edit Just Text Twitter
    root@am64xx-evm:~# ./hsr_setup_v2.sh hsr2 on enable 192.168.10.20 cutthru 257                
    ip=192.168.10.20
    if=hsr2
    mac=70:ff:76:1f:3d:c6
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hw_offload=on
    forwarding_method=cutthru
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    RTNETLINK answers: Device or resource busy
    Enabling cutthru 257
    [ 6255.508209] icssg-prueth icssg1-eth: Cut-Thru not supported in MAC mode
    kernel answers: Invalid argument
    [ 6255.547306] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [ 6255.553653] remoteproc remoteproc16: stopped remote processor 30084000.rtu
    [ 6255.553679] remoteproc remoteproc15: stopped remote processor 300b4000.pru
    [ 6255.553694] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [ 6255.553704] remoteproc remoteproc14: stopped remote processor 30086000.rtu
    [ 6255.553714] remoteproc remoteproc13: stopped remote processor 300b8000.pru
    [ 6255.554000] remoteproc remoteproc15: powering up 300b4000.pru
    [ 6255.569223] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, size8
    [ 6255.569265] remoteproc remoteproc15: unsupported resource 5
    [ 6255.569294] remoteproc remoteproc15: remote processor 300b4000.pru is now up
    [ 6255.569343] remoteproc remoteproc16: powering up 30084000.rtu
    [ 6255.575590] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, size6
    [ 6255.575677] remoteproc remoteproc16: remote processor 30084000.rtu is now up
    [ 6255.575721] remoteproc remoteproc7: powering up 3008a000.txpru
    [ 6255.577485] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, siz2
    [ 6255.577546] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [ 6255.578290] remoteproc remoteproc13: powering up 300b8000.pru
    [ 6255.581140] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, size8
    [ 6255.581185] remoteproc remoteproc13: unsupported resource 5
    [ 6255.581214] remoteproc remoteproc13: remote processor 300b8000.pru is now up
    [ 6255.581260] remoteproc remoteproc14: powering up 30086000.rtu
    [ 6255.583795] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, size4
    [ 6255.583852] remoteproc remoteproc14: remote processor 30086000.rtu is now up
    [ 6255.583900] remoteproc remoteproc8: powering up 3008c000.txpru
    [ 6255.585529] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, siz4
    [ 6255.585586] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    platform/8000000.ethernet:
      name switch_mode type driver-specific
        values:
          cmode runtime value false
    platform/icssg1-eth:
      name cut_thru type driver-specific
        values:
          cmode runtime value 0
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg                                           
    145:        266        159  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        127        212  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        171        148  MSI-INTA 1971824 Level     icssg1-eth
    261:        140        196  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# [ 6448.294219] icssg-prueth icssg1-eth eth1: Link is Down
    
    root@am64xx-evm:~# ip link set dev eth1 down                                                
    root@am64xx-evm:~# ip link set dev eth2 down                                                         
    [ 6471.799776] icssg-prueth icssg1-eth eth2: Link is Down
    [ 6471.805044] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [ 6471.805107] remoteproc remoteproc16: stopped remote processor 30084000.rtu
    [ 6471.805117] remoteproc remoteproc15: stopped remote processor 300b4000.pru
    [ 6471.805128] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [ 6471.805137] remoteproc remoteproc14: stopped remote processor 30086000.rtu
    [ 6471.805147] remoteproc remoteproc13: stopped remote processor 300b8000.pru
    root@am64xx-evm:~# [ 6528.677629] page_pool_release_retry() stalled pool shutdown 530 inflight 60 sec
    [ 6532.261631] page_pool_release_retry() stalled pool shutdown 343 inflight 60 sec
    
    root@am64xx-evm:~# ip link set dev eth1 up                                                     
    [ 6553.495535] remoteproc remoteproc15: powering up 300b4000.pru
    [ 6553.495881] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, size8
    [ 6553.495911] remoteproc remoteproc15: unsupported resource 5
    [ 6553.495941] remoteproc remoteproc15: remote processor 300b4000.pru is now up
    [ 6553.495973] remoteproc remoteproc16: powering up 30084000.rtu
    [ 6553.496122] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, size6
    [ 6553.496154] remoteproc remoteproc16: remote processor 30084000.rtu is now up
    [ 6553.496177] remoteproc remoteproc7: powering up 3008a000.txpru
    [ 6553.496296] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, siz2
    [ 6553.496326] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [ 6553.500665] remoteproc remoteproc13: powering up 300b8000.pru
    [ 6553.500901] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, size8
    [ 6553.500927] remoteproc remoteproc13: unsupported resource 5
    [ 6553.500955] remoteproc remoteproc13: remote processor 300b8000.pru is now up
    [ 6553.500994] remoteproc remoteproc14: powering up 30086000.rtu
    [ 6553.501141] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, size4
    [ 6553.501174] remoteproc remoteproc14: remote processor 30086000.rtu is now up
    [ 6553.501195] remoteproc remoteproc8: powering up 3008c000.txpru
    [ 6553.501311] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, siz4
    [ 6553.501340] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [ 6553.564689] pps pps1: new PPS source ptp2
    root@am64xx-evm:~# ip link set dev eth1[ 6556.646258] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbf
    ^C
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ip link set dev eth2 up                                                           
    root@am64xx-evm:~# [ 6583.846220] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow contrf
    [ 6589.093636] page_pool_release_retry() stalled pool shutdown 530 inflight 120 sec
    
    root@am64xx-evm:~# 
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg[ 6592.677635] page_pool_release_retry() stalledc
    
    145:        304        220  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        162        215  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        172        148  MSI-INTA 1971824 Level     icssg1-eth
    261:        157        201  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# uname -a[ 6649.509646] page_pool_release_retry() stalled pool shutdown 530 infligc
    
    Linux am64xx-evm 6.6.58-rt45-ti-rt-01780-gc79d7ef3a56f-dirty #1 SMP PREEMPT_RT Wed Nov 27 14:15:26 Ux
    root@am64xx-evm:~# [ 6653.093632] page_pool_release_retry() stalled pool shutdown 343 inflight 181 sc
    [ 6709.925646] page_pool_release_retry() stalled pool shutdown 530 inflight 241 sec
    [ 6713.509628] page_pool_release_retry() stalled pool shutdown 343 inflight 241 sec
    

    EVM3:

    Save New Duplicate & Edit Just Text Twitter
    root@am64xx-evm:~# ./hsr_setup_v2.sh hsr3 on enable 192.168.10.30 cutthru 257               
    ip=192.168.10.30
    if=hsr3
    mac=70:ff:76:1f:3c:46
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hw_offload=on
    forwarding_method=cutthru
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    RTNETLINK answers: Device or resource busy
    Enabling cutthru 257
    [ 6261.462996] icssg-prueth icssg1-eth: Cut-Thru not supported in MAC mode
    kernel answers: Invalid argument
    [ 6261.495114] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [ 6261.505266] remoteproc remoteproc14: stopped remote processor 30084000.rtu
    [ 6261.505293] remoteproc remoteproc13: stopped remote processor 300b4000.pru
    [ 6261.505306] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [ 6261.505316] remoteproc remoteproc16: stopped remote processor 30086000.rtu
    [ 6261.505325] remoteproc remoteproc15: stopped remote processor 300b8000.pru
    [ 6261.507710] remoteproc remoteproc13: powering up 300b4000.pru
    [ 6261.515153] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
    [ 6261.515200] remoteproc remoteproc13: unsupported resource 5
    [ 6261.515229] remoteproc remoteproc13: remote processor 300b4000.pru is now up
    [ 6261.515276] remoteproc remoteproc14: powering up 30084000.rtu
    [ 6261.519316] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz6
    [ 6261.519377] remoteproc remoteproc14: remote processor 30084000.rtu is now up
    [ 6261.519422] remoteproc remoteproc7: powering up 3008a000.txpru
    [ 6261.522801] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si2
    [ 6261.522862] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [ 6261.523077] remoteproc remoteproc15: powering up 300b8000.pru
    [ 6261.525759] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
    [ 6261.525803] remoteproc remoteproc15: unsupported resource 5
    [ 6261.525831] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [ 6261.525876] remoteproc remoteproc16: powering up 30086000.rtu
    [ 6261.528737] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz4
    [ 6261.528798] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [ 6261.528844] remoteproc remoteproc8: powering up 3008c000.txpru
    [ 6261.530116] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si4
    [ 6261.530176] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    platform/8000000.ethernet:
      name switch_mode type driver-specific
        values:
          cmode runtime value false
    platform/icssg1-eth:
      name cut_thru type driver-specific
        values:
          cmode runtime value 0
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg                                          
    145:        195        227  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        212        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        116  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        123  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        195        231  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        213        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        117  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        195        231  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        214        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        117  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        195        237  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        214        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        120  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        195        245  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        214        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        126  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        195        247  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        214        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        127  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        195        248  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        214        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        128  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        195        251  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        214        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        217        130  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        206        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        214        128  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        224        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        125  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# [ 6439.142255] icssg-prueth icssg1-eth eth1: Link is Down
    [ 6468.966050] icssg-prueth icssg1-eth eth2: Link is Down
    
    root@am64xx-evm:~# ip link set dev eth1 down
    root@am64xx-evm:~# ip link set dev eth2 down                                                        
    [ 6482.481014] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [ 6482.481691] remoteproc remoteproc14: stopped remote processor 30084000.rtu
    [ 6482.481708] remoteproc remoteproc13: stopped remote processor 300b4000.pru
    [ 6482.481720] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [ 6482.481730] remoteproc remoteproc16: stopped remote processor 30086000.rtu
    [ 6482.481739] remoteproc remoteproc15: stopped remote processor 300b8000.pru
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    root@am64xx-evm:~# [ 6539.109648] page_pool_release_retry() stalled pool shutdown 362 inflight 60 sc
    [ 6542.949658] page_pool_release_retry() stalled pool shutdown 331 inflight 60 sec
    
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ip link set dev eth1 up                                                          
    [ 6566.528024] remoteproc remoteproc13: powering up 300b4000.pru
    [ 6566.528335] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
    [ 6566.528362] remoteproc remoteproc13: unsupported resource 5
    [ 6566.528391] remoteproc remoteproc13: remote processor 300b4000.pru is now up
    [ 6566.528428] remoteproc remoteproc14: powering up 30084000.rtu
    [ 6566.528571] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz6
    [ 6566.528605] remoteproc remoteproc14: remote processor 30084000.rtu is now up
    [ 6566.533777] remoteproc remoteproc7: powering up 3008a000.txpru
    [ 6566.535907] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si2
    [ 6566.535973] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [ 6566.536264] remoteproc remoteproc15: powering up 300b8000.pru
    [ 6566.536421] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
    [ 6566.536441] remoteproc remoteproc15: unsupported resource 5
    [ 6566.536464] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [ 6566.536484] remoteproc remoteproc16: powering up 30086000.rtu
    [ 6566.536597] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz4
    root@am64xx-evm:~# [ 6566.538735] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [ 6566.538806] remoteproc remoteproc8: powering up 3008c000.txpru
    [ 6566.539040] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si4
    [ 6566.539081] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    [ 6566.543135] pps pps1: new PPS source ptp2
    [ 6569.702284] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbps/Full - flow control off
    
    root@am64xx-evm:~# ip link set dev eth2 up
    root@am64xx-evm:~# [ 6579.750251] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow contf
    
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        278        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        229        149  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        253        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        138  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# [ 6599.525644] page_pool_release_retry() stalled pool shutdown 362 inflight 120 c
    
    root@am64xx-evm:~# [ 6603.365659] page_pool_release_retry() stalled pool shutdown 331 inflight 120 c
    
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        296        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        229        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        261        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        142  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        296        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        229        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        261        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        142  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        297        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        230        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        262        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        143  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        297        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        230        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        263        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        144  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        297        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        230        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        263        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        144  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        298        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        263        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        144  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        298        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        263        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        144  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        298        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        267        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        146  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        299        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        267        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        146  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        306        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        273        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        311        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        277        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        313        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        278        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        315        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        279        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        316        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        280        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        317        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        281        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        323        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        284        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    145:        325        253  MSI-INTA 1970792 Level     icssg1-eth-tx0
    149:        231        155  MSI-INTA 1970796 Level     icssg1-eth-tx0
    245:        286        131  MSI-INTA 1971824 Level     icssg1-eth
    261:        204        147  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.6.58-rt45-ti-rt-01780-gc79d7ef3a56f-dirty #1 SMP PREEMPT_RT Wed Nov 27 14:15:26 x
    root@am64xx-evm:~# [ 6659.941643] page_pool_release_retry() stalled pool shutdown 362 inflight 181 c
    [ 6663.781648] page_pool_release_retry() stalled pool shutdown 331 inflight 181 sec
    [ 6720.357641] page_pool_release_retry() stalled pool shutdown 362 inflight 241 sec
    [ 6724.197655] page_pool_release_retry() stalled pool shutdown 331 inflight 241 sec
    

    -Daolin

  • Hi Daolin,

    Tianyi is on vacation and I will try to do this before my vacation... I hope question will not be locked before that

  • Hi Milan, 

    Don't worry, the thread will only be locked if the oldest response is older than 30 days. If it gets locked, I can also unlock it and I will watch/track this thread.

    -Daolin

  • Hi Milan/Tianyi,

    1. I was able to reproduce this issue of no ping on 100Mbps line rate configured with ethtool commands, although I did so on SDK 10.1. I've filed a bug on this issue and informed the internal team regarding this issue. I suspect this slipped through our testing because 100Mbps line rate case was not added as an automated test case which I hope to mitigate by adding 100Mbps case as automated test case as well.

    I spent some time looking into this. Because there were several recent changes to HSR firmware and Linux driver changes to support this, I had to move to the latest SDK 11.1 for testing. On top of this SDK there also is an ICSSG Linux driver patch series that needs to be applied to fix ICSSG buffer allocation. This patch series was not integrated into SDK 11.1 because it was getting up streamed before it made it into SDK 11.1. Details of the changes are below.

    Changes that should already be included in SDK 11.1:

    Changes that need to be applied ontop of SDK 11.1:

    • Exact patch that I applied: https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/tiL6.12_2D00_v2_2D00_PENDING_2D00_net_2D00_ti_2D00_icssg_2D00_prueth_2D00_Fix_2D00_buffer_2D00_allocation_2D00_for_2D00_ICSSG_2800_1_2900_.patch
    • More details on this patch: https://lore.kernel.org/all/20250717094220.546388-1-h-mittal1@ti.com/ 

    What I found is that ping at 100M works only for a certain sequence. See below for detailed sequence steps. Would the second sequence below work as a workaround for you? 

    1. When the below sequence is used, ping fails at 100M:

    1. Set 100M on eth1 and eth2
    2. Bring up eth interfaces if they are not brought up yet
    3. Set up hsr offload + cut-through
    4. Ping from EVM1 to EVM3

    2. When a different sequence is used, ping passes at 100M:

    1. Ensure eth interfaces are up if they are not brought up yet
    2. Set up hsr offload + cut-through
    3. Set 100M on eth1 & eth2
    4. Ping EVM1 to EVM3
    2. Since for the time being due to the 100Mbps ping issue, I tested this case with 1Gbps line rate (I kept the network services enabled), and I see that even after bringing down and back up the eth1 and eth2 interfaces on all 3 EVMs in my HSR ring setup after the hsr interfaces were already setup, the IRQ count seems to only increase on one port at a time during a ping from EVM1 to EVM3, which seems to be the expected behavior? I checked this by dumping the icssg /proc/interrupts during when ping is happening and checking which counters were incrementing during the ping. Is there something I am missing here? Or this behavior only observable on 100Mbps line rate? If so, how were you able to test this case on 100Mbps given the problem with the ping failure?

    Using the workaround sequence I described above, I tried testing this again at 100Mbps and I still see that the IRQ count seems to only increase on one port at a time during a ping from EVM1 to EVM3, which still seems to be correct behavior? Please let me know if I'm misunderstanding something here.

    EVM1 log: https://gist.github.com/dao-qiu/e9be1f21852f022716bed997c1af6d95

    EVM2 log: https://gist.github.com/dao-qiu/4797213cf81ba6764c4ddc7b4fffc58d

    EVM3 log: https://gist.github.com/dao-qiu/634e8b60d51a5c08526ca9ba58e70332

    -Daolin

  • Hello Daolin, 

    Thank you for your fast answer. 

    2. Since for the time being due to the 100Mbps ping issue, I tested this case with 1Gbps line rate (I kept the network services enabled), and I see that even after bringing down and back up the eth1 and eth2 interfaces on all 3 EVMs in my HSR ring setup after the hsr interfaces were already setup, the IRQ count seems to only increase on one port at a time during a ping from EVM1 to EVM3, which seems to be the expected behavior? I checked this by dumping the icssg /proc/interrupts during when ping is happening and checking which counters were incrementing during the ping. Is there something I am missing here? Or this behavior only observable on 100Mbps line rate? If so, how were you able to test this case on 100Mbps given the problem with the ping failure?

    You are right, the expected behavior is to only increase on one port at a time. I indeed only tested on 100Mbps link speed. I could reproduce this by having a Hirshman redBox that is configured to 100Mbps link speed. With the auto negociation, the DUT gets automatically the 100Mbps link speed. (so I don't have to set manually 100 Mbps link speed to the DUT)

  • Thank you for helping and sharing different patches.

    I need to check with the internal Team about this workaround and come back ASAP. 

    - Tianyi

  • Hi Daolin, 

    Is it possible to apply the patches that mentionned above on the SDK 11.00.09.04 (Apr 4, 2025) to find similar result ? (currently, we are not sure if we will be based on SDK 11.00 or 11.01). 

    Also, I saw on the logs that when applying patches + SDK 11.01, It seems the second bug doesn't exist anymore : 

    with is

    Sender is set to 100 mbps link speed

    1 : start hsr script on the DUT 

    2 : down eth1 and eth2 of the DUT 

    3 : up eth1 and eth2 of the DUT

    4 : with cat /proc/interrupts, only one counter increments, 

    Could you confirm my understanding ? 

    Thank you very much for your time

    - Tianyi 

  • Hi Tianyi, 

    Is it possible to apply the patches that mentionned above on the SDK 11.00.09.04 (Apr 4, 2025) to find similar result

    When I did this before and applied the patches ontop of SDK 11.0, I noticed that eth1 and eth2 interfaces do not show up at all (even if I checked ifconfig -a). I believe that in SDK 11.0, it potentially could be missing some changes that are necessary to read the new HSR firmwares which are now named starting with "am64x-" instead of "am65x-". The suggestion I got was to use the latest SDK image instead.

    What I did is a test with 3-EVM setup in an HSR loop instead of 2-EVM setup. EVM1 (sender) <---> EVM2 (switch/bridge) <---> EVM3 (destination)

    1. Ensure eth interfaces are up if they are not brought up yet
    2. Set up hsr offload + cut-through
    3. Set 100M on eth1 & eth2 with ethtool
    4. Ping EVM1 (sender) to EVM3 (destination) and check no packet loss
    5. Bring down and back up eth1 and eth2 on EVM1 with ip link set dev <interface name> down/up
    6. Ping EVM1 (sender) to EVM3 (destination) again
    7. Check cat /proc/interrupts on EVM3 (destination) and see that IRQ count seems to only increase on one port at a time during the ping
    What I found is that ping at 100M works only for a certain sequence. See below for detailed sequence steps. Would the second sequence below work as a workaround for you? 

    I just wanted to check, does the workaround work for you?

    -Daolin

  • Hi Daolin,

    Thank you for the fast answer. I need to confirm with internal Team. Because currently, we are based on SDK 11.0, if we would like to use your workaround, we might need to apply some/all patches kernel + ti-pru firmware from 11.0 to 11.1 . I need to double check to be sure.

    Thank you for your understanding

    Tianyi 

  • Hi Tianyi, 

    No problem, I'll wait for your response.

    -Daolin

  • Hi Daolin, 

    I’ve just received feedback from the internal team. While the workaround can serve as a temporary solution, implementing the fix for this bug would be preferable. Do you have an estimated timeline for when the fix will be available?

    - Tianyi 

  •  Also, I gave a quick try on my side about the procedure by using the firmware and the kernel + patch based on SDK 11.1. 

    1. Ensure eth interfaces are up if they are not brought up yet
    2. Set up hsr offload + cut-through
    3. Set 100M on eth1 & eth2 with ethtool
    4. Ping EVM1 (sender) to EVM3 (destination) and check no packet loss
    5. Bring down and back up eth1 and eth2 on EVM1 with ip link set dev <interface name> down/up
    6. Ping EVM1 (sender) to EVM3 (destination) again
    7. Check cat /proc/interrupts on EVM3 (destination) and see that IRQ count seems to only increase on one port at a time during the ping

    After doing this, I now indeed can ping from EVM1 to EVM3 but when I check EVM3, I still see that IRQ counter is increasing on both port eth1 and eth2. 

    Here are the logs : 

    EVM1 : 

    am64xx-evm login: root                                                                              
    root@am64xx-evm:~# ip link set dev eth1 up                                                          
     link set dev eth2 uproot@am64xx-evm:~# ip link set dev eth2 up                                     
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.1                      
    hsr_hw eth1 eth2 192.168.1.1                                                                        
    ip=192.168.1.1                                                                                      
    if=hsr0                                                                                             
    mac=70:ff:76:1f:40:90                                                                               
    slave-a=eth1                                                                                        
    slave-b=eth2                                                                                        
    device=platform/icssg1-eth                                                                          
    hsr-tag-ins-offload: off                                                                            
    hsr-tag-rm-offload: off                                                                             
    hsr-fwd-offload: off                                                                                
    hsr-dup-offload: off                                                                                
    Actual changes:                                                                                     
    hsr-tag-ins-offload: on [not requested]                                                             
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: on                                                                             
    hsr-tag-rm-offload: on                                                                              
    hsr-fwd-offload: on                                                                                 
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: off                                                                            
    hsr-tag-rm-offload: off                                                                             
    hsr-fwd-offload: off                                                                                
    hsr-dup-offload: off                                                                                
    Actual changes:                                                                                     
    hsr-tag-ins-offload: on [not requested]                                                             
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: on                                                                             
    hsr-tag-rm-offload: on                                                                              
    hsr-fwd-offload: on                                                                                 
    hsr-dup-offload: on                                                                                 
    root@am64xx-evm:~# ping 192.168.1.2 -c 10 -i 0.1                                                    
    PING 192.168.1.2 (192.168.1.2): 56 data bytes                                                       
    64 bytes from 192.168.1.2: seq=0 ttl=64 time=0.855 ms                                               
    64 bytes from 192.168.1.2: seq=1 ttl=64 time=0.388 ms                                               
    64 bytes from 192.168.1.2: seq=2 ttl=64 time=0.301 ms                                               
    64 bytes from 192.168.1.2: seq=3 ttl=64 time=0.358 ms                                               
    64 bytes from 192.168.1.2: seq=4 ttl=64 time=0.267 ms                                               
    64 bytes from 192.168.1.2: seq=5 ttl=64 time=0.395 ms                                               
    64 bytes from 192.168.1.2: seq=6 ttl=64 time=0.321 ms                                               
    64 bytes from 192.168.1.2: seq=7 ttl=64 time=0.525 ms                                               
    64 bytes from 192.168.1.2: seq=8 ttl=64 time=0.348 ms                                               
    64 bytes from 192.168.1.2: seq=9 ttl=64 time=0.360 ms                                               
                                                                                                        
    --- 192.168.1.2 ping statistics ---                                                                 
    10 packets transmitted, 10 packets received, 0% packet loss                                         
    round-trip min/avg/max = 0.267/0.411/0.855 ms                                                       
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full                                            
    ool -s eth2 speedroot@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full                           
    root@am64xx-evm:~# ping 192.168.1.2 -c 10 -i 0.1                                                    
    PING 192.168.1.2 (192.168.1.2): 56 data bytes                                                       
    64 bytes from 192.168.1.2: seq=0 ttl=64 time=0.720 ms                                               
    64 bytes from 192.168.1.2: seq=1 ttl=64 time=0.387 ms                                               
    64 bytes from 192.168.1.2: seq=2 ttl=64 time=0.417 ms                                               
    64 bytes from 192.168.1.2: seq=3 ttl=64 time=0.299 ms                                               
    64 bytes from 192.168.1.2: seq=4 ttl=64 time=0.291 ms                                               
    64 bytes from 192.168.1.2: seq=5 ttl=64 time=0.289 ms                                               
    64 bytes from 192.168.1.2: seq=6 ttl=64 time=0.389 ms                                               
    64 bytes from 192.168.1.2: seq=7 ttl=64 time=0.362 ms                                               
    64 bytes from 192.168.1.2: seq=8 ttl=64 time=0.274 ms                                               
    64 bytes from 192.168.1.2: seq=9 ttl=64 time=0.343 ms                                               
                                                                                                        
    --- 192.168.1.2 ping statistics ---                                                                 
    10 packets transmitted, 10 packets received, 0% packet loss                                         
    round-trip min/avg/max = 0.274/0.377/0.720 ms                                                       
    root@am64xx-evm:~# ping 192.168.1.2 -c 10 -i 0.1                                                    
    PING 192.168.1.2 (192.168.1.2): 56 data bytes                                                       
    64 bytes from 192.168.1.2: seq=0 ttl=64 time=0.753 ms                                               
    64 bytes from 192.168.1.2: seq=1 ttl=64 time=0.461 ms                                               
    64 bytes from 192.168.1.2: seq=2 ttl=64 time=0.364 ms                                               
    64 bytes from 192.168.1.2: seq=3 ttl=64 time=0.362 ms                                               
    64 bytes from 192.168.1.2: seq=4 ttl=64 time=0.274 ms                                               
    64 bytes from 192.168.1.2: seq=5 ttl=64 time=0.376 ms                                               
    64 bytes from 192.168.1.2: seq=6 ttl=64 time=0.341 ms                                               
    64 bytes from 192.168.1.2: seq=7 ttl=64 time=0.286 ms                                               
    64 bytes from 192.168.1.2: seq=8 ttl=64 time=0.424 ms                                               
    64 bytes from 192.168.1.2: seq=9 ttl=64 time=0.288 ms                                               
                                                                                                        
    --- 192.168.1.2 ping statistics ---                                                                 
    10 packets transmitted, 10 packets received, 0% packet loss                                         
    round-trip min/avg/max = 0.274/0.392/0.753 ms                                                       
    root@am64xx-evm:~# ping 192.168.1.2 -c 10 -i 0.1                                                    
    PING 192.168.1.2 (192.168.1.2): 56 data bytes                                                       
    64 bytes from 192.168.1.2: seq=0 ttl=64 time=0.526 ms                                               
    64 bytes from 192.168.1.2: seq=1 ttl=64 time=0.370 ms                                               
    64 bytes from 192.168.1.2: seq=2 ttl=64 time=0.352 ms                                               
    64 bytes from 192.168.1.2: seq=3 ttl=64 time=0.306 ms                                               
    64 bytes from 192.168.1.2: seq=4 ttl=64 time=0.314 ms                                               
    64 bytes from 192.168.1.2: seq=5 ttl=64 time=0.322 ms                                               
    64 bytes from 192.168.1.2: seq=6 ttl=64 time=0.260 ms                                               
    64 bytes from 192.168.1.2: seq=7 ttl=64 time=0.388 ms                                               
    64 bytes from 192.168.1.2: seq=8 ttl=64 time=0.343 ms                                               
    64 bytes from 192.168.1.2: seq=9 ttl=64 time=0.282 ms                                               
                                                                                                        
    --- 192.168.1.2 ping statistics ---                                                                 
    10 packets transmitted, 10 packets received, 0% packet loss                                         
    round-trip min/avg/max = 0.260/0.346/0.526 ms                                                       
    root@am64xx-evm:~# 
    

    EVM2: 

    am64xx-evm login: root                                                                              
    root@am64xx-evm:~# ip link set dev eth1 up                                                          
    link set dev eth2 uproot@am64xx-evm:~# ip link set dev eth2 up                                      
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.10                     
    hsr_hw eth1 eth2 192.168.1.10                                                                       
    ip=192.168.1.10                                                                                     
    if=hsr0                                                                                             
    mac=70:ff:76:1e:2d:e9                                                                               
    slave-a=eth1                                                                                        
    slave-b=eth2                                                                                        
    device=platform/icssg1-eth                                                                          
    hsr-tag-ins-offload: off                                                                            
    hsr-tag-rm-offload: off                                                                             
    hsr-fwd-offload: off                                                                                
    hsr-dup-offload: off                                                                                
    Actual changes:                                                                                     
    hsr-tag-ins-offload: on [not requested]                                                             
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: on                                                                             
    hsr-tag-rm-offload: on                                                                              
    hsr-fwd-offload: on                                                                                 
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: off                                                                            
    hsr-tag-rm-offload: off                                                                             
    hsr-fwd-offload: off                                                                                
    hsr-dup-offload: off                                                                                
    Actual changes:                                                                                     
    hsr-tag-ins-offload: on [not requested]                                                             
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: on                                                                             
    hsr-tag-rm-offload: on                                                                              
    hsr-fwd-offload: on                                                                                 
    hsr-dup-offload: on

    EVM3 : 

    am64xx-evm login: root
    root@am64xx-evm:~# ip link set dev eth1 up
     link set dev eth2 uproot@am64xx-evm:~# ip link set dev eth2 up
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.2 
    hsr_hw eth1 eth2 192.168.1.2
    ip=192.168.1.2
    if=hsr0
    mac=70:ff:76:1e:e6:f4
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off                                              
    hsr-dup-offload: off                                              
    Actual changes:                                                   
    hsr-tag-ins-offload: on [not requested]                           
    hsr-dup-offload: on                                               
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full 
    tool -s eth2 speed 10root@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg                                           
    146:         66          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         23          0  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:         13          0  MSI-INTA 1971824 Level     icssg1-eth
    262:          1          0  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    146:         81          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         23          0  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:         24          0  MSI-INTA 1971824 Level     icssg1-eth
    262:          1          0  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# echo "EVM3"
    EVM3
    (failed reverse-i-search)`down': ethtool -s eth2 speed 100 ^Cplex full                               
    root@am64xx-evm:~# ip link set dev eth1 down
    root@am64xx-evm:~# ip link set dev eth2 down                                                         
    root@am64xx-evm:~# ip link set dev eth1 up
    root@am64xx-evm:~# ip link set dev eth2 up                                                           
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg                                           
    146:        117          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         26          0  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:         26          0  MSI-INTA 1971824 Level     icssg1-eth
    262:          2          0  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    146:        132          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         32          0  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:         37          0  MSI-INTA 1971824 Level     icssg1-eth
    262:         13          0  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# ethtool eth1
    Settings for eth1:
            Supported ports: [ TP    MII ]
            Supported link modes:   10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Supported pause frame use: No
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  100baseT/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Link partner advertised link modes:  100baseT/Full
            Link partner advertised pause frame use: No
            Link partner advertised auto-negotiation: Yes
            Link partner advertised FEC modes: Not reported
            Speed: 100Mb/s
            Duplex: Full
            Auto-negotiation: on
            master-slave cfg: preferred slave
            master-slave status: slave
            Port: Twisted Pair
            PHYAD: 15
            Transceiver: external
            MDI-X: Unknown
            Current message level: 0x00000000 (0)
                                  
            Link detected: yes
    root@am64xx-evm:~# ethtool eth2
    Settings for eth2:
            Supported ports: [ TP    MII ]
            Supported link modes:   10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Supported pause frame use: No
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  100baseT/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Link partner advertised link modes:  10baseT/Full
                                                 100baseT/Full
                                                 1000baseT/Full
            Link partner advertised pause frame use: No
            Link partner advertised auto-negotiation: Yes
            Link partner advertised FEC modes: Not reported
            Speed: 100Mb/s
            Duplex: Full
            Auto-negotiation: on
            master-slave cfg: preferred slave
            master-slave status: slave
            Port: Twisted Pair
            PHYAD: 3
            Transceiver: external
            MDI-X: Unknown
            Current message level: 0x00000000 (0)
                                  
            Link detected: yes
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    146:        145          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         34          0  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:         38          0  MSI-INTA 1971824 Level     icssg1-eth
    262:         14          0  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# cat /proc/interrupts | grep icssg
    146:        158          0  MSI-INTA 1970792 Level     icssg1-eth-tx0
    150:         34          0  MSI-INTA 1970796 Level     icssg1-eth-tx0
    246:         48          0  MSI-INTA 1971824 Level     icssg1-eth
    262:         24          0  MSI-INTA 1971840 Level     icssg1-eth
    541:          0          0  pruss-intc  24 Level     icssg1-eth
    542:          0          0  pruss-intc  25 Level     icssg1-eth
    root@am64xx-evm:~# 

    Maybe it was clear on my side but by checking a little bit in details the logs,the action "Bring down and back up eth1 and eth2 on EVM1 with ip link set dev <interface name> down/up", should be done on the receiver EVM3 side to reproduce the bug. 

    By checking the logs you shared, it seems it's done on EVM1

     Could you confirm my understanding ? If so, could you try to reproduce this on your side ? 

    Thank you very much for your time. 

    - Tianyi 

  • Hi Tianyi, 

    While the workaround can serve as a temporary solution, implementing the fix for this bug would be preferable. Do you have an estimated timeline for when the fix will be available?

    Thanks for getting back to me on this. Currently, while I'm able to reproduce the 100M ping issue and have reported it, the HSR firmware team has not yet been able to replicate the issue. We should be able to provide a timeline for a fix once they are able to replicate the issue and narrow down root cause. May I ask what the required timeline from your side on this issue is? 

    Maybe it was clear on my side but by checking a little bit in details the logs,the action "Bring down and back up eth1 and eth2 on EVM1 with ip link set dev <interface name> down/up", should be done on the receiver EVM3 side to reproduce the bug. 

    Yes, you're right I only brought down/up the eth1 and eth2 interfaces on EVM1. I will try to re-test with bringing down/up eth1 and eth2 interfaces on EVM3 (receiver end) on Monday and let you know if I can reproduce it. Just to double check, is it just the receiver that needs interfaces brought down/up or all EVMs?

    Please kindly ping this thread if I didn't respond by Tuesday

    -Daolin

  • Hello Daolin, 

    Thank you for the fast answer. About the deadline, ideally, this bug is fixed end of August/Beginning of September 2025.

    Yes, you're right I only brought down/up the eth1 and eth2 interfaces on EVM1. I will try to re-test with bringing down/up eth1 and eth2 interfaces on EVM3 (receiver end) on Monday and let you know if I can reproduce it. Just to double check, is it just the receiver that needs interfaces brought down/up or all EVMs?

    I would say all EVMs (EVM1, EVM2, and EVM3), since we are simulating the restart of the PRU firmware on the receiver, the forwarder, and the sender.

    - Tianyi 

  • Hello Daolin, 

    As you mentioned earlier, there are several changes to the PRU_ICSSG firmware and Linux kernel between SDK versions 11.00.09.04 and 11.1. Do you know whether the fixes will be applied to SDK 11.1 or to version 11.00?

    - Tianyi

  • Hi Tianyi, 

    As you mentioned earlier, there are several changes to the PRU_ICSSG firmware and Linux kernel between SDK versions 11.00.09.04 and 11.1. Do you know whether the fixes will be applied to SDK 11.1 or to version 11.00?

    Since SDK 11.1 and 11.00 are already publicly released, usually any new fixes would go on the ti-linux-6.12.y-cicd branch on git.ti.com (and after passing some internal tests, the changes/fixes will make it onto ti-linux-6.12.y branch). Since these changes/fixes are made after the SDK 11.00 and SDK 11.1 have already been released, usually the changes need to be applied manually by recompiling the kernel and modules. Later, I believe they will be incorporated into the next SDK release SDK 11.2. My understanding is that SDK 11.2 won't be released until end of this year (specific date of release subject to change).

    In the past, what we've done for your team is either provide some patch fix or directed you to the specific commit on the ti-linux-6.12.y-cicd branch. This method, as we've noticed makes it difficult to keep track of what exactly was applied on the software version was used. Additionally, whenever we work on fixing an issue, we usually try to reproduce on the latest SDK rather than try to fix on an older SDK as sometimes changes between an older SDK and the latest SDK may have already fixed some issues.

    Thank you for the fast answer. About the deadline, ideally, this bug is fixed end of August/Beginning of September 2025.

    Thanks for making this clear! 

    Yes, you're right I only brought down/up the eth1 and eth2 interfaces on EVM1. I will try to re-test with bringing down/up eth1 and eth2 interfaces on EVM3 (receiver end) on Monday and let you know if I can reproduce it.
    I would say all EVMs (EVM1, EVM2, and EVM3), since we are simulating the restart of the PRU firmware on the receiver, the forwarder, and the sender.

    I was also able to reproduce the issue (while the workaround to 100M ping issue was used). I recently learned that there should be a fix to the 100M ping issue. https://lore.kernel.org/all/20250731120812.1606839-1-danishanwar@ti.com/ It looks like this fix is currently trying to get accepted upstream so it's not yet been backported to our SDK versions. I manually applied the changes specified in the link and it appears to fix the 100M ping issue and also seems to resolve the HSR duplicate issue. Below are my logs: please take a look/try it out and see if it fixes the issue.

    EVM1: https://gist.github.com/dao-qiu/49c86cebcdcb1d218b5d49992b82e61d 
    EVM2: https://gist.github.com/dao-qiu/e02105b88af47e44648b0665a677cad0 
    EVM3: https://gist.github.com/dao-qiu/a79dbc4e984a0ec33a5846ac4e348667 

    -Daolin

  • Hello Daolin, 

    I applied the patch that you shared on top of Kernel  from SDK 11.1. I'm having these logs.

    I tried first to check if this patch removes PING ISSUE, here are the logs : 

    DUT logs : 

    am64xx-evm login: root                                                                                                                                                                                     
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full                                                                                                                                                   
    s eth2 speed 100 duplex fullroot@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full                                                                                                                       
    root@am64xx-evm:~#                                                                                                                                                                                         
    root@am64xx-evm:~#                                                                                                                                                                                         
    root@am64xx-evm:~#                                                                                                                                                                                         
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.133                                                                                                                           
    hsr_hw eth1 eth2 192.168.1.133                                                                                                                                                                             
    ip=192.168.1.133                                                                                                                                                                                           
    if=hsr0                                                                                                                                                                                                    
    mac=70:ff:76:1f:40:90                                                                                                                                                                                      
    slave-a=eth1                                                                                                                                                                                               
    slave-b=eth2                                                                                                                                                                                               
    device=platform/icssg1-eth                                                                                                                                                                                 
    hsr-tag-ins-offload: off                                                                                                                                                                                   
    hsr-tag-rm-offload: off                                                                                                                                                                                    
    hsr-fwd-offload: off                                                                                                                                                                                       
    hsr-dup-offload: off                                                                                                                                                                                       
    Actual changes:                                                                                                                                                                                            
    hsr-tag-ins-offload: on [not requested]                                                                                                                                                                    
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: on                                                                                                                                                                                    
    hsr-tag-rm-offload: on                                                                                                                                                                                     
    hsr-fwd-offload: on                                                                                                                                                                                        
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: off                                                                                                                                                                                   
    hsr-tag-rm-offload: off                                                                                                                                                                                    
    hsr-fwd-offload: off                                                                                                                                                                                       
    hsr-dup-offload: off                                                                                                                                                                                       
    Actual changes:                                                                                                                                                                                            
    hsr-tag-ins-offload: on [not requested]                                                                                                                                                                    
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: on                                                                                                                                                                                    
    hsr-tag-rm-offload: on                                                                                                                                                                                     
    hsr-fwd-offload: on                                                                                                                                                                                        
    hsr-dup-offload: on
    root@am64xx-evm:~# 2018 Mar  9 12:36:03 am64xx-evm [   71.140475] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 1: transmit queue 0 timed out 5824 ms                                                
    2018 Mar  9 12:36:06 am64xx-evm [   73.764482] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 1: transmit queue 0 timed out 5616 ms                                                                   
    2018 Mar  9 12:36:09 am64xx-evm [   76.772473] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 11456 ms                                                                  
    2018 Mar  9 12:36:11 am64xx-evm [   78.821481] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 10673 ms                                                                  
    2018 Mar  9 12:36:14 am64xx-evm [   81.892477] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 16576 ms                                                                  
    2018 Mar  9 12:36:16 am64xx-evm [   83.941489] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 15793 ms                                                                  
    2018 Mar  9 12:36:19 am64xx-evm [   87.012476] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 21696 ms                                                                  
    2018 Mar  9 12:36:21 am64xx-evm [   89.060483] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 20912 ms                                                                  
    2018 Mar  9 12:36:25 am64xx-evm [   93.156493] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 1: transmit queue 0 timed out 27840 ms                                                                  
    2018 Mar  9 12:36:27 am64xx-evm [   95.204475] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 27056 ms

    Sender logs : 

    I have similar logs

    Is it possible on your side to share a little bit more how you did the test ? 

    On my side, I first 

    do the following commands to Sender AND DUT : 

    ethtool -s eth1 speed 100 duplex full

    ethtool -s eth2 speed 100 duplex full

    Then I start HSR script.

    if I also have a RedBox Hirshmann on my side, so I don't need to set manually 100 MBps with ethtool. I checked if the packets are removed when down/up at both eth1 and eth2. 

    I still have the packets that are not removed. 

    Is it possible on your side to share a little bit more how you did the test ? 

    - Tianyi

    - Tianyi

  • Hi Tianyi, 

    I applied the patch that you shared on top of Kernel  from SDK 11.1.

    Changes that need to be applied ontop of SDK 11.1:

    In addition to the one I shared to address the 100M ping issue, have you tried applying the updated firmware on SDK 11.1? 

    Is it possible on your side to share a little bit more how you did the test ? 

    My steps that resulted in these log outputs were

    1. Connect EVM1 <> EVM2 <> EVM3 in a ring 
    2. Set 100M on eth1 and eth2 with the same ethtool commands you used
    3. Ensure the eth interfaces are brought up
    4. Set up hsr offload + cut-through
    5. Check /proc/interrupts | grep icssg on EVM3
    6. Ping from EVM1 to EVM3 to verify communication
    7. Check /proc/interrupts | grep icssg on EVM3 to see only increments on one ICSSG port
    8. Bring eth1 and eth2 down and back up on all 3 EVMs
    9. Check /proc/interrupts | grep icssg on EVM3
    10. Ping from EVM1 to EVM3 
    11. Check /proc/interrupts | grep icssg on EVM3 to see only increments on one ICSSG port

    -Daolin

  • Hello Daolin, 

    Thank you for sharing the details. Indeed I didn't ensure the eth interfaces are brought up (step 3). When following the steps, the defect PING is fixed. However, when down up eths, the packets are not removed.  

    Here are my logs : 

    EVM1: 

    am64xx-evm login: root                                                                                                                                                                                     
    root@am64xx-evm:~# md5sum /lib/firmware/ti-pruss/am64x-sr2-pru0-prueth-fw.elf                                                                                                                              
    622167e169259236d8372f0972db50c3  /lib/firmware/ti-pruss/am64x-sr2-pru0-prueth-fw.elf                                                                                                                      
    root@am64xx-evm:~# md5sum /lib/firmware/ti-pruss/am64x-sr2-txpru0-prueth-fw.elf                                                                                                                            
    ffaca3d782ad509e69e062996069b7a5  /lib/firmware/ti-pruss/am64x-sr2-txpru0-prueth-fw.elf                                                                                                                    
    root@am64xx-evm:~# uname -a                                                                                                                                                                                
    Linux am64xx-evm 6.12.35-00917-g5d90a9b4777c #1 SMP PREEMPT_RT Thu Aug  7 08:41:00 CEST 2025 aarch64 GNU/Linux                                                                                             
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full                                                                                                                                                   
    root@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full                                                                                                                                                   
    root@am64xx-evm:~# ip link set eth1 up                                                                                                                                                                     
    root@am64xx-evm:~# ip link set eth2 up                                                                                                                                                                     
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.133                                                                                                                           
    hsr_hw eth1 eth2 192.168.1.133                                                                                                                                                                             
    ip=192.168.1.133                                                                                                                                                                                           
    if=hsr0                                                                                                                                                                                                    
    mac=70:ff:76:1f:40:90                                                                                                                                                                                      
    slave-a=eth1                                                                                                                                                                                               
    slave-b=eth2                                                                                                                                                                                               
    device=platform/icssg1-eth                                                                                                                                                                                 
    hsr-tag-ins-offload: off                                                                                                                                                                                   
    hsr-tag-rm-offload: off                                                                                                                                                                                    
    hsr-fwd-offload: off                                                                                                                                                                                       
    hsr-dup-offload: off                                                                                                                                                                                       
    Actual changes:                                                                                                                                                                                            
    hsr-tag-ins-offload: on [not requested]                                                                                                                                                                    
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: on                                                                                                                                                                                    
    hsr-tag-rm-offload: on                                                                                                                                                                                     
    hsr-fwd-offload: on                                                                                                                                                                                        
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: off                                                                                                                                                                                   
    hsr-tag-rm-offload: off                                                                                                                                                                                    
    hsr-fwd-offload: off                                                                                                                                                                                       
    hsr-dup-offload: off                                                                                                                                                                                       
    Actual changes:                                                                                                                                                                                            
    hsr-tag-ins-offload: on [not requested]                                                                                                                                                                    
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: on                                                                                                                                                                                    
    hsr-tag-rm-offload: on                                                                                                                                                                                     
    hsr-fwd-offload: on                                                                                                                                                                                        
    hsr-dup-offload: on                                                                                                                                                                                        
    root@am64xx-evm:~# ping ^C                                                                                                                                                                                 
    root@am64xx-evm:~# ping 192.168.1.2 -c 100 -i 0.1                                                                                                                                                          
    PING 192.168.1.2 (192.168.1.2): 56 data bytes                                                                                                                                                              
    64 bytes from 192.168.1.2: seq=0 ttl=64 time=0.864 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=1 ttl=64 time=0.487 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=2 ttl=64 time=0.373 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=3 ttl=64 time=0.319 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=4 ttl=64 time=0.361 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=5 ttl=64 time=0.293 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=6 ttl=64 time=0.252 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=7 ttl=64 time=0.235 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=8 ttl=64 time=0.359 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=9 ttl=64 time=0.376 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=10 ttl=64 time=0.297 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=11 ttl=64 time=0.383 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=12 ttl=64 time=0.282 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=13 ttl=64 time=0.284 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=14 ttl=64 time=0.351 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=15 ttl=64 time=0.349 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=16 ttl=64 time=0.292 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=17 ttl=64 time=0.291 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=18 ttl=64 time=0.384 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=19 ttl=64 time=0.286 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=20 ttl=64 time=0.254 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=21 ttl=64 time=0.444 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=22 ttl=64 time=0.382 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=23 ttl=64 time=0.341 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=24 ttl=64 time=0.350 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=25 ttl=64 time=0.320 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=26 ttl=64 time=0.262 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=27 ttl=64 time=0.339 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=28 ttl=64 time=0.457 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=29 ttl=64 time=0.272 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=30 ttl=64 time=0.241 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=31 ttl=64 time=0.306 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=32 ttl=64 time=0.272 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=33 ttl=64 time=0.414 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=34 ttl=64 time=0.354 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=35 ttl=64 time=0.292 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=36 ttl=64 time=0.295 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=37 ttl=64 time=0.326 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=38 ttl=64 time=0.404 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=39 ttl=64 time=0.346 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=40 ttl=64 time=0.351 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=41 ttl=64 time=0.385 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=42 ttl=64 time=0.274 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=43 ttl=64 time=0.376 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=44 ttl=64 time=0.333 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=45 ttl=64 time=0.316 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=46 ttl=64 time=0.291 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=47 ttl=64 time=0.266 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=48 ttl=64 time=0.396 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=49 ttl=64 time=0.310 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=50 ttl=64 time=0.283 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=51 ttl=64 time=0.357 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=52 ttl=64 time=0.274 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=53 ttl=64 time=0.314 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=54 ttl=64 time=0.257 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=55 ttl=64 time=0.294 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=56 ttl=64 time=0.300 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=57 ttl=64 time=0.380 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=58 ttl=64 time=0.382 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=59 ttl=64 time=0.343 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=60 ttl=64 time=0.296 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=61 ttl=64 time=0.327 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=62 ttl=64 time=0.252 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=63 ttl=64 time=0.417 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=64 ttl=64 time=0.297 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=65 ttl=64 time=0.297 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=66 ttl=64 time=0.278 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=67 ttl=64 time=0.255 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=68 ttl=64 time=0.388 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=69 ttl=64 time=0.505 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=70 ttl=64 time=0.525 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=71 ttl=64 time=0.412 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=72 ttl=64 time=0.233 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=73 ttl=64 time=0.415 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=74 ttl=64 time=0.386 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=75 ttl=64 time=0.355 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=76 ttl=64 time=0.320 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=77 ttl=64 time=0.250 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=78 ttl=64 time=0.359 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=79 ttl=64 time=0.341 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=80 ttl=64 time=0.314 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=81 ttl=64 time=0.402 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=82 ttl=64 time=0.297 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=83 ttl=64 time=0.316 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=84 ttl=64 time=0.219 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=85 ttl=64 time=0.356 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=86 ttl=64 time=0.288 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=87 ttl=64 time=0.455 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=88 ttl=64 time=0.449 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=89 ttl=64 time=0.332 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=90 ttl=64 time=0.358 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=91 ttl=64 time=0.371 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=92 ttl=64 time=0.319 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=93 ttl=64 time=0.365 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=94 ttl=64 time=0.281 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=95 ttl=64 time=0.265 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=96 ttl=64 time=0.320 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=97 ttl=64 time=0.343 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=98 ttl=64 time=0.311 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=99 ttl=64 time=0.324 ms                                                                                                                                                     
                                                                                                                                                                                                               
    --- 192.168.1.2 ping statistics ---                                                                                                                                                                        
    100 packets transmitted, 100 packets received, 0% packet loss                                                                                                                                              
    round-trip min/avg/max = 0.219/0.338/0.864 ms                                                                                                                                                              
    root@am64xx-evm:~# ping 192.168.1.2 -c 100 -i 0.1                                                                                                                                                          
    PING 192.168.1.2 (192.168.1.2): 56 data bytes                                                                                                                                                              
    64 bytes from 192.168.1.2: seq=0 ttl=64 time=2.095 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=1 ttl=64 time=0.450 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=2 ttl=64 time=0.349 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=3 ttl=64 time=0.262 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=4 ttl=64 time=0.505 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=5 ttl=64 time=0.393 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=6 ttl=64 time=0.389 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=7 ttl=64 time=0.265 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=8 ttl=64 time=0.313 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=9 ttl=64 time=0.354 ms                                                                                                                                                      
    64 bytes from 192.168.1.2: seq=10 ttl=64 time=0.375 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=11 ttl=64 time=0.486 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=12 ttl=64 time=0.421 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=13 ttl=64 time=0.409 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=14 ttl=64 time=0.380 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=15 ttl=64 time=0.352 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=16 ttl=64 time=0.348 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=17 ttl=64 time=0.298 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=18 ttl=64 time=0.468 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=19 ttl=64 time=0.349 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=20 ttl=64 time=0.290 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=21 ttl=64 time=0.287 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=22 ttl=64 time=0.348 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=23 ttl=64 time=0.385 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=24 ttl=64 time=0.301 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=25 ttl=64 time=0.344 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=26 ttl=64 time=0.353 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=27 ttl=64 time=0.306 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=28 ttl=64 time=0.390 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=29 ttl=64 time=0.391 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=30 ttl=64 time=0.353 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=31 ttl=64 time=0.321 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=32 ttl=64 time=0.300 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=33 ttl=64 time=0.376 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=34 ttl=64 time=0.302 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=35 ttl=64 time=0.343 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=36 ttl=64 time=0.366 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=37 ttl=64 time=0.308 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=38 ttl=64 time=0.395 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=39 ttl=64 time=0.345 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=40 ttl=64 time=0.343 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=41 ttl=64 time=0.294 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=42 ttl=64 time=0.326 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=43 ttl=64 time=0.377 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=44 ttl=64 time=0.276 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=45 ttl=64 time=0.290 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=46 ttl=64 time=0.267 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=47 ttl=64 time=0.380 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=48 ttl=64 time=0.499 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=49 ttl=64 time=0.311 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=50 ttl=64 time=0.252 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=51 ttl=64 time=0.306 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=52 ttl=64 time=0.292 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=53 ttl=64 time=0.357 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=54 ttl=64 time=0.377 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=55 ttl=64 time=0.314 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=56 ttl=64 time=0.319 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=57 ttl=64 time=0.284 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=58 ttl=64 time=0.365 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=59 ttl=64 time=0.244 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=60 ttl=64 time=0.407 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=61 ttl=64 time=0.306 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=62 ttl=64 time=0.262 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=63 ttl=64 time=0.382 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=64 ttl=64 time=0.289 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=65 ttl=64 time=0.472 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=66 ttl=64 time=0.413 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=67 ttl=64 time=0.286 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=68 ttl=64 time=0.362 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=69 ttl=64 time=0.299 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=70 ttl=64 time=0.319 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=71 ttl=64 time=0.307 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=72 ttl=64 time=0.334 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=73 ttl=64 time=0.400 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=74 ttl=64 time=0.292 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=75 ttl=64 time=0.319 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=76 ttl=64 time=0.333 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=77 ttl=64 time=0.314 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=78 ttl=64 time=0.475 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=79 ttl=64 time=0.285 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=80 ttl=64 time=0.295 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=81 ttl=64 time=0.432 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=82 ttl=64 time=0.379 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=83 ttl=64 time=0.561 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=84 ttl=64 time=0.357 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=85 ttl=64 time=0.311 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=86 ttl=64 time=0.412 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=87 ttl=64 time=0.352 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=88 ttl=64 time=0.405 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=89 ttl=64 time=0.287 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=90 ttl=64 time=0.352 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=91 ttl=64 time=0.322 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=92 ttl=64 time=0.318 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=93 ttl=64 time=0.381 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=94 ttl=64 time=0.315 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=95 ttl=64 time=0.302 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=96 ttl=64 time=0.349 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=97 ttl=64 time=0.359 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=98 ttl=64 time=0.383 ms                                                                                                                                                     
    64 bytes from 192.168.1.2: seq=99 ttl=64 time=0.285 ms                                                                                                                                                     
                                                                                                                                                                                                               
    --- 192.168.1.2 ping statistics ---                                                                                                                                                                        
    100 packets transmitted, 100 packets received, 0% packet loss                                                                                                                                              
    round-trip min/avg/max = 0.244/0.365/2.095 ms                                                                                                                                                              
    root@am64xx-evm:~# 

    EVM2: 

    am64xx-evm login: root                                                                              
    root@am64xx-evm:~# cd /lib/firmware/ti-pruss                                                        
    root@am64xx-evm:/lib/firmware/ti-pruss# ls                                                          
    am335x-pru0-prueth-fw.elf  am64x-sr2-pru0-prueth-fw.elf    am65x-pru0-prueth-fw.elf                 
    am335x-pru0-pruhsr-fw.elf  am64x-sr2-pru0-pruhsr-fw.elf    am65x-pru1-prueth-fw.elf                 
    am335x-pru0-pruprp-fw.elf  am64x-sr2-pru0-pruprp-fw.elf    am65x-rtu0-prueth-fw.elf                 
    am335x-pru0-prusw-fw.elf   am64x-sr2-pru0-prusw-fw.elf     am65x-rtu1-prueth-fw.elf                 
    am335x-pru1-prueth-fw.elf  am64x-sr2-pru1-prueth-fw.elf    am65x-sr2-pru0-prueth-fw.elf             
    am335x-pru1-pruhsr-fw.elf  am64x-sr2-pru1-pruhsr-fw.elf    am65x-sr2-pru0-pruhsr-fw.elf             
    am335x-pru1-pruprp-fw.elf  am64x-sr2-pru1-pruprp-fw.elf    am65x-sr2-pru0-prusw-fw.elf              
    am335x-pru1-prusw-fw.elf   am64x-sr2-pru1-prusw-fw.elf     am65x-sr2-pru1-prueth-fw.elf             
    am437x-pru0-prueth-fw.elf  am64x-sr2-rtu0-prueth-fw.elf    am65x-sr2-pru1-pruhsr-fw.elf             
    am437x-pru0-pruhsr-fw.elf  am64x-sr2-rtu0-pruhsr-fw.elf    am65x-sr2-pru1-prusw-fw.elf              
    am437x-pru0-pruprp-fw.elf  am64x-sr2-rtu0-pruprp-fw.elf    am65x-sr2-rtu0-prueth-fw.elf             
    am437x-pru0-prusw-fw.elf   am64x-sr2-rtu0-prusw-fw.elf     am65x-sr2-rtu0-pruhsr-fw.elf             
    am437x-pru1-prueth-fw.elf  am64x-sr2-rtu1-prueth-fw.elf    am65x-sr2-rtu0-prusw-fw.elf              
    am437x-pru1-pruhsr-fw.elf  am64x-sr2-rtu1-pruhsr-fw.elf    am65x-sr2-rtu1-prueth-fw.elf             
    am437x-pru1-pruprp-fw.elf  am64x-sr2-rtu1-pruprp-fw.elf    am65x-sr2-rtu1-pruhsr-fw.elf             
    am437x-pru1-prusw-fw.elf   am64x-sr2-rtu1-prusw-fw.elf     am65x-sr2-rtu1-prusw-fw.elf              
    am57xx-pru0-prueth-fw.elf  am64x-sr2-txpru0-prueth-fw.elf  am65x-sr2-txpru0-prueth-fw.elf           
    am57xx-pru0-pruhsr-fw.elf  am64x-sr2-txpru0-pruhsr-fw.elf  am65x-sr2-txpru0-pruhsr-fw.elf           
    am57xx-pru0-pruprp-fw.elf  am64x-sr2-txpru0-pruprp-fw.elf  am65x-sr2-txpru0-prusw-fw.elf            
    am57xx-pru0-prusw-fw.elf   am64x-sr2-txpru0-prusw-fw.elf   am65x-sr2-txpru1-prueth-fw.elf           
    am57xx-pru1-prueth-fw.elf  am64x-sr2-txpru1-prueth-fw.elf  am65x-sr2-txpru1-pruhsr-fw.elf           
    am57xx-pru1-pruhsr-fw.elf  am64x-sr2-txpru1-pruhsr-fw.elf  am65x-sr2-txpru1-prusw-fw.elf            
    am57xx-pru1-pruprp-fw.elf  am64x-sr2-txpru1-pruprp-fw.elf  ti-pruss                                 
    am57xx-pru1-prusw-fw.elf   am64x-sr2-txpru1-prusw-fw.elf                                            
    root@am64xx-evm:/lib/firmware/ti-pruss# md5sum am64x-sr2-pru0-prueth-fw.elf                         
    622167e169259236d8372f0972db50c3  am64x-sr2-pru0-prueth-fw.elf                                      
    root@am64xx-evm:/lib/firmware/ti-pruss# cd                                                          
    root@am64xx-evm:~# md5sum /lib/firmware/ti-pruss/am64x-sr2-pru0-prueth-fw.elf                       
    622167e169259236d8372f0972db50c3  /lib/firmware/ti-pruss/am64x-sr2-pru0-prueth-fw.elf               
    root@am64xx-evm:~# md5sum /lib/firmware/ti-pruss/am64x-sr2-txpru0-prueth-fw.elf                     
    ffaca3d782ad509e69e062996069b7a5  /lib/firmware/ti-pruss/am64x-sr2-txpru0-prueth-fw.elf             
    root@am64xx-evm:~# uname -a                                                                         
    Linux am64xx-evm 6.12.35-00917-g5d90a9b4777c #1 SMP PREEMPT_RT Thu Aug  7 08:41:00 CEST 2025 aarch6x
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full                                            
    root@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full                                            
    root@am64xx-evm:~# dmesg | tail                                                                     
    [  136.499125] audit: type=1131 audit(1520599028.973:76): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  136.685338] audit: type=1130 audit(1520599029.160:77): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  146.746922] audit: type=1131 audit(1520599039.221:78): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  146.933611] audit: type=1130 audit(1520599039.408:79): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  156.997662] audit: type=1131 audit(1520599049.472:80): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  157.190914] audit: type=1130 audit(1520599049.661:81): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  167.247145] audit: type=1131 audit(1520599059.722:82): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  167.433483] audit: type=1130 audit(1520599059.908:83): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  177.499171] audit: type=1131 audit(1520599069.974:84): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  177.685391] audit: type=1130 audit(1520599070.158:85): pid=1 uid=0 auid=4294967295 ses=429496729'
    root@am64xx-evm:~# ip link set eth1 up                                                              
    root@am64xx-evm:~# ip link set eth2 up                                                              
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.1                      
    hsr_hw eth1 eth2 192.168.1.1                                                                        
    ip=192.168.1.1                                                                                      
    if=hsr0                                                                                             
    mac=70:ff:76:1e:e6:f4                                                                               
    slave-a=eth1                                                                                        
    slave-b=eth2                                                                                        
    device=platform/icssg1-eth                                                                          
    hsr-tag-ins-offload: off                                                                            
    hsr-tag-rm-offload: off                                                                             
    hsr-fwd-offload: off                                                                                
    hsr-dup-offload: off                                                                                
    Actual changes:                                                                                     
    hsr-tag-ins-offload: on [not requested]                                                             
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: on                                                                             
    hsr-tag-rm-offload: on                                                                              
    hsr-fwd-offload: on                                                                                 
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: off                                                                            
    hsr-tag-rm-offload: off                                                                             
    hsr-fwd-offload: off                                                                                
    hsr-dup-offload: off                                                                                
    Actual changes:                                                                                     
    hsr-tag-ins-offload: on [not requested]                                                             
    hsr-dup-offload: on                                                                                 
    hsr-tag-ins-offload: on                                                                             
    hsr-tag-rm-offload: on                                                                              
    hsr-fwd-offload: on                                                                                 
    hsr-dup-offload: on                                                                                 
    root@am64xx-evm:~# ping 192.168.1.133 -c 100 -i 0.1^C                                               
    root@am64xx-evm:~#

    EVM3: 

    am64xx-evm login: root                                                                               
    root@am64xx-evm:~# md5sum /lib/firmware/ti-pruss/am64x-sr2-pru0-prueth-fw.elf                        
    622167e169259236d8372f0972db50c3  /lib/firmware/ti-pruss/am64x-sr2-pru0-prueth-fw.elf                
    root@am64xx-evm:~# ifconfig                                                                          
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536                                                         
            inet 127.0.0.1  netmask 255.0.0.0                                                            
            inet6 ::1  prefixlen 128  scopeid 0x10<host>                                                 
            loop  txqueuelen 1000  (Local Loopback)                                                      
            RX packets 0  bytes 0 (0.0 B)                                                                
            RX errors 0  dropped 0  overruns 0  frame 0                                                  
            TX packets 0  bytes 0 (0.0 B)                                                                
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0                                   
                                                                                                         
    root@am64xx-evm:~# md5sum /lib/firmware/ti-pruss/am64x-sr2-txpru0-prueth-fw.elf                      
    ffaca3d782ad509e69e062996069b7a5  /lib/firmware/ti-pruss/am64x-sr2-txpru0-prueth-fw.elf              
    root@am64xx-evm:~# uname -a                                                                          
    Linux am64xx-evm 6.12.35-00917-g5d90a9b4777c #1 SMP PREEMPT_RT Thu Aug  7 08:41:00 CEST 2025 aarch64x
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full                                             
    root@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full                                             
    root@am64xx-evm:~# ip link set eth1 up                                                               
    root@am64xx-evm:~# ip link set eth2 up                                                               
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.2                       
    hsr_hw eth1 eth2 192.168.1.2                                                                         
    ip=192.168.1.2                                                                                       
    if=hsr0                                                                                              
    mac=70:ff:76:1e:2d:e9                                                                                
    slave-a=eth1                                                                                         
    slave-b=eth2                                                                                         
    device=platform/icssg1-eth                                                                           
    hsr-tag-ins-offload: off                                                                             
    hsr-tag-rm-offload: off                                                                              
    hsr-fwd-offload: off                                                                                 
    hsr-dup-offload: off                                                                                 
    Actual changes:                                                                                      
    hsr-tag-ins-offload: on [not requested]                                                              
    hsr-dup-offload: on                                                                                  
    hsr-tag-ins-offload: on                                                                              
    hsr-tag-rm-offload: on                                                                               
    hsr-fwd-offload: on                                                                                  
    hsr-dup-offload: on                                                                                  
    hsr-tag-ins-offload: off                                                                             
    hsr-tag-rm-offload: off                                                                              
    hsr-fwd-offload: off                                                                                 
    hsr-dup-offload: off                                                                                 
    Actual changes:                                                                                      
    hsr-tag-ins-offload: on [not requested]                                                              
    hsr-dup-offload: on                                                                                  
    hsr-tag-ins-offload: on                                                                              
    hsr-tag-rm-offload: on                                                                               
    hsr-fwd-offload: on                                                                                  
    hsr-dup-offload: on                                                                                  
    (failed reverse-i-search)`cat': /usr/bin/hsr_offload_s^Cipt.sh hsr_hw eth1 eth2 192.168.1.2          
    root@am64xx-evm:~# cat /proc/interrupts | grep -i icssg                                              
    145:         54          0  MSI-INTA 1970792 Level     icssg1-eth-tx0                                
    149:         20          0  MSI-INTA 1970796 Level     icssg1-eth-tx0                                
    245:          1          0  MSI-INTA 1971824 Level     icssg1-eth                                    
    261:          1          0  MSI-INTA 1971840 Level     icssg1-eth                                    
    540:          0          0  pruss-intc  24 Level     icssg1-eth                                      
    541:          0          0  pruss-intc  25 Level     icssg1-eth                                      
    root@am64xx-evm:~# cat /proc/interrupts | grep -i icssg                                              
    145:        164          0  MSI-INTA 1970792 Level     icssg1-eth-tx0                                
    149:         21          0  MSI-INTA 1970796 Level     icssg1-eth-tx0                                
    245:        103          0  MSI-INTA 1971824 Level     icssg1-eth                                    
    261:          1          0  MSI-INTA 1971840 Level     icssg1-eth                                    
    540:          0          0  pruss-intc  24 Level     icssg1-eth                                      
    541:          0          0  pruss-intc  25 Level     icssg1-eth                                      
    root@am64xx-evm:~# ip link set eth1 down                                                             
    root@am64xx-evm:~# ip link set eth2 down                                                             
    root@am64xx-evm:~# ifconfig                                                                          
    hsr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1494                                                   
            inet 192.168.1.2  netmask 255.255.255.0  broadcast 0.0.0.0                                   
            inet6 fe80::72ff:76ff:fe1e:2de9  prefixlen 64  scopeid 0x20<link>                            
            ether 70:ff:76:1e:2d:e9  txqueuelen 1000  (Ethernet)                                         
            RX packets 102  bytes 8492 (8.2 KiB)                                                         
            RX errors 0  dropped 0  overruns 0  frame 0                                                  
            TX packets 182  bytes 14862 (14.5 KiB)                                                       
            TX errors 0  dropped 1 overruns 0  carrier 0  collisions 0                                   
                                                                                                         
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536                                                         
            inet 127.0.0.1  netmask 255.0.0.0                                                            
            inet6 ::1  prefixlen 128  scopeid 0x10<host>                                                 
            loop  txqueuelen 1000  (Local Loopback)                                                      
            RX packets 0  bytes 0 (0.0 B)                                                                
            RX errors 0  dropped 0  overruns 0  frame 0                                                  
            TX packets 0  bytes 0 (0.0 B)                                                                
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0                                   
                                                                                                         
    root@am64xx-evm:~# ip link set eth1 up                                                               
    root@am64xx-evm:~# ip link set eth2 up                                                               
    root@am64xx-evm:~# dmesg | tail                                                                      
    [  418.697392] remoteproc remoteproc14: powering up 30086000.rtu                                     
    [  418.697525] remoteproc remoteproc14: Booting fw image ti-pruss/am64x-sr2-rtu1-pruhsr-fw.elf, size4
    [  418.697596] remoteproc remoteproc14: remote processor 30086000.rtu is now up                      
    [  418.697618] remoteproc remoteproc8: powering up 3008c000.txpru                                    
    [  418.697731] remoteproc remoteproc8: Booting fw image ti-pruss/am64x-sr2-txpru1-pruhsr-fw.elf, siz6
    [  418.697762] remoteproc remoteproc8: remote processor 3008c000.txpru is now up                     
    [  420.774270] icssg-prueth icssg1-eth eth1: Link is Up - 100Mbps/Full - flow control off            
    [  422.950270] icssg-prueth icssg1-eth eth2: Link is Up - 100Mbps/Full - flow control off            
    [  423.044303] audit: type=1131 audit(1520599315.671:131): pid=1 uid=0 auid=4294967295 ses=429496729'
    [  423.240766] audit: type=1130 audit(1520599315.861:132): pid=1 uid=0 auid=4294967295 ses=429496729'
    root@am64xx-evm:~# cat /proc/interrupts | grep -i icssg                                              
    145:        215          0  MSI-INTA 1970792 Level     icssg1-eth-tx0                                
    149:         32          0  MSI-INTA 1970796 Level     icssg1-eth-tx0                                
    245:        104          0  MSI-INTA 1971824 Level     icssg1-eth                                    
    261:          2          0  MSI-INTA 1971840 Level     icssg1-eth                                    
    540:          0          0  pruss-intc  24 Level     icssg1-eth                                      
    541:          0          0  pruss-intc  25 Level     icssg1-eth                                      
    root@am64xx-evm:~# cat /proc/interrupts | grep -i icssg                                              
    145:        325          0  MSI-INTA 1970792 Level     icssg1-eth-tx0                                
    149:         33          0  MSI-INTA 1970796 Level     icssg1-eth-tx0                                
    245:        206          0  MSI-INTA 1971824 Level     icssg1-eth                                    
    261:        104          0  MSI-INTA 1971840 Level     icssg1-eth                                    
    540:          0          0  pruss-intc  24 Level     icssg1-eth                                      
    541:          0          0  pruss-intc  25 Level     icssg1-eth                                      
    root@am64xx-evm:~# 
    

    - Tianyi 

  • Hi Tianyi, 

    I will try to rerun with 100 ping packets as you have done to see if I can see the same issue. I'll try to update you today or tomorrow. 

    -Daolin

  • Hi Daolin, 

    Yes sure. Thank you very much !

    - Tianyi

  • Hi Daolin,

    Maybe let's summarize different needs and bugs. 

    In this ticket we have 2 main issues on 100 Mbps link speed : 

    - Bug1 : PING Issue when first using ethtool to configure link speed

    - Bug2 : down eth1/eth2 and up eth1/eth2 disable the removal of HSR packets on the PRU level 

    The Bug1 we found a workaround based on this : 

    Changes that should already be included in SDK 11.1:

    Changes that need to be applied ontop of SDK 11.1:

    Maybe it wasn't clear, but projects need to be able to launch the following procedure (first start with ethtool then up interfaces or launch hsr script).  

    ethtool -s eth1 speed 100 duplex full
    ethtool -s eth2 speed 100 duplex full
    
    ip link set eth1 up
    ip link set eth2 up
    
    /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.1

    The reason is with some old version of project, the command "ethtool -s eth1eth2 speed 100 duplex full" is executed on boot to disable the auto-negotiation of pru ports, to avoid a crash bug when the port speed switched from 10M to 100M. 

    On my side, by testing with Kernel SDK 11.1 + both patches and the PRU firmware you shared earlier, I encountered WATCHDOG issue : 

    am64xx-evm login: root                                                                                                                                                                                     
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full                                                                                                                                                   
    s eth2 speed 100 duplex fullroot@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full                                                                                                                       
    root@am64xx-evm:~#                                                                                                                                                                                         
    root@am64xx-evm:~#                                                                                                                                                                                         
    root@am64xx-evm:~#                                                                                                                                                                                         
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.133                                                                                                                           
    hsr_hw eth1 eth2 192.168.1.133                                                                                                                                                                             
    ip=192.168.1.133                                                                                                                                                                                           
    if=hsr0                                                                                                                                                                                                    
    mac=70:ff:76:1f:40:90                                                                                                                                                                                      
    slave-a=eth1                                                                                                                                                                                               
    slave-b=eth2                                                                                                                                                                                               
    device=platform/icssg1-eth                                                                                                                                                                                 
    hsr-tag-ins-offload: off                                                                                                                                                                                   
    hsr-tag-rm-offload: off                                                                                                                                                                                    
    hsr-fwd-offload: off                                                                                                                                                                                       
    hsr-dup-offload: off                                                                                                                                                                                       
    Actual changes:                                                                                                                                                                                            
    hsr-tag-ins-offload: on [not requested]                                                                                                                                                                    
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: on                                                                                                                                                                                    
    hsr-tag-rm-offload: on                                                                                                                                                                                     
    hsr-fwd-offload: on                                                                                                                                                                                        
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: off                                                                                                                                                                                   
    hsr-tag-rm-offload: off                                                                                                                                                                                    
    hsr-fwd-offload: off                                                                                                                                                                                       
    hsr-dup-offload: off                                                                                                                                                                                       
    Actual changes:                                                                                                                                                                                            
    hsr-tag-ins-offload: on [not requested]                                                                                                                                                                    
    hsr-dup-offload: on                                                                                                                                                                                        
    hsr-tag-ins-offload: on                                                                                                                                                                                    
    hsr-tag-rm-offload: on                                                                                                                                                                                     
    hsr-fwd-offload: on                                                                                                                                                                                        
    hsr-dup-offload: on
    root@am64xx-evm:~# 2018 Mar  9 12:36:03 am64xx-evm [   71.140475] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 1: transmit queue 0 timed out 5824 ms                                                
    2018 Mar  9 12:36:06 am64xx-evm [   73.764482] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 1: transmit queue 0 timed out 5616 ms                                                                   
    2018 Mar  9 12:36:09 am64xx-evm [   76.772473] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 11456 ms                                                                  
    2018 Mar  9 12:36:11 am64xx-evm [   78.821481] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 10673 ms                                                                  
    2018 Mar  9 12:36:14 am64xx-evm [   81.892477] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 16576 ms                                                                  
    2018 Mar  9 12:36:16 am64xx-evm [   83.941489] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 15793 ms                                                                  
    2018 Mar  9 12:36:19 am64xx-evm [   87.012476] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 21696 ms                                                                  
    2018 Mar  9 12:36:21 am64xx-evm [   89.060483] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 20912 ms                                                                  
    2018 Mar  9 12:36:25 am64xx-evm [   93.156493] icssg-prueth icssg1-eth eth2: NETDEV WATCHDOG: CPU: 1: transmit queue 0 timed out 27840 ms                                                                  
    2018 Mar  9 12:36:27 am64xx-evm [   95.204475] icssg-prueth icssg1-eth eth1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed o

    To sum up,

    - When testing (starting first ethtool) with Kernel SDK 11.1 + patch1 and the PRU firmware you shared earlier, I cannot ping. 

    - When testing (starting first ethtool) with Kernel SDK 11.1 + both patches and the PRU firmware you shared earlier, I encountered WATCHDOG issue.

    Could you also confirm that you have the same observation ? If so, we would expect the fix to first launch ethtool command then hsr script. 

    About the Bug2 : down eth1 eth2, then up eth1 eth2, By using the workaround, I still observed that the duplicated HSR packets are not removed. This is very critical for us because we have some scripts that will down eth1 and eth2 at the same time and up eth1 and eth2. Without this removal of PRU firmware, it will add extra latency and we cannot achieve the target latency performance.

    Thank you very much for your time

    - Tianyi

  • Hi Tianyi, 

    I recently learned that there should be a fix to the 100M ping issue. https://lore.kernel.org/all/20250731120812.1606839-1-danishanwar@ti.com/ It looks like this fix is currently trying to get accepted upstream so it's not yet been backported to our SDK versions.

    Apologies for the delay. I was tracking the patch I previously shared; as I mentioned, it was going through the process of upstreaming so at that point in time it was not accepted upstream. I just checked and it looks like there were some changes made to address potential side effects (which could potentially be a reason for the watchdog netdev error). The latest version of this patch was https://lore.kernel.org/all/20250805173812.2183161-1-danishanwar@ti.com/. Please note, it doesn't look like it has been fully merged upstream but the maintainer looks to already signed off on it.

    Another note, I'm not sure what contents are in your hsr setup script. Attached is the version I have been using on SDK 11.x. I think the differences in Kernel version may result in different commands needed to setup hsr compared to the Kernel version on SDK 9.x.

    HSR setup script I used: https://gist.github.com/dao-qiu/0c93af9d0f1c14a98e3c078d40271dc1 

    I used "./hsr_setup.sh hsr1 on enable 192.168.10.10 cutthru 257" for EVM1 (similar for the other EVMs) 

    About the Bug2 : down eth1 eth2, then up eth1 eth2, By using the workaround, I still observed that the duplicated HSR packets are not removed. This is very critical for us because we have some scripts that will down eth1 and eth2 at the same time and up eth1 and eth2. Without this removal of PRU firmware, it will add extra latency and we cannot achieve the target latency performance.

    Thanks for bringing this to my attention. I'm trying to re-test with larger number packets as you suggested (but with the patches including the one meant to fix 100M ping issue). Will come back soon today with results. 

    -Daolin

  • Update:

    1. I wasn't able to see the same NETDEV WATCHDOG issue on the older version of the patch for fixing 100M ping. After applying the updated version of the 100M ping, I also don't see the watchdog issue. One suggestion is to try on your end using the same HSR setup script I provided in my previous reply and let me know if you still see the watchdog issue?

    2. I was able to reproduce the HSR duplicates issue with 100 packets (and also in the non-cut-through and the 1Gbps case) with the latest version of the patch for fixing 100M ping. I'm going to track this issue internally in my team and see if we can narrow down what the issue is (most likely has to do with bringing down PRU firmwares and reloading them, perhaps the reloading process was not properly brought back up...)

    This is very critical for us because we have some scripts that will down eth1 and eth2 at the same time and up eth1 and eth2. Without this removal of PRU firmware, it will add extra latency and we cannot achieve the target latency performance.

    Just out of curiosity, are you saying that when the PRU firmwares are loaded, it adds extra latency to the Ethernet packets?

    -Daolin

  • Hello Daolin, 

    Thank you for the explanation. 

    For the WATCHDOG issue, I will give a try on my side with the provided script. 

    About the second point, sorry for the misundestanding, it wasn't clear on my side, 

    Since the Kernel has to deal with 2 packets instead of one. I have observed some extra latency when stressing the system or when having multiple streams on the DUT.

    Example : 

    - 3 streams of no Real Time packets 

    - one stream of Real time packets. 

    Do you have an estimated timeline for resolving this issue ? 

    - Tianyi 

  • Hi Tianyi, 

    Apologies for the late response.

    Do you have an estimated timeline for resolving this issue ? 

    I'm trying to get the internal software team to be able to replicate the issue so that they can help narrow down what the fix should be. We won't have a timeline of a fix until they can narrow down the root cause. You can be assured that we are trying to work urgently on this. I will let you know of an update tomorrow.

    Since the Kernel has to deal with 2 packets instead of one. I have observed some extra latency when stressing the system or when having multiple streams on the DUT.

    I might be still a bit confused here. I think I'm understanding that when the system is stressed or having multiple streams on the DUT cause some extra latency but I don't fully understand how unloading PRU firmware helps?

    -Daolin

  • Update:

    We have a potential fix which I'm working to test out. There are some additional items I need to verify internally, after I get some additional details and verify the fix works, I will share with you.

    -Daolin

  • Hi Daolin, 

    Sorry for the delayed response. From what I understand, the removal of duplicated packets is handled by the PRU and does not impact the CPU. Could you please confirm if my understanding is correct?

    - Tianyi 

  • Ok thank you for sharing this. It's a great news ! Will this fix be in the PRU firmware or/and in the Kernel ? 

  • Hi Tianyi, 

    Ok thank you for sharing this. It's a great news ! Will this fix be in the PRU firmware or/and in the Kernel ? 

    The fix is on the Linux kernel driver side; you can find the patch/details here: https://lore.kernel.org/all/20250814105106.1491871-1-danishanwar@ti.com/. Please try testing this patch and let us know if you see issues. Note that this patch is still being upstreamed so you will not see it integrated into git.ti.com until after it is accepted upstream.

    I was able to test and saw that the HSR duplicate discard issue should be fixed as long as you do not see a "Failed to restart the firmwares, aborting the process" when the hsr setup script is run. Please do let us know if you see this message or other issues when you test it out.

    To summarize, you need to make sure the following patches are applied on SDK 11.1

    From what I understand, the removal of duplicated packets is handled by the PRU and does not impact the CPU. Could you please confirm if my understanding is correct?

    Correct, duplicate packet discard should be handled by the HSR PRU firmware so the function of duplicate discard shouldn't take CPU load.

    -Daolin

  • Hi Daolin, 

    Thank you for sharing the patches. I will give a try and come back to you today. 

    - Tianyi

  • Hi Daolin, 

    Some good news. 

    By applying the three patches provided, we don't see anymore this issue : 

    (to fix HSR duplicate discard issue) - latest patch

    However, I still observe issue from: fix 100M ping issue 

    As a reminder, here is the procedure:

    - step 1 : set 100 MBps link speed for sender and receiver : 

    ethtool -s eth1 speed 100 duplex full

    ethtool -s eth2 speed 100 duplex full

    - step 2: enable HSR script for sender and receiver : 

    - step 3 : try to ping from the sender to the receiver

    More info with logs:

    Sender

    am64xx-evm login: root
    root@am64xx-evm:~# ifconfig
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 16  bytes 1152 (1.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 16  bytes 1152 (1.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.12.29-00424-g56abcc848a46 #1 SMP PREEMPT_RT Wed Aug 20 10:27:15 CEST 2025 aarch6x
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full 
    peed 100 duplex fullroot@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.1
    hsr_hw eth1 eth2 192.168.1.1
    ip=192.168.1.1
    if=hsr0
    mac=70:ff:76:1f:40:90
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    root@am64xx-evm:~# ifconfig
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1f:4090  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:40:90  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 21  bytes 1816 (1.7 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1f:4090  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:40:90  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 18  bytes 1554 (1.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    hsr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.1.1  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::72ff:76ff:fe1f:4090  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:40:90  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 11  bytes 826 (826.0 B)
            TX errors 0  dropped 1 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 64  bytes 4608 (4.5 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 64  bytes 4608 (4.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    root@am64xx-evm:~# ping 192.168.1.10
    PING 192.168.1.10 (192.168.1.10): 56 data bytes
    ^C
    --- 192.168.1.10 ping statistics ---
    5 packets transmitted, 0 packets received, 100% packet loss
    root@am64xx-evm:~# 
    

    DUT

    root@am64xx-evm:~# ifconfig
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 176  bytes 12672 (12.3 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 176  bytes 12672 (12.3 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    root@am64xx-evm:~# ethtool -s eth1 speed 100 duplex full 
    peed 100 duplex fullroot@am64xx-evm:~# ethtool -s eth2 speed 100 duplex full
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.10
    hsr_hw eth1 eth2 192.168.1.10
    ip=192.168.1.10
    if=hsr0
    mac=70:ff:76:1e:e6:f4
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    root@am64xx-evm:~# 

    With the second patches : https://lore.kernel.org/all/20250805173812.2183161-1-danishanwar@ti.com/ (to fix 100M ping issue), you would expect that fixes the bug described above ? 

    - Tianyi

  • Hi Tianyi, 

    As we discussed the 100M ping not working maybe due to the interfaces needing to be brought up before setting up HSR.

    I'm trying to get some information on why this step is necessary internally.

    One thing I forgot to ask you was if there was a particular reason you needed to keep the interfaces disabled/down before setting up HSR?

    -Daolin

  • Hi Daolin, 

    I can check with the internal team about this question and come back to you ! 

    - Tianyi

  • Tianyi, 

    Can you also double check with a test if it is indeed the interfaces needing to be brought up before HSR setup that fixes 100M ping? Also when you say the interfaces are down, I'm assuming that is due the network services being disabled before-hand?

    -Daolin

  • I just did the test and it's working. I already shared this workaround with the internal team. From the lastest discussion, they prefer a fix of this issue. 

    About this issue, we didn't have this for 6.1 Kernel Linux. Maybe there is some memory initialisation when up interfaces eth1 and eth2 ? if you don't up these interfaces, you don't allocate the memory for the firmware ? 

    - Tianyi 

  • Hi Daolin, 

    About uping interfaces before start HSR. The internal team wants to have without uping interfaces before starting HSR script. Because when uping interfaces before HSR script, it triggers some events and alert end user about the change of the interface status. Therefore, it can trigger multiple events. 

    up interfaces -> start hsr script (down interface + up interfaces). ANd Internal team want to reduce the number of these alarms to a single "up" event per power cycle. 

    Nothing related to this Ticket, do you know if 10M link speed HSR is supported in the latest SDK 11.1 with kernel 6.12 ?

  • Hi Tianyi, 

    I just tried out setting up HSR keeping the eth1 and eth2 interfaces down and I see the following messages. I don't see the last 5 lines in my log show up in your log output, do you perhaps have some of the output from the HSR script redirected to another file? 

    root@am64xx-evm:~# ./hsr_setup_v2.sh hsr1 on enable 192.168.10.10 cutthru 257        
    ip=192.168.10.10
    if=hsr1
    mac=70:ff:76:1e:9c:46
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hw_offload=on
    forwarding_method=cutthru
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    Enabling cutthru 257
    [ 319.457494] icssg-prueth icssg1-eth eth1: timeout waiting for command done
    [ 319.467766] icssg-prueth icssg1-eth eth2: timeout waiting for command done
    [ 319.467788] icssg-prueth icssg1-eth: Failed to restart the firmwares, aborting the process
    [ 322.505828] hsr1: Slave A (eth1) is not up; please bring it up to get a fully working HSR network
    [ 322.505857] hsr1: Slave B (eth2) is not up; please bring it up to get a fully working HSR network

    My understanding of the last 5 lines in the output from the HSR setup script is that perhaps the ICSSG Linux driver is sending a command to the PRU_ICSSG firmware, but the firmware is not responding so there is a timeout. This is just a speculation because I need to get more information internally, but I think the firmware was modified with the expectation that both interfaces have to be up to load the HSR firmware. As we see from the log, there is no output indicating the HSR firmware was even loaded. Perhaps this could have changed from the firmware that used for Kernel 6.1. 

    Nothing related to this Ticket, do you know if 10M link speed HSR is supported in the latest SDK 11.1 with kernel 6.12 ?

    I prefer keeping this topic on a separate ticket for easy searchability in the future. However, as a quick response, I was under the impression that you simply need to set the link speed to 10Mbps to get 10Mbps link speed HSR (similarly to what you do for 100Mbps link speed HSR). Is there an issue with 10Mbps HSR that you are seeing?

    -Daolin

  • Hi Daolin, 

    About the timeout: I will give a try. Usually I need to do dmesg to get these messages. 

    About 10Mbps link speed, Internal team wants to have either 10Mbps links speed or 100 Mbps link speed. Are there any issues that you saw when migrating from 6.1 to 6.12 Linux ? 

    - Tianyi 

  • When I start HSR scripts without using ethtool to set 100 Mbps link speed: 

    root@am64xx-evm:~# ifconfig
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 416  bytes 32192 (31.4 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 416  bytes 32192 (31.4 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    root@am64xx-evm:~# /usr/bin/hsr_offload_script.sh hsr_hw eth1 eth2 192.168.1.10                                                                            
    hsr_hw eth1 eth2 192.168.1.10
    ip=192.168.1.10
    if=hsr0
    mac=70:ff:76:1e:e6:f4
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    hsr-tag-ins-offload: off
    hsr-tag-rm-offload: off
    hsr-fwd-offload: off
    hsr-dup-offload: off
    Actual changes:
    hsr-tag-ins-offload: on [not requested]
    hsr-dup-offload: on
    hsr-tag-ins-offload: on
    hsr-tag-rm-offload: on
    hsr-fwd-offload: on
    hsr-dup-offload: on
    root@am64xx-evm:~# dmesg | tail -n 100
    [   31.894250] audit: type=1327 audit(1736360597.716:60): proctitle="(systemd)"
    [   31.968301] audit: type=1334 audit(1736360597.792:61): prog-id=16 op=LOAD
    [   31.968344] audit: type=1300 audit(1736360597.792:61): arch=c00000b7 syscall=280 success=yes exit=8 a0=5 a1=fffff21a0b18 a2=90 a3=0 items=0 ppid=1 pid=342 au)
    [   31.968361] audit: type=1327 audit(1736360597.792:61): proctitle="(systemd)"
    [   31.968382] audit: type=1334 audit(1736360597.792:62): prog-id=16 op=UNLOAD
    [   31.968395] audit: type=1300 audit(1736360597.792:62): arch=c00000b7 syscall=57 success=yes exit=0 a0=8 a1=1 a2=0 a3=ffff87c50bc0 items=0 ppid=1 pid=342 auid)
    [   31.968411] audit: type=1327 audit(1736360597.792:62): proctitle="(systemd)"
    [   46.338721] kauditd_printk_skb: 10 callbacks suppressed
    [   46.338746] audit: type=1131 audit(1736360612.160:69): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   46.489973] audit: type=1130 audit(1736360612.312:70): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   56.543345] audit: type=1131 audit(1736360622.364:71): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   56.743296] audit: type=1130 audit(1736360622.564:72): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   66.771421] audit: type=1131 audit(1736360632.596:73): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   66.988463] audit: type=1130 audit(1736360632.808:74): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   77.020927] audit: type=1131 audit(1736360642.844:75): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   77.239248] audit: type=1130 audit(1736360643.060:76): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   87.268692] audit: type=1131 audit(1736360653.092:77): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   87.484841] audit: type=1130 audit(1736360653.304:78): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   97.534215] audit: type=1131 audit(1736360663.356:79): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [   97.739196] audit: type=1130 audit(1736360663.560:80): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  107.766426] audit: type=1131 audit(1736360673.588:81): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  107.981111] audit: type=1130 audit(1736360673.804:82): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  118.034099] audit: type=1131 audit(1736360683.856:83): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  118.242103] audit: type=1130 audit(1736360684.060:84): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  128.268542] audit: type=1131 audit(1736360694.092:85): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  128.492377] audit: type=1130 audit(1736360694.312:86): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  138.520777] audit: type=1131 audit(1736360704.344:87): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  138.743247] audit: type=1130 audit(1736360704.564:88): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  148.769695] audit: type=1131 audit(1736360714.592:89): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  148.987328] audit: type=1130 audit(1736360714.808:90): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  159.022330] audit: type=1131 audit(1736360724.844:91): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  159.239615] audit: type=1130 audit(1736360725.060:92): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  169.267019] audit: type=1131 audit(1736360735.088:93): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  169.485984] audit: type=1130 audit(1736360735.308:94): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  179.534410] audit: type=1131 audit(1736360745.356:95): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  179.740435] audit: type=1130 audit(1736360745.560:96): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  189.769774] audit: type=1131 audit(1736360755.592:97): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  189.991272] audit: type=1130 audit(1736360755.812:98): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  200.018560] audit: type=1131 audit(1736360765.840:99): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/s'
    [  200.237748] audit: type=1130 audit(1736360766.060:100): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  210.268841] audit: type=1131 audit(1736360776.092:101): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  210.491311] audit: type=1130 audit(1736360776.312:102): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  220.538447] audit: type=1131 audit(1736360786.360:103): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  220.741578] audit: type=1130 audit(1736360786.564:104): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  230.768912] audit: type=1131 audit(1736360796.592:105): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  230.990891] audit: type=1130 audit(1736360796.812:106): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  241.017823] audit: type=1131 audit(1736360806.840:107): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  241.249227] audit: type=1130 audit(1736360807.072:108): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  245.814813] remoteproc remoteproc11: powering up 300b4000.pru
    [  245.817958] remoteproc remoteproc11: Booting fw image ti-pruss/am64x-sr2-pru0-prueth-fw.elf, size 39724
    [  245.818007] remoteproc remoteproc11: unsupported resource 5
    [  245.818037] remoteproc remoteproc11: remote processor 300b4000.pru is now up
    [  245.818094] remoteproc remoteproc12: powering up 30084000.rtu
    [  245.819630] remoteproc remoteproc12: Booting fw image ti-pruss/am64x-sr2-rtu0-prueth-fw.elf, size 32052
    [  245.819694] remoteproc remoteproc12: remote processor 30084000.rtu is now up
    [  245.819752] remoteproc remoteproc13: powering up 3008a000.txpru
    [  245.821892] remoteproc remoteproc13: Booting fw image ti-pruss/am64x-sr2-txpru0-prueth-fw.elf, size 39272
    [  245.821960] remoteproc remoteproc13: remote processor 3008a000.txpru is now up
    [  245.822018] remoteproc remoteproc14: powering up 300b8000.pru
    [  245.824778] remoteproc remoteproc14: Booting fw image ti-pruss/am64x-sr2-pru1-prueth-fw.elf, size 39884
    [  245.824826] remoteproc remoteproc14: unsupported resource 5
    [  245.824858] remoteproc remoteproc14: remote processor 300b8000.pru is now up
    [  245.824919] remoteproc remoteproc15: powering up 30086000.rtu
    [  245.826464] remoteproc remoteproc15: Booting fw image ti-pruss/am64x-sr2-rtu1-prueth-fw.elf, size 31284
    [  245.826529] remoteproc remoteproc15: remote processor 30086000.rtu is now up
    [  245.826586] remoteproc remoteproc16: powering up 3008c000.txpru
    [  245.828709] remoteproc remoteproc16: Booting fw image ti-pruss/am64x-sr2-txpru1-prueth-fw.elf, size 37760
    [  245.828784] remoteproc remoteproc16: remote processor 3008c000.txpru is now up
    [  248.347672] remoteproc remoteproc13: stopped remote processor 3008a000.txpru
    [  248.347708] remoteproc remoteproc12: stopped remote processor 30084000.rtu
    [  248.347720] remoteproc remoteproc11: stopped remote processor 300b4000.pru
    [  248.347731] remoteproc remoteproc16: stopped remote processor 3008c000.txpru
    [  248.347741] remoteproc remoteproc15: stopped remote processor 30086000.rtu
    [  248.347751] remoteproc remoteproc14: stopped remote processor 300b8000.pru
    [  248.349777] icssg-prueth icssg1-eth eth1: cut-thru enabled for q0
    [  248.349968] icssg-prueth icssg1-eth eth2: cut-thru enabled for q0
    [  248.349995] remoteproc remoteproc11: powering up 300b4000.pru
    [  248.354392] remoteproc remoteproc11: Booting fw image ti-pruss/am64x-sr2-pru0-pruhsr-fw.elf, size 39572
    [  248.354442] remoteproc remoteproc11: unsupported resource 5
    [  248.354474] remoteproc remoteproc11: remote processor 300b4000.pru is now up
    [  248.354535] remoteproc remoteproc12: powering up 30084000.rtu
    [  248.357114] remoteproc remoteproc12: Booting fw image ti-pruss/am64x-sr2-rtu0-pruhsr-fw.elf, size 37536
    [  248.357190] remoteproc remoteproc12: remote processor 30084000.rtu is now up
    [  248.357250] remoteproc remoteproc13: powering up 3008a000.txpru
    [  248.359751] remoteproc remoteproc13: Booting fw image ti-pruss/am64x-sr2-txpru0-pruhsr-fw.elf, size 37704
    [  248.359824] remoteproc remoteproc13: remote processor 3008a000.txpru is now up
    [  248.359884] remoteproc remoteproc14: powering up 300b8000.pru
    [  248.362339] remoteproc remoteproc14: Booting fw image ti-pruss/am64x-sr2-pru1-pruhsr-fw.elf, size 39692
    [  248.362387] remoteproc remoteproc14: unsupported resource 5
    [  248.362417] remoteproc remoteproc14: remote processor 300b8000.pru is now up
    [  248.362476] remoteproc remoteproc15: powering up 30086000.rtu
    [  248.364812] remoteproc remoteproc15: Booting fw image ti-pruss/am64x-sr2-rtu1-pruhsr-fw.elf, size 36764
    [  248.364890] remoteproc remoteproc15: remote processor 30086000.rtu is now up
    [  248.364949] remoteproc remoteproc16: powering up 3008c000.txpru
    [  248.366725] remoteproc remoteproc16: Booting fw image ti-pruss/am64x-sr2-txpru1-pruhsr-fw.elf, size 36196
    [  248.366796] remoteproc remoteproc16: remote processor 3008c000.txpru is now up
    [  248.896532] icssg-prueth icssg1-eth eth1: Link is Up - 100Mbps/Full - flow control off
    [  250.368486] icssg-prueth icssg1-eth eth2: Link is Up - 100Mbps/Full - flow control off
    [  251.294034] audit: type=1131 audit(1736360817.116:109): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    [  251.483274] audit: type=1130 audit(1736360817.304:110): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=serial-getty@ttyS0 comm="systemd" exe="/usr/lib/'
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.12.29-00424-g56abcc848a46 #1 SMP PREEMPT_RT Wed Aug 20 10:27:15 CEST 2025 aarch64 GNU/Linux
    root@am64xx-evm:~# 
    


    I found similar logs when using ethtool to set 100 Mbps link speed. 
    On your logs, it seems the firmware is not start at all. I don't get why it says restart... maybe did u down first eth1 and eth2 before starting the script ? 

    - Tianyi