All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next v3 0/5] net: cadence: macb: add IEEE 802.3az EEE support
@ 2026-02-25  9:15 Nicolai Buchwitz
  2026-02-25  9:15 ` [PATCH 1/5] net: cadence: macb: add EEE register definitions and capability flag Nicolai Buchwitz
                   ` (5 more replies)
  0 siblings, 6 replies; 18+ messages in thread
From: Nicolai Buchwitz @ 2026-02-25  9:15 UTC (permalink / raw)
  To: netdev
  Cc: andrew+netdev, claudiu.beznea, davem, edumazet, kuba,
	nicolas.ferre, pabeni, linux, phil, Nicolai Buchwitz

Add Energy Efficient Ethernet (IEEE 802.3az) support to the Cadence GEM
(macb) driver using phylink's managed EEE framework. The GEM MAC has
hardware LPI registers but no built-in idle timer, so the driver
implements software-managed TX LPI using a delayed_work timer while
delegating EEE negotiation and ethtool state to phylink.

Changes from v2:
  - macb_tx_lpi_set() now returns bool indicating whether the register
    value actually changed, avoiding redundant writes.
  - Removed tx_lpi_enabled field from struct macb; LPI state is tracked
    entirely within the spinlock-protected register read/modify/write.
  - macb_tx_lpi_wake() uses the return value of macb_tx_lpi_set() to
    skip the cancel/udelay when TXLPIEN was already clear.
  All changes based on feedback from Russell King.

Changes from v1:
  - Rewrote to use phylink managed EEE (mac_enable_tx_lpi /
    mac_disable_tx_lpi callbacks) instead of the obsolete
    phy_init_eee() approach, as recommended by Russell King.
  - ethtool get_eee/set_eee are now pure phylink passthroughs.
  - Removed all manual EEE state tracking from mac_link_up/down;
    phylink handles the lifecycle.

The series is structured as follows:

  1. Register definitions: LPI counter offsets (0x270-0x27c), TXLPIEN
     bitfield (NCR bit 19), and MACB_CAPS_EEE capability flag.

  2. LPI statistics: Expose the four hardware EEE counters (RX/TX LPI
     transitions and time) through ethtool -S, accumulated in software
     since they are clear-on-read.

  3. TX LPI engine: phylink mac_enable_tx_lpi / mac_disable_tx_lpi
     callbacks with a delayed_work-based idle timer. LPI entry is
     deferred 1 second after link-up per IEEE 802.3az. Wake before
     transmit with a conservative 50us PHY wake delay.

  4. ethtool EEE ops: get_eee/set_eee delegating to phylink for PHY
     negotiation and timer management.

  5. RP1 enablement: Set MACB_CAPS_EEE for the Raspberry Pi 5's RP1
     southbridge (Cadence GEM_GXL rev 0x00070109 + BCM54213PE PHY).

Tested on Raspberry Pi 5 (1000BASE-T, BCM54213PE PHY, 250ms LPI timer):

  iperf3 throughput (no regression):
    TCP TX: 937.8 Mbit/s (EEE on) vs 937.0 Mbit/s (EEE off)
    TCP RX: 936.5 Mbit/s both

  Latency (ping RTT, small expected increase from LPI wake):
    1s interval:  0.273 ms (EEE on) vs 0.181 ms (EEE off)
    10ms interval: 0.206 ms (EEE on) vs 0.168 ms (EEE off)
    flood ping:   0.200 ms (EEE on) vs 0.156 ms (EEE off)

  LPI counters (ethtool -S, 1s-interval ping, EEE on):
    tx_lpi_transitions: 112
    tx_lpi_time: 15574651

  Zero packet loss across all tests. Also verified with
  ethtool --show-eee / --set-eee and cable unplug/replug cycling.

Nicolai Buchwitz (5):
  net: cadence: macb: add EEE register definitions and capability flag
  net: cadence: macb: add EEE LPI statistics counters
  net: cadence: macb: implement EEE TX LPI support
  net: cadence: macb: add ethtool EEE support
  net: cadence: macb: enable EEE for Raspberry Pi RP1

 drivers/net/ethernet/cadence/macb.h      |  20 ++++
 drivers/net/ethernet/cadence/macb_main.c | 136 ++++++++++++++++++++++-
 2 files changed, 155 insertions(+), 1 deletion(-)

-- 
2.51.0


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

end of thread, other threads:[~2026-02-27 14:39 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-25  9:15 [PATCH net-next v3 0/5] net: cadence: macb: add IEEE 802.3az EEE support Nicolai Buchwitz
2026-02-25  9:15 ` [PATCH 1/5] net: cadence: macb: add EEE register definitions and capability flag Nicolai Buchwitz
2026-02-25 17:26   ` Théo Lebrun
2026-02-26  1:49     ` Jakub Kicinski
2026-02-25  9:15 ` [PATCH 2/5] net: cadence: macb: add EEE LPI statistics counters Nicolai Buchwitz
2026-02-25  9:15 ` [PATCH 3/5] net: cadence: macb: implement EEE TX LPI support Nicolai Buchwitz
2026-02-25 17:32   ` Sai Krishna Gajula
2026-02-26  8:01     ` Nicolai Buchwitz
2026-02-25 17:42   ` Théo Lebrun
2026-02-25 17:50     ` Russell King (Oracle)
2026-02-26  9:52       ` Théo Lebrun
2026-02-26 10:49         ` Nicolai Buchwitz
2026-02-26 13:50           ` Théo Lebrun
2026-02-27  9:00             ` Nicolai Buchwitz
2026-02-27 14:39               ` Théo Lebrun
2026-02-25  9:15 ` [PATCH 4/5] net: cadence: macb: add ethtool EEE support Nicolai Buchwitz
2026-02-25  9:15 ` [PATCH 5/5] net: cadence: macb: enable EEE for Raspberry Pi RP1 Nicolai Buchwitz
2026-02-25 10:56 ` [PATCH net-next v3 0/5] net: cadence: macb: add IEEE 802.3az EEE support Nicolai Buchwitz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.