This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM6442: AM64x - Dual HSR/PRP Redundant Communication Sets Possible?

Part Number: AM6442
Other Parts Discussed in Thread: TMDX654IDKEVM

Tool/software:

Hello,

According to the specifications, I understand that the AM64x supports HSR and PRP protocols. I also confirmed that up to five Ethernet ports are possible on the AM64x, with two ports each available through ICSSG0 and ICSSG1.

What I would like to clarify is whether it is possible to configure two independent sets of HSR or PRP redundant communication on the AM64x. Specifically, can I use ports 1 and 2 for one HSR or PRP network, and ports 3 and 4 for a separate, second HSR or PRP network?

Thank you in advance for your support.

  • Hi ,

    Thanks for your query.

    This is RTOS or Linux use case ?

    Regards
    Ashwani

  • Hi Ashwani,

    Yes, I will use Linux - RT.

  • Hello Kwon Hyochul,

    What I would like to clarify is whether it is possible to configure two independent sets of HSR or PRP redundant communication on the AM64x. Specifically, can I use ports 1 and 2 for one HSR or PRP network, and ports 3 and 4 for a separate, second HSR or PRP network?
    I also confirmed that up to five Ethernet ports are possible on the AM64x, with two ports each available through ICSSG0 and ICSSG1

    From my understanding, in order to set up an HSR or PRP interface with two ports, both ports have to be of the same Ethernet type (i.e. ICSSG_PRU Ethernet or CPSW Ethernet). While it has been verified many times on the AM64x TI EVM, which breaks out ICSSG1_PRU ports and CPSW ports, that setting up a single HSR or PRP interface at a time does work, the TI AM64x EVM doesn't break out more than 3 Ethernet ports, so we currently do not have a way of verifying that setting up two independent HSR or PRP interfaces will work (need at least 4 ports, with each pair of ports of the same type of Ethernet). 

    To my knowledge, (in theory) as long as ICSSG0_PRU and ICSSG1_PRU are independent of each other and the two ports from ICSSG0 is used for one HSR/PRP network and the two ports from ICSSG1 is used for another HSR/PRP network, it should be possible to set up two independent HSR/PRP interfaces, however there may be additional work needed evaluate/verify setting this up is as simple. In other words, no verification of setting up two independent HSR/PRP networks on AM64x has been evaluated yet.

    May I ask what end application are you planning on using HSR or PRP protocols for?

    -Daolin

  • Hello Daolin,


    Thank you for your kind and informative response.

    We are considering using this MCU for developing an IED (Intelligent Electronic Device) for substation applications.
    As far as I know, the TMDX654IDKEVM, although from the 65x series, features up to six Ethernet ports.
    Do you have any experience using this board to implement two separate sets of HSR or PRP?

    In substation environments, devices are typically connected to both a Process Bus and a Station Bus,
    so redundant communication is required for both networks.

    Regards

    Kwon

  • Hi Kwon,

    As far as I know, the TMDX654IDKEVM, although from the 65x series, features up to six Ethernet ports.
    Do you have any experience using this board to implement two separate sets of HSR or PRP?

    Thanks for explaining your end application. Please allow me some time to check internally on AM65x support for HSR/PRP and whether two separate instances of HSR/PRP have been tested on the AM65x EVM.

    How much time you will looking to evaluate/decide on an MCU for your substation application?

    -Daolin

  • Hi Daolin,

    We are planning to make the preliminary MCU selection within this week, place the order within this month, and proceed with the actual evaluation next month.

    Do you have an estimate of how long it might take to get the internal confirmation you mentioned?

    Regards

    Kwon

  • Hello Kwon 

    We do not recommend that you pick AM65 if this is a new design. We have stopped all software investments on AM65, and currently keeping this on best effort maintenance effort - which we will continue to evaluate every year based on customer tractions. 

    Please also see the notes in AM65 Linux SDK release notes

    2.1. Release Notes — Processor SDK Linux for AM65X Documentation

    We recommend AM64 family for any of your HSR/PRP functionality and products. 

    Regards

    Mukul 

  • Hi, Mukul

    I understand your recommendation for using the AM64x, and I also prefer to proceed with development based on the AM64x if possible.

    However, as I mentioned, I would like to be certain whether it is indeed possible to configure two sets of HSR/PRP on the AM64x.

    If there is no confirmed information on this, does that mean I would need to purchase the EVM and build additional hardware myself to verify it?

    Best regards,
    Kwon

  • Hi Kwon, 

    However, as I mentioned, I would like to be certain whether it is indeed possible to configure two sets of HSR/PRP on the AM64x.

    Checking internally, the main roadblock is to expose ICSSG0 on AM64x EVM so that two instances of HSR/PRP can be tested. Currently there is an Ethernet daughterboard (https://www.ti.com/tool/DP83TG720-IND-SPE-EVM#order-start-development) for TI's DP83TG720 1000BASE-T1 PHY that can be used on AM64x EVM to test out the ICSSG0 interface but there is no upstreamed Linux driver support for this PHY yet. 

    If I can get the daughterboard to be setup in Linux with the out-of-tree PHY Linux driver, I might be able to use this daughterboard to at least prove out if two instances of HSR/PRP can work on AM64x with ICSSG0 and ICSSG1. There is no guarantee that I will be able to set up the daughterboard successfully but I will try it out this week.

    Please kindly ping this thread if you don't hear back by Friday.

    -Daolin

  • Update:

    I was able to test out two separate HSR networks running on ICSSG0 and ICSSG1 on AM64x EVM with the daughterboard I mentioned and HSR appears to work without any issue (basic ping test and disconnect/reconnect the cable between in each HSR network one at a time).

    Here is a rough diagram of my test setup:

    Some limitations/additional notes with the test I ran are:

    1. EVM1 and EVM2 were running on Linux Kernel 6.1 as the quickest way I could get the daughterboard up and running was on this version. EVM3 was running on Linux Kernel 6.6. There shouldn't be any issue with this as both Kernel versions support HSR offload, just with slight variations on what commands are needed to setup HSR.

    2. This test setup only verifies a 2-device HSR network for each HSR network. Pass tests I've done indicated that for full HSR functionality (including HSR switching functionality), an HSR network of at least 3 devices are needed (one device acting as HSR switch). I cannot test this currently because I only have 2 daughterboards.

    This doesn't mean that HSR switch functionality wouldn't work on ICSSG0, it just means I cannot test it out currently. HSR switch functionality on ICSSG1 (the stacked RJ45 Ethernet ports on the AM64x EVM) has been tested to be working and benchmarked many times. Due to this, it's likely there aren't any major issues with HSR switch on ICSSG0.

    Summary: proof-of-concept-wise, it is possible to setup two sets of HSR networks on AM64x. I suspect that a similar result would be observed with PRP (though I haven't tried/tested for PRP).

    Let us know if you have follow-up inquiries!

    The two HSR interfaces on EVM2:

    hsr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.10.20  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::72ff:76ff:fe1f:3dc6  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:3d:c6  txqueuelen 1000  (Ethernet)
            RX packets 2  bytes 640 (640.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 17  bytes 1646 (1.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    hsr1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.20.20  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::68fd:cfff:febb:7f83  prefixlen 64  scopeid 0x20<link>
            ether 6a:fd:cf:bb:7f:83  txqueuelen 1000  (Ethernet)
            RX packets 87  bytes 17098 (16.6 KiB)
            RX errors 0  dropped 28  overruns 0  frame 0
            TX packets 175  bytes 13970 (13.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    EVM1 Console Log: 

    
    root@am64xx-evm:~# ifconfig
    eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether 34:08:e1:80:a7:ad  txqueuelen 1000  (Ethernet)
            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
    
    eth1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether 72:93:50:04:1e:59  txqueuelen 1000  (Ethernet)
            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
    
    eth2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether da:4a:c7:d0:f9:73  txqueuelen 1000  (Ethernet)
            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
    
    eth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1e:9c46  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1e:9c:46  txqueuelen 1000  (Ethernet)
            RX packets 66  bytes 16654 (16.2 KiB)
            RX errors 0  dropped 14  overruns 0  frame 0
            TX packets 179  bytes 25986 (25.3 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    eth4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1e:9c46  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1e:9c:46  txqueuelen 1000  (Ethernet)
            RX packets 102  bytes 20926 (20.4 KiB)
            RX errors 0  dropped 40  overruns 0  frame 0
            TX packets 111  bytes 18854 (18.4 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    hsr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.10.10  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::72ff:76ff:fe1e:9c46  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1e:9c:46  txqueuelen 1000  (Ethernet)
            RX packets 76  bytes 12332 (12.0 KiB)
            RX errors 0  dropped 2  overruns 0  frame 0
            TX packets 94  bytes 9828 (9.5 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 94  bytes 7774 (7.5 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 94  bytes 7774 (7.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    root@am64xx-evm:~# [ 1045.922164] icssg-prueth icssg0-eth eth3: Link is Down
    [ 1045.922522] icssg-prueth icssg0-eth eth4: Link is Down
    [ 1050.024892] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [ 1051.043032] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    \
    > 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ping 192.168.10.20
    PING 192.168.10.20 (192.168.10.20): 56 data bytes
    64 bytes from 192.168.10.20: seq=0 ttl=64 time=0.782 ms
    64 bytes from 192.168.10.20: seq=1 ttl=64 time=0.457 ms
    64 bytes from 192.168.10.20: seq=2 ttl=64 time=0.435 ms
    64 bytes from 192.168.10.20: seq=3 ttl=64 time=0.436 ms
    64 bytes from 192.168.10.20: seq=4 ttl=64 time=0.386 ms
    64 bytes from 192.168.10.20: seq=5 ttl=64 time=0.461 ms
    64 bytes from 192.168.10.20: seq=6 ttl=64 time=0.428 ms
    64 bytes from 192.168.10.20: seq=7 ttl=64 time=0.384 ms
    64 bytes from 192.168.10.20: seq=8 ttl=64 time=0.437 ms
    64 bytes from 192.168.10.20: seq=9 ttl=64 time=0.471 ms
    [ 1073.570264] icssg-prueth icssg0-eth eth4: Link is Down
    64 bytes from 192.168.10.20: seq=10 ttl=64 time=0.415 ms
    64 bytes from 192.168.10.20: seq=11 ttl=64 time=0.443 ms
    64 bytes from 192.168.10.20: seq=12 ttl=64 time=0.376 ms
    64 bytes from 192.168.10.20: seq=13 ttl=64 time=0.401 ms
    64 bytes from 192.168.10.20: seq=14 ttl=64 time=0.441 ms
    [ 1078.691417] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    64 bytes from 192.168.10.20: seq=15 ttl=64 time=0.420 ms
    64 bytes from 192.168.10.20: seq=16 ttl=64 time=0.457 ms
    64 bytes from 192.168.10.20: seq=17 ttl=64 time=0.371 ms
    64 bytes from 192.168.10.20: seq=18 ttl=64 time=0.357 ms
    [ 1082.786549] icssg-prueth icssg0-eth eth3: Link is Down
    64 bytes from 192.168.10.20: seq=19 ttl=64 time=0.419 ms
    64 bytes from 192.168.10.20: seq=20 ttl=64 time=0.440 ms
    64 bytes from 192.168.10.20: seq=21 ttl=64 time=0.464 ms
    64 bytes from 192.168.10.20: seq=22 ttl=64 time=0.389 ms
    64 bytes from 192.168.10.20: seq=23 ttl=64 time=0.408 ms
    64 bytes from 192.168.10.20: seq=24 ttl=64 time=0.380 ms
    [ 1088.932534] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    64 bytes from 192.168.10.20: seq=25 ttl=64 time=0.398 ms
    64 bytes from 192.168.10.20: seq=26 ttl=64 time=0.471 ms
    64 bytes from 192.168.10.20: seq=27 ttl=64 time=0.367 ms
    64 bytes from 192.168.10.20: seq=28 ttl=64 time=0.355 ms
    64 bytes from 192.168.10.20: seq=29 ttl=64 time=0.339 ms
    64 bytes from 192.168.10.20: seq=30 ttl=64 time=0.345 ms
    64 bytes from 192.168.10.20: seq=31 ttl=64 time=0.382 ms
    64 bytes from 192.168.10.20: seq=32 ttl=64 time=0.369 ms
    64 bytes from 192.168.10.20: seq=33 ttl=64 time=0.417 ms
    64 bytes from 192.168.10.20: seq=34 ttl=64 time=0.430 ms
    64 bytes from 192.168.10.20: seq=35 ttl=64 time=0.438 ms
    64 bytes from 192.168.10.20: seq=36 ttl=64 time=0.440 ms
    64 bytes from 192.168.10.20: seq=37 ttl=64 time=0.375 ms
    64 bytes from 192.168.10.20: seq=38 ttl=64 time=0.447 ms
    64 bytes from 192.168.10.20: seq=39 ttl=64 time=0.457 ms
    64 bytes from 192.168.10.20: seq=40 ttl=64 time=0.435 ms
    64 bytes from 192.168.10.20: seq=41 ttl=64 time=0.413 ms
    64 bytes from 192.168.10.20: seq=42 ttl=64 time=0.424 ms
    64 bytes from 192.168.10.20: seq=43 ttl=64 time=0.417 ms
    64 bytes from 192.168.10.20: seq=44 ttl=64 time=0.445 ms
    64 bytes from 192.168.10.20: seq=45 ttl=64 time=0.398 ms
    64 bytes from 192.168.10.20: seq=46 ttl=64 time=0.462 ms
    64 bytes from 192.168.10.20: seq=47 ttl=64 time=0.417 ms
    ^C
    --- 192.168.10.20 ping statistics ---
    48 packets transmitted, 48 packets received, 0% packet loss
    round-trip min/avg/max = 0.339/0.422/0.782 ms
    root@am64xx-evm:~# dmesg | grep -i icssg0
    [    0.000000] Machine model: Texas Instruments AM642 EVM - ICSSG0
    [   10.204471] icssg-prueth icssg0-eth: TI PRU ethernet driver initialized: dual EMAC mode
    [   11.109606] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [  128.291433] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [  402.721905] icssg-prueth icssg0-eth eth4: Link is Down
    [  403.297885] icssg-prueth icssg0-eth eth3: Link is Down
    [  407.393881] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [  407.841901] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [  575.657263] icssg-prueth icssg0-eth eth3: Link is Down
    [  575.720241] icssg-prueth icssg0-eth eth4: Link is Down
    [  577.917373] icssg-prueth icssg0-eth: Enabling HSR offload mode
    [  581.026941] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [  582.050012] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [  600.482187] icssg-prueth icssg0-eth eth3: Link is Down
    [  611.746595] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [  624.034551] icssg-prueth icssg0-eth eth4: Link is Down
    [  629.154925] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [ 1045.922164] icssg-prueth icssg0-eth eth3: Link is Down
    [ 1045.922522] icssg-prueth icssg0-eth eth4: Link is Down
    [ 1050.024892] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [ 1051.043032] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [ 1073.570264] icssg-prueth icssg0-eth eth4: Link is Down
    [ 1078.691417] icssg-prueth icssg0-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [ 1082.786549] icssg-prueth icssg0-eth eth3: Link is Down
    [ 1088.932534] icssg-prueth icssg0-eth eth3: Link is Up - 1Gbps/Full - flow control off
    root@am64xx-evm:~# dmesg | grep -i icssg1
    [    8.087425] icssg-prueth icssg1-eth: port 1: using random MAC addr: 8a:68:5c:ce:99:91
    [    8.118029] icssg-prueth icssg1-eth: port 2: using random MAC addr: aa:df:1c:e9:77:8c
    [    8.191826] icssg-prueth icssg1-eth: TI PRU ethernet driver initialized: dual EMAC mode
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.1.80-rt26-00009-g12496ee3d815 #16 SMP PREEMPT_RT Tue May 20 11:34:20 CDT 2025 aax
    root@am64xx-evm:~# 
    
    
    

    EVM2 Console Log:

    
    root@am64xx-evm:~# ifconfig
    eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether 1c:63:49:1a:d8:aa  txqueuelen 1000  (Ethernet)
            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
    
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1f:3dc6  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:3d:c6  txqueuelen 1000  (Ethernet)
            RX packets 1428  bytes 466444 (455.5 KiB)
            RX errors 0  dropped 9  overruns 0  frame 0
            TX packets 1744  bytes 492128 (480.5 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:3dc6  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:3d:c6  txqueuelen 1000  (Ethernet)
            RX packets 110  bytes 19240 (18.7 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 134  bytes 22252 (21.7 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    eth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::68fd:cfff:febb:7f83  prefixlen 64  scopeid 0x20<link>
            ether 6a:fd:cf:bb:7f:83  txqueuelen 1000  (Ethernet)
            RX packets 4254  bytes 1122576 (1.0 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 1616  bytes 477212 (466.0 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    eth4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::68fd:cfff:febb:7f83  prefixlen 64  scopeid 0x20<link>
            ether 6a:fd:cf:bb:7f:83  txqueuelen 1000  (Ethernet)
            RX packets 1405  bytes 465633 (454.7 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 1461  bytes 464996 (454.0 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    hsr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.10.20  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::72ff:76ff:fe1f:3dc6  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:3d:c6  txqueuelen 1000  (Ethernet)
            RX packets 2  bytes 640 (640.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 17  bytes 1646 (1.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    hsr1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.20.20  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::68fd:cfff:febb:7f83  prefixlen 64  scopeid 0x20<link>
            ether 6a:fd:cf:bb:7f:83  txqueuelen 1000  (Ethernet)
            RX packets 87  bytes 17098 (16.6 KiB)
            RX errors 0  dropped 28  overruns 0  frame 0
            TX packets 175  bytes 13970 (13.6 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 102  bytes 9606 (9.3 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 102  bytes 9606 (9.3 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    root@am64xx-evm:~# [86277.604545] icssg-prueth icssg0-eth eth2: Link is Down
    [86282.728316] icssg-prueth icssg0-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [86286.819660] icssg-prueth icssg0-eth eth1: Link is Down
    [86292.965717] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [86299.107512] icssg-prueth icssg1-eth eth4: Link is Down
    [86305.187288] icssg-prueth icssg1-eth eth3: Link is Down
    [86305.254134] icssg-prueth icssg1-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [86308.259491] icssg-prueth icssg1-eth eth3: Link is Up - 1Gbps/Full - flow control off
    ^C
    root@am64xx-evm:~# dmesg | grep -i icssg0
    [    0.000000] Machine model: Texas Instruments AM642 EVM - ICSSG0
    [    9.068905] icssg-prueth icssg0-eth: TI PRU ethernet driver initialized: dual EMAC mode
    [   10.854403] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85197.411542] icssg-prueth icssg0-eth eth1: Link is Down
    [85205.603549] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85209.699537] icssg-prueth icssg0-eth eth1: Link is Down
    [85210.726348] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85212.771548] icssg-prueth icssg0-eth eth1: Link is Down
    [85213.798520] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85214.819562] icssg-prueth icssg0-eth eth1: Link is Down
    [85215.843546] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85332.516785] icssg-prueth icssg0-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [85606.713920] icssg-prueth icssg0-eth eth1: Link is Down
    [85606.760130] icssg-prueth icssg0-eth eth2: Link is Down
    [85608.960386] icssg-prueth icssg0-eth: Enabling HSR offload mode
    [85612.068653] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85613.092267] icssg-prueth icssg0-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [85780.003873] icssg-prueth icssg0-eth eth1: Link is Down
    [85781.027860] icssg-prueth icssg0-eth eth2: Link is Down
    [85785.129954] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85786.148240] icssg-prueth icssg0-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [85804.580293] icssg-prueth icssg0-eth eth1: Link is Down
    [85815.844251] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [85828.132241] icssg-prueth icssg0-eth eth2: Link is Down
    [85834.278155] icssg-prueth icssg0-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [86249.709971] icssg-prueth icssg0-eth eth1: Link is Down
    [86249.752967] icssg-prueth icssg0-eth eth2: Link is Down
    [86255.075774] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [86256.100295] icssg-prueth icssg0-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [86277.604545] icssg-prueth icssg0-eth eth2: Link is Down
    [86282.728316] icssg-prueth icssg0-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [86286.819660] icssg-prueth icssg0-eth eth1: Link is Down
    [86292.965717] icssg-prueth icssg0-eth eth1: Link is Up - 1Gbps/Full - flow control off
    root@am64xx-evm:~# dmesg | grep -i icssg1
    [    9.143748] icssg-prueth icssg1-eth: port 1: using random MAC addr: 1a:91:70:eb:9d:fc
    [    9.154379] icssg-prueth icssg1-eth: port 2: using random MAC addr: 9e:a1:cb:73:5a:8a
    [    9.220768] icssg-prueth icssg1-eth: TI PRU ethernet driver initialized: dual EMAC mode
    [   13.604608] icssg-prueth icssg1-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [   13.731824] icssg-prueth icssg1-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [86026.482947] icssg-prueth icssg1-eth eth3: Link is Down
    [86026.512026] icssg-prueth icssg1-eth eth4: Link is Down
    [86028.707518] icssg-prueth icssg1-eth: Enabling HSR offload mode
    [86033.831408] icssg-prueth icssg1-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [86034.919810] icssg-prueth icssg1-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [86084.067275] icssg-prueth icssg1-eth eth4: Link is Down
    [86090.213203] icssg-prueth icssg1-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [86093.219501] icssg-prueth icssg1-eth eth3: Link is Down
    [86098.339506] icssg-prueth icssg1-eth eth3: Link is Up - 1Gbps/Full - flow control off
    [86299.107512] icssg-prueth icssg1-eth eth4: Link is Down
    [86305.187288] icssg-prueth icssg1-eth eth3: Link is Down
    [86305.254134] icssg-prueth icssg1-eth eth4: Link is Up - 1Gbps/Full - flow control off
    [86308.259491] icssg-prueth icssg1-eth eth3: Link is Up - 1Gbps/Full - flow control off
    root@am64xx-evm:~# uname -a
    Linux am64xx-evm 6.1.80-rt26-00009-g12496ee3d815 #16 SMP PREEMPT_RT Tue May 20 11:34:20 CDT 2025 aarx
    root@am64xx-evm:~# 
    
    
    

    EVM3 Console Log:

    
    root@am64xx-evm:~# ./hsr_setup.sh hsr1 on enable 192.168.20.30                                      
    ip=192.168.20.30
    if=hsr1
    mac=70:ff:76:1f:3c:46
    slave-a=eth1
    slave-b=eth2
    device=platform/icssg1-eth
    hw_offload=on
    forwarding_method=
    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
    not enabling cutthru
    [86072.067698] remoteproc remoteproc7: stopped remote processor 3008a000.txpru
    [86072.075769] remoteproc remoteproc14: stopped remote processor 30084000.rtu
    [86072.075796] remoteproc remoteproc13: stopped remote processor 300b4000.pru
    [86072.075810] remoteproc remoteproc8: stopped remote processor 3008c000.txpru
    [86072.075819] remoteproc remoteproc16: stopped remote processor 30086000.rtu
    [86072.075829] remoteproc remoteproc15: stopped remote processor 300b8000.pru
    [86072.076102] remoteproc remoteproc13: powering up 300b4000.pru
    [86072.083437] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-pru0-pruhsr-fw.elf, siz8
    [86072.083486] remoteproc remoteproc13: unsupported resource 5
    [86072.083515] remoteproc remoteproc13: remote processor 300b4000.pru is now up
    [86072.083560] remoteproc remoteproc14: powering up 30084000.rtu
    [86072.086359] remoteproc remoteproc14: Booting fw image ti-pruss/am65x-sr2-rtu0-pruhsr-fw.elf, siz4
    [86072.086418] remoteproc remoteproc14: remote processor 30084000.rtu is now up
    [86072.086465] remoteproc remoteproc7: powering up 3008a000.txpru
    [86072.087705] remoteproc remoteproc7: Booting fw image ti-pruss/am65x-sr2-txpru0-pruhsr-fw.elf, si8
    [86072.087769] remoteproc remoteproc7: remote processor 3008a000.txpru is now up
    [86072.087983] remoteproc remoteproc15: powering up 300b8000.pru
    [86072.090501] remoteproc remoteproc15: Booting fw image ti-pruss/am65x-sr2-pru1-pruhsr-fw.elf, siz8
    [86072.090546] remoteproc remoteproc15: unsupported resource 5
    [86072.090573] remoteproc remoteproc15: remote processor 300b8000.pru is now up
    [86072.090617] remoteproc remoteproc16: powering up 30086000.rtu
    [86072.094348] remoteproc remoteproc16: Booting fw image ti-pruss/am65x-sr2-rtu1-pruhsr-fw.elf, siz6
    [86072.094407] remoteproc remoteproc16: remote processor 30086000.rtu is now up
    [86072.094452] remoteproc remoteproc8: powering up 3008c000.txpru
    [86072.095638] remoteproc remoteproc8: Booting fw image ti-pruss/am65x-sr2-txpru1-pruhsr-fw.elf, si6
    [86072.095699] remoteproc remoteproc8: remote processor 3008c000.txpru is now up
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ping 192.168.20.20
    PING 192.168.20.20 (192.168.20.20) 56(84) bytes of data.
    64 bytes from 192.168.20.20: icmp_seq=1 ttl=64 time=0.617 ms
    64 bytes from 192.168.20.20: icmp_seq=2 ttl=64 time=0.361 ms
    64 bytes from 192.168.20.20: icmp_seq=3 ttl=64 time=0.326 ms
    64 bytes from 192.168.20.20: icmp_seq=4 ttl=64 time=0.344 ms
    64 bytes from 192.168.20.20: icmp_seq=5 ttl=64 time=0.356 ms
    [86087.524864] icssg-prueth icssg1-eth eth2: Link is Down
    64 bytes from 192.168.20.20: icmp_seq=6 ttl=64 time=0.391 ms
    64 bytes from 192.168.20.20: icmp_seq=7 ttl=64 time=0.309 ms
    64 bytes from 192.168.20.20: icmp_seq=8 ttl=64 time=0.354 ms
    64 bytes from 192.168.20.20: icmp_seq=9 ttl=64 time=0.361 ms
    64 bytes from 192.168.20.20: icmp_seq=10 ttl=64 time=0.345 ms
    64 bytes from 192.168.20.20: icmp_seq=11 ttl=64 time=0.377 ms
    [86093.668804] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow control off
    64 bytes from 192.168.20.20: icmp_seq=12 ttl=64 time=0.377 ms
    64 bytes from 192.168.20.20: icmp_seq=13 ttl=64 time=0.338 ms
    64 bytes from 192.168.20.20: icmp_seq=14 ttl=64 time=0.368 ms
    [86097.636617] icssg-prueth icssg1-eth eth1: Link is Down
    64 bytes from 192.168.20.20: icmp_seq=15 ttl=64 time=0.351 ms
    64 bytes from 192.168.20.20: icmp_seq=16 ttl=64 time=0.367 ms
    64 bytes from 192.168.20.20: icmp_seq=17 ttl=64 time=0.344 ms
    64 bytes from 192.168.20.20: icmp_seq=18 ttl=64 time=0.379 ms
    64 bytes from 192.168.20.20: icmp_seq=19 ttl=64 time=0.348 ms[86101.732889] icssg-prueth icssg1-ethf
    
    64 bytes from 192.168.20.20: icmp_seq=20 ttl=64 time=0.274 ms
    64 bytes from 192.168.20.20: icmp_seq=21 ttl=64 time=0.372 ms
    64 bytes from 192.168.20.20: icmp_seq=22 ttl=64 time=0.405 ms
    ^C
    --- 192.168.20.20 ping statistics ---
    22 packets transmitted, 22 received, 0% packet loss, time 21514ms
    rtt min/avg/max/mdev = 0.274/0.366/0.617/0.061 ms
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# 
    root@am64xx-evm:~# ping 192.168.20.20
    PING 192.168.20.20 (192.168.20.20) 56(84) bytes of data.
    64 bytes from 192.168.20.20: icmp_seq=1 ttl=64 time=0.390 ms
    64 bytes from 192.168.20.20: icmp_seq=2 ttl=64 time=0.404 ms
    64 bytes from 192.168.20.20: icmp_seq=3 ttl=64 time=0.297 ms
    64 bytes from 192.168.20.20: icmp_seq=4 ttl=64 time=0.377 ms
    64 bytes from 192.168.20.20: icmp_seq=5 ttl=64 time=0.310 ms
    64 bytes from 192.168.20.20: icmp_seq=6 ttl=64 time=0.358 ms
    64 bytes from 192.168.20.20: icmp_seq=7 ttl=64 time=0.374 ms
    64 bytes from 192.168.20.20: icmp_seq=8 ttl=64 time=0.313 ms
    64 bytes from 192.168.20.20: icmp_seq=9 ttl=64 time=0.315 ms
    64 bytes from 192.168.20.20: icmp_seq=10 ttl=64 time=0.358 ms
    64 bytes from 192.168.20.20: icmp_seq=11 ttl=64 time=0.310 ms
    64 bytes from 192.168.20.20: icmp_seq=12 ttl=64 time=0.354 ms
    64 bytes from 192.168.20.20: icmp_seq=13 ttl=64 time=0.361 ms
    64 bytes from 192.168.20.20: icmp_seq=14 ttl=64 time=0.338 ms
    64 bytes from 192.168.20.20: icmp_seq=15 ttl=64 time=0.327 ms
    64 bytes from 192.168.20.20: icmp_seq=16 ttl=64 time=0.341 ms
    64 bytes from 192.168.20.20: icmp_seq=17 ttl=64 time=0.357 ms
    64 bytes from 192.168.20.20: icmp_seq=18 ttl=64 time=0.356 ms
    64 bytes from 192.168.20.20: icmp_seq=19 ttl=64 time=0.303 ms
    64 bytes from 192.168.20.20: icmp_seq=20 ttl=64 time=0.341 ms
    64 bytes from 192.168.20.20: icmp_seq=21 ttl=64 time=0.356 ms
    64 bytes from 192.168.20.20: icmp_seq=22 ttl=64 time=0.322 ms
    64 bytes from 192.168.20.20: icmp_seq=23 ttl=64 time=0.343 ms
    64 bytes from 192.168.20.20: icmp_seq=24 ttl=64 time=0.356 ms
    64 bytes from 192.168.20.20: icmp_seq=25 ttl=64 time=0.340 ms
    64 bytes from 192.168.20.20: icmp_seq=26 ttl=64 time=0.344 ms
    64 bytes from 192.168.20.20: icmp_seq=27 ttl=64 time=0.323 ms
    [86303.588613] icssg-prueth icssg1-eth eth2: Link is Down
    64 bytes from 192.168.20.20: icmp_seq=28 ttl=64 time=0.361 ms
    64 bytes from 192.168.20.20: icmp_seq=29 ttl=64 time=0.346 ms
    64 bytes from 192.168.20.20: icmp_seq=30 ttl=64 time=0.255 ms
    64 bytes from 192.168.20.20: icmp_seq=31 ttl=64 time=0.245 ms
    64 bytes from 192.168.20.20: icmp_seq=32 ttl=64 time=0.265 ms
    [86309.604807] icssg-prueth icssg1-eth eth1: Link is Down
    [86309.732838] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow control off
    64 bytes from 192.168.20.20: icmp_seq=34 ttl=64 time=0.564 ms
    64 bytes from 192.168.20.20: icmp_seq=35 ttl=64 time=0.314 ms
    64 bytes from 192.168.20.20: icmp_seq=36 ttl=64 time=0.344 ms
    [86312.676808] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbps/Full - flow control off
    64 bytes from 192.168.20.20: icmp_seq=37 ttl=64 time=0.320 ms
    64 bytes from 192.168.20.20: icmp_seq=38 ttl=64 time=0.313 ms
    64 bytes from 192.168.20.20: icmp_seq=39 ttl=64 time=0.260 ms
    64 bytes from 192.168.20.20: icmp_seq=40 ttl=64 time=0.268 ms
    64 bytes from 192.168.20.20: icmp_seq=41 ttl=64 time=0.255 ms
    64 bytes from 192.168.20.20: icmp_seq=42 ttl=64 time=0.391 ms
    64 bytes from 192.168.20.20: icmp_seq=43 ttl=64 time=0.341 ms
    64 bytes from 192.168.20.20: icmp_seq=44 ttl=64 time=0.327 ms
    ^C
    --- 192.168.20.20 ping statistics ---
    44 packets transmitted, 43 received, 2.27273% packet loss, time 44012ms
    rtt min/avg/max/mdev = 0.245/0.335/0.564/0.051 ms
    root@am64xx-evm:~# dmesg | grep -i icssg0
    root@am64xx-evm:~# dmesg | grep -i icssg1
    [   12.310265] icssg-prueth icssg1-eth: TI PRU ethernet driver initialized: dual EMAC mode
    [   17.253989] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [   18.148821] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [86031.076664] icssg-prueth icssg1-eth eth1: Link is Down
    [86031.204832] icssg-prueth icssg1-eth eth2: Link is Down
    [86038.244805] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [86039.396796] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [86087.524864] icssg-prueth icssg1-eth eth2: Link is Down
    [86093.668804] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [86097.636617] icssg-prueth icssg1-eth eth1: Link is Down
    [86101.732889] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbps/Full - flow control off
    [86303.588613] icssg-prueth icssg1-eth eth2: Link is Down
    [86309.604807] icssg-prueth icssg1-eth eth1: Link is Down
    [86309.732838] icssg-prueth icssg1-eth eth2: Link is Up - 1Gbps/Full - flow control off
    [86312.676808] icssg-prueth icssg1-eth eth1: Link is Up - 1Gbps/Full - flow control off
    root@am64xx-evm:~# ifconfig
    eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether 1c:63:49:1a:d7:bc  txqueuelen 1000  (Ethernet)
            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
    
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::72ff:76ff:fe1f:3c46  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:3c:46  txqueuelen 1000  (Ethernet)
            RX packets 3181  bytes 654481 (639.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 5953  bytes 1315994 (1.2 MiB)
            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:3c45  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:3c:45  txqueuelen 1000  (Ethernet)
            RX packets 3199  bytes 656951 (641.5 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 5960  bytes 1317603 (1.2 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    hsr1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1494
            inet 192.168.20.30  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::72ff:76ff:fe1f:3c46  prefixlen 64  scopeid 0x20<link>
            ether 70:ff:76:1f:3c:46  txqueuelen 1000  (Ethernet)
            RX packets 128  bytes 23976 (23.4 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 792  bytes 60680 (59.2 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 17  bytes 3186 (3.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 17  bytes 3186 (3.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    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:~# 
    
    
    

    -Daolin

  • Hi Daolin,

    Thank you very much for sharing the details of your testing process and results. It was extremely helpful and informative.

    It will likely take a few months for us to implement the full system, including the HSR switch functionality, on the EVM board. Once we complete our evaluation, we will gladly share the results with you as well.

    Regards,

    Kwon

  • Hi Kwon, 

    It will likely take a few months for us to implement the full system, including the HSR switch functionality, on the EVM board. Once we complete our evaluation, we will gladly share the results with you as well.

    I completely understand it will take some time, especially since there is additional hardware needed to expose the ICSSG0 interfaces on the EVM board. I hope my test results gave you more confidence that AM64x can support two separate HSR/PRP networks. 

    Looking forward to hearing back from you about your evaluation results.

    -Daolin