Module Name: src
Committed By: msaitoh
Date: Mon Aug 24 18:31:15 UTC 2020
Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c
Log Message:
Fix ixgbe_sfp_cage_full() on X550EM_A.
In ixgbe_handle_mod():
switch (hw->mac.type) {
case ixgbe_mac_82599EB:
cage_full = IXGBE_READ_REG(hw, IXGBE_ESDP) &
IXGBE_ESDP_SDP2;
break;
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
cage_full = IXGBE_READ_REG(hw, IXGBE_ESDP) &
IXGBE_ESDP_SDP0;
break;
default:
break;
}
so I had thought that IXGBE_ESDP_SDP0 bit is 1 on cage is full.
In reality, at least, X550EM_A's SFP+ cage is 0 on cage is full.
So invert the logic of ixgbe_sfp_cage_full() on X550EM_A
To generate a diff of this commit:
cvs rdiff -u -r1.241 -r1.242 src/sys/dev/pci/ixgbe/ixgbe.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.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.241 src/sys/dev/pci/ixgbe/ixgbe.c:1.242
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.241 Mon Aug 24 18:21:59 2020
+++ src/sys/dev/pci/ixgbe/ixgbe.c Mon Aug 24 18:31:14 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.241 2020/08/24 18:21:59 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.242 2020/08/24 18:31:14 msaitoh Exp $ */
/******************************************************************************
@@ -4624,13 +4624,20 @@ static bool
ixgbe_sfp_cage_full(struct ixgbe_hw *hw)
{
uint32_t mask;
+ int rv;
if (hw->mac.type >= ixgbe_mac_X540)
mask = IXGBE_ESDP_SDP0;
else
mask = IXGBE_ESDP_SDP2;
- return IXGBE_READ_REG(hw, IXGBE_ESDP) & mask;
+ rv = IXGBE_READ_REG(hw, IXGBE_ESDP) & mask;
+ if (hw->mac.type == ixgbe_mac_X550EM_a) {
+ /* It seems X550EM_a's SDP0 is inverted than others... */
+ return (rv == 0);
+ }
+
+ return rv;
} /* ixgbe_sfp_cage_full */
/************************************************************************
@@ -4653,6 +4660,10 @@ ixgbe_handle_mod(void *context)
break;
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
+ /*
+ * XXX See ixgbe_sfp_cage_full(). It seems the bit is
+ * inverted on X550EM_a, so I think this is incorrect.
+ */
cage_full = IXGBE_READ_REG(hw, IXGBE_ESDP) &
IXGBE_ESDP_SDP0;
break;