ixgbe(4): Filter out spurious link up indication

Extend SFP+ cage crosstalk fix by re-checking link state after 5ms delay
to filter out spurious link up indication by transceiver with no fiber
cable connected.

Signed-off-by: Krzysztof Galazka <krzysztof.galazka@intel.com>
Signed-off-by: Eric Joyner <erj@FreeBSD.org>

Reviewed by:	erj@
Tested by:	Gowtham Kumar Ks <gowtham.kumar.ks@intel.com>
MFC after:	3 days
Sponsored by:	Intel Corporation
Differential Revision:	https://reviews.freebsd.org/D38395
This commit is contained in:
Krzysztof Galazka 2023-02-15 14:35:40 -08:00 committed by Eric Joyner
parent 1d02c6b1b8
commit 04a5e6d7ca
No known key found for this signature in database
GPG key ID: 96F0C6FD61E05DE3

View file

@ -4232,10 +4232,25 @@ s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
}
} else {
if (links_reg & IXGBE_LINKS_UP)
if (links_reg & IXGBE_LINKS_UP) {
if (ixgbe_need_crosstalk_fix(hw)) {
/* Check the link state again after a delay
* to filter out spurious link up
* notifications.
*/
msec_delay(5);
links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
if (!(links_reg & IXGBE_LINKS_UP)) {
*link_up = false;
*speed = IXGBE_LINK_SPEED_UNKNOWN;
return IXGBE_SUCCESS;
}
}
*link_up = true;
else
} else {
*link_up = false;
}
}
switch (links_reg & IXGBE_LINKS_SPEED_82599) {