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

From: Loktionov, Aleksandr

Date: Fri Sep 11 2026 - 16:59:09 EST




> -----Original Message-----
> From: Pascal Kneuper <PKneuper@xxxxxxxxx>
> Sent: Thursday, September 10, 2026 1:39 PM
> To: Nguyen, Anthony L <anthony.l.nguyen@xxxxxxxxx>; Kitszel,
> Przemyslaw <przemyslaw.kitszel@xxxxxxxxx>; Andrew Lunn
> <andrew+netdev@xxxxxxx>; David S . Miller <davem@xxxxxxxxxxxxx>; Eric
> Dumazet <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo
> Abeni <pabeni@xxxxxxxxxx>
> Cc: Baldin, Daniel <dbaldin@xxxxxxxxx>; intel-wired-
> lan@xxxxxxxxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; Kneuper, Paskal <pkneuper@xxxxxxxxx>
> 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 <PKneuper@xxxxxxxxx>
> ---
> 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 <aleksandr.loktionov@xxxxxxxxx>