Module Name: src
Committed By: msaitoh
Date: Fri Oct 6 14:41:24 UTC 2023
Modified Files:
src/sys/dev/pci/ixgbe: ixgbe_common.c
Log Message:
ixg(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.
- From FreeBSD:
In-tree: 04a5e6d7cadd06b10169c3c3a560649e7dc7444c
Out of tree: ix-3.3.33.
To generate a diff of this commit:
cvs rdiff -u -r1.45 -r1.46 src/sys/dev/pci/ixgbe/ixgbe_common.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/ixgbe/ixgbe_common.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_common.c:1.45 src/sys/dev/pci/ixgbe/ixgbe_common.c:1.46
--- src/sys/dev/pci/ixgbe/ixgbe_common.c:1.45 Fri Oct 6 14:37:04 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_common.c Fri Oct 6 14:41:24 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_common.c,v 1.45 2023/10/06 14:37:04 msaitoh Exp $ */
+/* $NetBSD: ixgbe_common.c,v 1.46 2023/10/06 14:41:24 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -36,7 +36,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_common.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe_common.c,v 1.45 2023/10/06 14:37:04 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_common.c,v 1.46 2023/10/06 14:41:24 msaitoh Exp $");
#include "ixgbe_common.h"
#include "ixgbe_phy.h"
@@ -4296,10 +4296,25 @@ s32 ixgbe_check_mac_link_generic(struct
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) {