Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 07 Aug 2026 14:27:09 +0000
From:      Kevin Bowling <kbowling@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: d025b84268ec - main - ixgbe: Apply the 82599 D3 link workaround only for D3
Message-ID:  <6a75eb3d.44a15.5e2f06d9@gitrepo.freebsd.org>

index | next in thread | raw e-mail

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);
 


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a75eb3d.44a15.5e2f06d9>