Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/6] net: stmmac: More selftest related fixes
@ 2026-08-26 14:04 Maxime Chevallier
  2026-08-26 14:04 ` [PATCH net 1/6] net: stmmac: selftests: Check multiple MMC counters Maxime Chevallier
                   ` (7 more replies)
  0 siblings, 8 replies; 19+ messages in thread
From: Maxime Chevallier @ 2026-08-26 14:04 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Russell King, Heiner Kallweit, Alexis Lothoré,
	Maxime Coquelin, Alexandre Torgue, Emil Renner Berthing,
	Minda Chen, Neil Armstrong, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Jan Petrous, Ovidiu Panait, Jose.Abreu
  Cc: Maxime Chevallier, netdev, linux-kernel, thomas.petazzoni,
	linux-arm-kernel, linux-stm32

Hello everyone,

This series addresses some (but not all) issues found while running the
ethtool selftest on various stmmac platforms. As a reminder, ethtool
selftest are run with 'ethtool -t ethX', and for stmmac the goal is to test
hardware features and bugs from the IP integration in the platform.

I've been running this on :

 - Altera CycloneV (dwmac-socfpga, dwmac1000 IP, v3.70a)
 - NXP imx8mp (dwmac-imx, dwmac4, v5.10a)
 - Allwinner H2S (dwmac-sun8i, dwmac1000)
 - Amlogic S905X3 (dwmac-meson8b, dwmac1000, v3.70a)
 - STM32mp157a (dwmac-stm32, dwmac4, v4.20a)
 - SiFive JH7110 (dwmac-starfive, dwmac4, v5.20)

Here's the results before this series, noting that some bugs were already
fixed, some are ongoing (cf. the IP proto patch here [1])

[1] : https://lore.kernel.org/netdev/20260825211748.360935-1-maxime.chevallier@bootlin.com/

Tests are OK if return is 0 or -95 (-EOPNOTSUPP), tests are KO otherwise

Test                     imx   socfpga   sun8i   meson8b   stm32 starfive
MAC Loopback              0      0        0        0        0       0
MMC Counters              0      0        -95      -22      0       -22
EEE                       -95    -95      -95      -95      -95     -95
Hash Filter MC            0      0        -95      0        0       0
Perfect Filter UC         0      0        0        0        0       0
MC Filter                 0      0        -95      0        0       0
UC Filter                 0      0        -95      -22      0       0
Flow Control              -110   0        -110     0        0       -110
RSS                       -95    -95      -95      -95      -95     -95
VLAN Filtering            -110   -95      -95      -95      -110    -110
VLAN Filtering (perf)     -110   -95      -95      -95      -110    -110
Double VLAN Filter        -110   -95      -95      -95      -110    -110
Double VLAN Filter (perf) -110   -95      -95      -95      -110    -110
Flexible RX Parser        0      -95      -95      -95      -95     -95
SA Insertion (desc)       0      -95      -95      -95      0       0
SA Replacement (desc)     0      -95      -95      -95      0       0
SA Insertion (reg         0      -95      -95      -95      0       0
SA Replacement (reg)      0      -95      -95      -95      0       0
VLAN TX Insertion         -110   -95      -95      -95      -110    -110
SVLAN TX Insertion        -110   -95      -95      -95      -110    -95
L3 DA Filtering           0      -95      -95      -95      -95     -95
L3 SA Filtering           0      -95      -95      -95      -95     -95
L4 DA TCP Filtering       0      -95      -95      -95      -95     -95
L4 SA TCP Filtering       0      -95      -95      -95      -95     -95
L4 DA UDP Filtering       0      -95      -95      -95      -95     -95
L4 SA UDP Filtering       0      -95      -95      -95      -95     -95
ARP Offload               -95    -95      -95      -95      -110    -110
Jumbo Frame               0      0        0        0        0       0
Multichannel Jumbo        0      -95      -95      -95      -95     -95
Split Header             -95     -95      -95      -95      -95     -95
TBS (ETF Scheduler)      -95     -95      -95      -95      -95     -95

So, only sogfpga is all OK (in all fairness, it doesn't support much)

Several issues :

 - MMC test failing on starfive and meson8b, solved by patch 1
 
MMC counters maintained by the MAC are optional, which one is implemented
depends on how the IP is synthesized. On starfive and meson8b, the counter
used by the selftest to validate the MMC counters feature isn't implemented.

Solved by adding other counters in the validation step, kinda fragile as
this doesn't guarantee this will work on all platforms.

 - Flow control test failing on starfive, imx8mp, sun8i, solved by patch 6
 
Turns out these platforms actually never emit any Pause frame, as they don't
have enough room in their per-queue RX Fifo. They do correctly process RX
Pause frames. The fix isn't to change the advertised pauseparams, as the
pause negotiation process based on MAC capabilities doesn't allow us to
say we "just" support RX pause, so let's just not run the Pause tests if
the RX fifo is too small.

 - UC filter failing on meson8b, fixed by patches 2,3,4 and 5
 
This one is quite the rabbit hole, and is a combination of multiple issues.

 - Unicast filtering uses the same filter (perfect filter) to allow the
   primary MAC address and the secondary addresses (dev->uc) to flow
   through the interface. That means if we have say 64 slots in the
   perfect filter, only 63 can be used for the dev->uc list, as the first
   entry stores the MAC address. If the filter is full, we switch to UC
   promisc mode, were we let all UC frames flow. There's an off-by-one
   error in dwmac1000, dwmac4 and dwxgmac2.
   
 - The selftest itself needs an empty slot in the filter, so it has to
   check that sizeof(dev->uc) is $number_of_slots - 2 (one for primary
   MAC, one for the test). There's an off-by-two error in the selftest.
   
 - This leads to an interesting finding (not addressed by this series) :

   The size of the perfect filter isn't reported by the HW, so it comes
   from firmware (snps,perfect-filter-entries). A lot of platforms don't
   specify that in DT (e.g. imx8mp doesn't, it has 128 entries but the
   driver thinks there's only 1...). I've reached out to Synopsys to
   see if there's some sane default we could use on dwmac4, if anyone
   has a dwmac4 databook I'd appreciate if you could look this up, as I
   don't have access to them, I'm not a vendor... Otherwise, we'll have
   to patch all the .dtsi if we want to avoid going in UC promisc as
   soon as we add an entry in dev->uc.
   
After this series, socfpga, starfive and sun8i are all OK :)
   
Some issues are still out there, the VLAN filtering and tagging fails on
imx8mp and stm32 (so, dwmac4) butI haven't got there yet.

ARP offload doesn't work on stm32mp157a and starfive JH7110 either.

Feel free to look this up if you feel like it,
just let me know so that we don't do work on the same thing :)

Maxime

Maxime Chevallier (6):
  net: stmmac: selftests: Check multiple MMC counters
  net: stmmac: dwmac1000: Account for the primary MAC address for UC
    filtering
  net: stmmac: dwmac4: Account for the primary MAC address for UC
    filtering
  net: stmmac: dwxgmac: Account for the primary MAC address for UC
    filtering
  net: stmmac: selftests: Account for the UC filter list for filtering
    tests
  net: stmmac: selftests: Don't test flow control for small rx fifos

 .../ethernet/stmicro/stmmac/dwmac1000_core.c  |  2 +-
 .../net/ethernet/stmicro/stmmac/dwmac4_core.c |  2 +-
 .../ethernet/stmicro/stmmac/dwxgmac2_core.c   |  2 +-
 .../stmicro/stmmac/stmmac_selftests.c         | 51 +++++++++++++++----
 4 files changed, 44 insertions(+), 13 deletions(-)

-- 
2.55.0



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

end of thread, other threads:[~2026-08-27 20:40 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-26 14:04 [PATCH net 0/6] net: stmmac: More selftest related fixes Maxime Chevallier
2026-08-26 14:04 ` [PATCH net 1/6] net: stmmac: selftests: Check multiple MMC counters Maxime Chevallier
2026-08-26 17:14   ` Andrew Lunn
2026-08-26 20:24     ` Maxime Chevallier
2026-08-26 14:04 ` [PATCH net 2/6] net: stmmac: dwmac1000: Account for the primary MAC address for UC filtering Maxime Chevallier
2026-08-26 18:20   ` Andrew Lunn
2026-08-26 14:04 ` [PATCH net 3/6] net: stmmac: dwmac4: " Maxime Chevallier
2026-08-26 18:20   ` Andrew Lunn
2026-08-26 14:04 ` [PATCH net 4/6] net: stmmac: dwxgmac: " Maxime Chevallier
2026-08-26 18:21   ` Andrew Lunn
2026-08-26 14:04 ` [PATCH net 5/6] net: stmmac: selftests: Account for the UC filter list for filtering tests Maxime Chevallier
2026-08-26 18:25   ` Andrew Lunn
2026-08-26 20:21     ` Maxime Chevallier
2026-08-26 14:04 ` [PATCH net 6/6] net: stmmac: selftests: Don't test flow control for small rx fifos Maxime Chevallier
2026-08-26 18:28   ` Andrew Lunn
2026-08-27 17:53 ` [PATCH net 0/6] net: stmmac: More selftest related fixes Jakub Kicinski
2026-08-27 20:16   ` Maxime Chevallier
2026-08-27 20:40     ` Jakub Kicinski
2026-08-27 19:40 ` patchwork-bot+netdevbpf

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