• Oleksij Rempel's avatar
    net: ag71xx: add flow control support · 2fb7357d
    Oleksij Rempel authored
    Add flow control support. The functionality was tested on AR9331 SoC and
    confirmed by iperf3 results and HW counters exported over ethtool.
    Following test configurations was used:
    
    iMX6S receiver <--- TL-SG1005D switch <---- AR9331 sender
    
    The switch is supporting symmytric flow control:
    Settings for eth0:
            Supported ports: [ MII ]
            Supported link modes:   10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
            Supported pause frame use: Symmetric Receive-only
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
            Advertised pause frame use: Symmetric
            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
            Port: MII
            PHYAD: 4
            Transceiver: external
            Link detected: yes
    
    The iMX6S system was configured to 10Mbit, to let the switch use flow
    control:
      - ethtool -s eth0 speed 10
    
    With flow control disabled on AR9331:
      - ethtool -A eth0  rx off tx off
      - iperf3 -u -c 172.17.0.1 -b100M -l1472 -t10
    
    [ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
    [  5]   0.00-10.00  sec  66.2 MBytes  55.5 Mbits/sec  0.000 ms  0/47155 (0%)  sender
    [  5]   0.00-10.04  sec  11.5 MBytes  9.57 Mbits/sec  1.309 ms  38986/47146 (83%)  receiver
    
    With flow control enabled on AR9331:
      - ethtool -A eth0  rx on tx on
      - iperf3 -u -c 172.17.0.1 -b100M -l1472 -t10
    
    [ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
    [  5]   0.00-10.00  sec  15.1 MBytes  12.6 Mbits/sec  0.000 ms  0/10727 (0%)  sender
    [  5]   0.00-10.05  sec  11.5 MBytes  9.57 Mbits/sec  1.371 ms  2525/10689 (24%)  receiver
    
    Similar results are get in opposite direction by introducing extra CPU
    load on AR9331:
      - chrt 40 dd if=/dev/zero of=/dev/null &
    Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2fb7357d
ag71xx.c 52.3 KB