Thread (4 messages) flat view 4 messages, 2 authors, 6d ago

RE: [PATCH net 1/2] igb: Preserve RXPBS.CFG_TS_EN in igb_setup_tx_mode

From: Loktionov, Aleksandr <hidden>
Date: 2026-09-11 20:58:50
Also in: intel-wired-lan, lkml

quoted hunk ↗ jump to hunk
-----Original Message-----
From: Pascal Kneuper <redacted>
Sent: Thursday, September 10, 2026 1:39 PM
To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
Przemyslaw [off-list ref]; Andrew Lunn
[off-list ref]; David S . Miller [off-list ref]; Eric
Dumazet [off-list ref]; Jakub Kicinski [off-list ref]; Paolo
Abeni [off-list ref]
Cc: Baldin, Daniel <redacted>; intel-wired-
lan@lists.osuosl.org; netdev@vger.kernel.org; linux-
kernel@vger.kernel.org; Kneuper, Paskal [off-list ref]
Subject: [PATCH net 1/2] igb: Preserve RXPBS.CFG_TS_EN in
igb_setup_tx_mode

Commit 05f9d3e1ae6e ("igb: Add support for CBS offload") restores the
i210 Rx packet buffer size with an unmasked write to RXPBS. Bit 31 of
RXPBS is CFG_TS_EN, which enables per-packet Rx timestamping. Writing
the register unconditionally clears this bit on every igb_up() (link
down/up, MTU change, or driver reset).

Like other drivers (igc, i40e, ice), igb intends timestamping settings
to persist across link changes: igb_reset() calls igb_ptp_reset() to
re-apply tstamp_config and set CFG_TS_EN with queues stopped. igb_up()
then clears it immediately afterwards, undoing its own restore.

igb_ptp_hwtstamp_get() returns cached settings and never reads the
register, masking the fallback to software timestamps. On an i210, a
link flap increases PTP path delay from <1us to tens of microseconds.

Fix by masking the buffer size field, as the FQTSS branch already
does.

Fixes: 05f9d3e1ae6e ("igb: Add support for CBS offload")
Signed-off-by: Pascal Kneuper <redacted>
---
 drivers/net/ethernet/intel/igb/igb_main.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c
b/drivers/net/ethernet/intel/igb/igb_main.c
index d4a897a8c82c6..0f3c728a07fb1 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -1947,7 +1947,12 @@ static void igb_setup_tx_mode(struct
igb_adapter *adapter)
 			igb_config_tx_modes(adapter, i);
 		}
 	} else {
-		wr32(E1000_RXPBS, I210_RXPBSIZE_DEFAULT);
+		/* Preserve RXPBS.CFG_TS_EN so Rx timestamping settings
+		 * persist across link changes.
+		 */
+		val = rd32(E1000_RXPBS) & E1000_RXPBS_CFG_TS_EN;
+		wr32(E1000_RXPBS, val | I210_RXPBSIZE_DEFAULT);
+
 		wr32(E1000_TXPBS, I210_TXPBSIZE_DEFAULT);
 		wr32(E1000_I210_DTXMXPKTSZ, I210_DTXMXPKTSZ_DEFAULT);

--
2.47.3
Reviewed-by: Aleksandr Loktionov <redacted>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help