mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/3] selftests: drv-net: Introduce flow-control selftest
@ 2026-09-25 18:26 Maxime Chevallier (Netdev Foundation)
  2026-09-25 18:26 ` [PATCH net-next v2 1/3] selftests: drv-net: Introduce a selftest for ethtool flow control Maxime Chevallier (Netdev Foundation)
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Maxime Chevallier (Netdev Foundation) @ 2026-09-25 18:26 UTC (permalink / raw)
  To: Andrew Lunn, Jakub Kicinski, davem, Eric Dumazet, Paolo Abeni,
	Simon Horman, Russell King, Heiner Kallweit, Jonathan Corbet,
	Shuah Khan
  Cc: Maxime Chevallier (Netdev Foundation),
	Oleksij Rempel, Vladimir Oltean, Florian Fainelli,
	thomas.petazzoni, netdev, linux-kernel, linux-doc

Hi everyone,

This is V2 for the ethtool flow control test.

This test aims at validating the flow control implementation in drivers,
using the ethtool API.

The test can run in various conditions :

DUT <-----> Anything that has link up (not controllable)
DUT <-----> A directly connected device

It enumerates the local and remote device's capabilities, to test as
much as possibly testable. I've run it on 17 different boards connected
to other boards through various means : Usb to Eth dongles, direct
connection to the board, connection through a switch. Some of the ports
tested were user ports of DSA switches too.

Overall, this produced 4 different results (duplicates removed):

dev A : (stmmac or mvpp2), LP that can't use pause
dev B : stmmac, fully controllable LP
dev C : mv88exxx DSA port
dev D : stmmac + KSZ9031 (masks Asym)

                                                    [dev A]   [dev B] [dev C] [dev D]
test_support RX off TX off                           ok         ok     ok     ok
test_support RX off TX on                            ok         ok     ok     ok
test_support RX on TX off                            ok         ok     ok     ok
test_support RX on TX on                             ok         ok     ok     ok
advertising_test RX off TX off                       FAIL       FAIL   ok     FAIL
advertising_test RX off TX on                        ok         ok     skip   skip
advertising_test RX on TX off                        ok         ok     skip   skip
advertising_test RX on TX on                         ok         ok     ok     ok
aneg_resol local rx off tx off, remote rx off tx off skip       ok     skip   skip
aneg_resol local rx off tx off, remote rx off tx on  skip       ok     skip   skip
aneg_resol local rx off tx off, remote rx on tx off  skip       ok     skip   skip
aneg_resol local rx off tx off, remote rx on tx on   skip       ok     skip   skip
aneg_resol local rx off tx on, remote rx off tx off  skip       ok     skip   skip
aneg_resol local rx off tx on, remote rx off tx on   skip       ok     skip   skip
aneg_resol local rx off tx on, remote rx on tx off   skip       ok     skip   skip
aneg_resol local rx off tx on, remote rx on tx on    skip       ok     skip   skip
aneg_resol local rx on tx off, remote rx off tx off  skip       ok     skip   skip
aneg_resol local rx on tx off, remote rx off tx on   skip       ok     skip   skip
aneg_resol local rx on tx off, remote rx on tx off   skip       ok     skip   skip
aneg_resol local rx on tx off, remote rx on tx on    skip       ok     skip   skip
aneg_resol local rx on tx on, remote rx off tx off   skip       ok     skip   skip
aneg_resol local rx on tx on, remote rx off tx on    skip       ok     skip   skip
aneg_resol local rx on tx on, remote rx on tx off    skip       ok     skip   skip
aneg_resol local rx on tx on, remote rx on tx on     skip       ok     skip   skip
autoneg_state_adv                                    skip       FAIL   skip   skip
autoneg_state_params                                 skip       ok     skip   skip
autoneg_off_while_link_autoneg_on                    skip       ok     skip   skip
autoneg_link_autoneg                                 skip       ok     skip   skip

We immediately note 2 things :
 - advertising_test.RX off TX off Fails
 - autoneg_state_adv Fails

These are common to all boards that use phylink in the following scenario :

MAC - PHY <-------------> Peer

It doesn't appear on DSA user ports, even if they user phylink themselves.

The first issue : advertising_test.RX off TX off

ethtool -A eth0 tx off rx off autoneg on
=> We keep advertising Pause and/or Asym

This seems like a legit issue in phylink.

The second issue : autoneg_state_adv

With link aneg on :
ethtool -A eth0 rx on tx on autoneg off
=> We keep advertising Pause + Asym

So, disabling pause autoneg doesn't disable pause advertising, that's not
expected either.

This is worth looking into as a followup.

Thanks to the Netdev Foundation for funding this work :)

Maxime

Changes in V2:
	- Don't add stuff to the lib
	- Fix most pylink errors (module's too long for pylint ...)
	- Ditch the fail=False from the defer()
	- Remove duplicate patches
	- Clean the comments
	- Drop the return type annotations, most were wrong...

V1 : https://lore.kernel.org/netdev/20260920164732.349744-1-maxime.chevallier@bootlin.com/

Maxime Chevallier (Netdev Foundation) (3):
  selftests: drv-net: Introduce a selftest for ethtool flow control
  selftests: drv-net: pause: Validate the pause autonegotiation with a
    partner
  selftests: drv-net: pause: Validate pause autoneg interactions with
    link autoneg

 .../testing/selftests/drivers/net/hw/Makefile |    1 +
 .../testing/selftests/drivers/net/hw/pause.py | 1035 +++++++++++++++++
 2 files changed, 1036 insertions(+)
 create mode 100755 tools/testing/selftests/drivers/net/hw/pause.py

-- 
2.55.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-09-25 18:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-25 18:26 [PATCH net-next v2 0/3] selftests: drv-net: Introduce flow-control selftest Maxime Chevallier (Netdev Foundation)
2026-09-25 18:26 ` [PATCH net-next v2 1/3] selftests: drv-net: Introduce a selftest for ethtool flow control Maxime Chevallier (Netdev Foundation)
2026-09-25 18:26 ` [PATCH net-next v2 2/3] selftests: drv-net: pause: Validate the pause autonegotiation with a partner Maxime Chevallier (Netdev Foundation)
2026-09-25 18:26 ` [PATCH net-next v2 3/3] selftests: drv-net: pause: Validate pause autoneg interactions with link autoneg Maxime Chevallier (Netdev Foundation)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®