Re: [PATCH net 2/6] net: stmmac: selftests: Validate EEE based on the actual LPI timer value
From: Nicolai Buchwitz
Date: Wed Sep 09 2026 - 07:53:07 EST
Hi Maxime
On 9.9.2026 09:47, Maxime Chevallier wrote:
The EEE selftest is a 2-step test :
- It validates that we enter in LPI mode with the
irq_tx_path_in_lpi_mode_n counter
- It then validates that we exit LPI when sending a frame, with the
irq_tx_path_exit_lpi_mode_n counter.
The current state of the test lacks 2 main things :
- We don't know exactly when was the previous frame sent (it's from the
previous selftest)
- The timeout is hardcoded, while the LPI is entered after a
user-configurable delay. On top of that, the timeout loop uses a
pre-decrement iterator (--retries) that actually only iterate nine
times, so 900ms while the default LPI value is 1 second.
Let's therefore make it more deterministic :
- Send a frame at the beginning of the test
- Wait for more than the lpi timer value, we timeout after about twice
the value,
- Then send another frame, and verify that we do go out of LPI, also
with a timeout.
Note that the test's goal isn't to validate the LPI timer value itself,
only that we enter/leave LPI mode.
Fixes: 091810dbded9 ("net: stmmac: Introduce selftests support")
Signed-off-by: Maxime Chevallier <maxime.chevallier@xxxxxxxxxxx>
---
.../stmicro/stmmac/stmmac_selftests.c | 33 ++++++++++++++-----
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index 6503678b646e..4564b9f29194 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
[...]
- memcpy(initial, &priv->xstats, sizeof(*initial));
-
+ /* Send a frame, then wait to enter LPI */
ret = stmmac_test_mac_loopback(priv);
if (ret)
goto out_free_final;
+ max_duration = usecs_to_jiffies(2 * priv->tx_lpi_timer);
+
+ memcpy(initial, &priv->xstats, sizeof(*initial));
Is the LPI entry already counted here? AFAIU with tx-lpi-timer=0 on dwmac4 the
MAC goes directly into LPI after the frame, before stmmac_test_mac_loopback()
returns. The loop below would time out although LPI is working.
Snapshot before the first frame, and take a second snapshot right before
the second loopback for the exit check?
[...]
+ memcpy(final, &priv->xstats, sizeof(*final));
if (final->irq_tx_path_exit_lpi_mode_n <=
initial->irq_tx_path_exit_lpi_mode_n) {
ret = -EINVAL;
nit: -ETIMEDOUT here as well, to match the entry check?
Thanks
Nicolai