git: d025b84268ec - main - ixgbe: Apply the 82599 D3 link workaround only for D3
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 07 Aug 2026 14:27:09 UTC
The branch main has been updated by kbowling:
URL: https://cgit.FreeBSD.org/src/commit/?id=d025b84268ec18d55c2d3088729cf4ad7673ecac
commit d025b84268ec18d55c2d3088729cf4ad7673ecac
Author: Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2026-08-05 14:33:32 +0000
Commit: Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2026-08-07 14:26:41 +0000
ixgbe: Apply the 82599 D3 link workaround only for D3
ixgbe_stop_mac_link_on_d3_82599() implements the workaround for
82599 erratum 33. It forces incompatible auto-negotiation settings
before the device enters D3, and reset clears them when returning to
D0.
ixgbe_if_stop() is also used for ordinary interface reconfiguration
and recovery. Those paths do not enter D3 and should not program
this power-management workaround. They continue to stop the adapter
and disable the transmit laser.
Move the call to ixgbe_setup_low_power_mode(), after
ixgbe_if_stop(). This preserves the required ordering for detach,
shutdown, and suspend while avoiding the D3 settings during ordinary
restarts.
MFC after: 2 weeks
---
sys/dev/ixgbe/if_ix.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c
index 96188ca7ef7f..5ab30a8054a9 100644
--- a/sys/dev/ixgbe/if_ix.c
+++ b/sys/dev/ixgbe/if_ix.c
@@ -3788,6 +3788,10 @@ ixgbe_setup_low_power_mode(if_ctx_t ctx)
ixgbe_if_stop(ctx);
}
+ /* Disable the 82599 link only when actually entering D3. */
+ if (hw->mac.type == ixgbe_mac_82599EB)
+ ixgbe_stop_mac_link_on_d3_82599(hw);
+
return error;
} /* ixgbe_setup_low_power_mode */
@@ -4758,8 +4762,6 @@ ixgbe_if_stop(if_ctx_t ctx)
ixgbe_reset_hw(hw);
hw->adapter_stopped = false;
ixgbe_stop_adapter(hw);
- if (hw->mac.type == ixgbe_mac_82599EB)
- ixgbe_stop_mac_link_on_d3_82599(hw);
/* Turn off the laser - noop with no optics */
ixgbe_disable_tx_laser(hw);