Module Name: src
Committed By: martin
Date: Wed Oct 18 14:23:15 UTC 2023
Modified Files:
src/sys/dev/pci/ixgbe [netbsd-8]: ix_txrx.c ixgbe.c ixgbe.h
ixgbe_82599.c ixgbe_api.c ixgbe_bypass.h ixgbe_common.c
ixgbe_common.h ixgbe_dcb.c ixgbe_dcb_82598.c ixgbe_type.h
ixgbe_x540.c ixgbe_x550.c ixv.c
Log Message:
Pull up the following, requested by msaitoh in ticket #1914:
sys/dev/pci/ixgbe/ix_txrx.c 1.103-1.104
sys/dev/pci/ixgbe/ixgbe.c 1.334-1.338,
1.341-1.344 via patch
sys/dev/pci/ixgbe/ixgbe.h 1.90-1.93
sys/dev/pci/ixgbe/ixgbe_82599.c 1.31-1.32
sys/dev/pci/ixgbe/ixgbe_api.c 1.29
sys/dev/pci/ixgbe/ixgbe_bypass.h 1.5
sys/dev/pci/ixgbe/ixgbe_common.c 1.46-1.47
sys/dev/pci/ixgbe/ixgbe_common.h 1.18
sys/dev/pci/ixgbe/ixgbe_dcb.c 1.14-1.15
sys/dev/pci/ixgbe/ixgbe_dcb_82598.c 1.13
sys/dev/pci/ixgbe/ixgbe_type.h 1.59-1.61
sys/dev/pci/ixgbe/ixgbe_x540.c 1.24
sys/dev/pci/ixgbe/ixgbe_x550.c 1.28
sys/dev/pci/ixgbe/ixv.c 1.187-1.192 via patch
- ixg(4): Add 82599 LS support once again.
- ixg(4): Filter out spurious link up indication more.
- ixg(4): Print DEVICE_CAPS register.
- ixg(4): Fix a bug that the number of queues is unintentionally
limited to a small number or wrong error message may be printed
when two devices' number of MSI-X vectors are different.
- Modify error message of wrong TX/RX descriptor size.
- Enable interrupt after setting IFF_RUNNING.
- Fix a bug that changing hw.ix[gv]X.qY.interrupt_rate would change
all devices all queues default interrupt rate.
- Cleanup the code.
To generate a diff of this commit:
cvs rdiff -u -r1.24.2.29 -r1.24.2.30 src/sys/dev/pci/ixgbe/ix_txrx.c
cvs rdiff -u -r1.88.2.57 -r1.88.2.58 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.24.6.28 -r1.24.6.29 src/sys/dev/pci/ixgbe/ixgbe.h
cvs rdiff -u -r1.14.8.10 -r1.14.8.11 src/sys/dev/pci/ixgbe/ixgbe_82599.c
cvs rdiff -u -r1.15.8.9 -r1.15.8.10 src/sys/dev/pci/ixgbe/ixgbe_api.c
cvs rdiff -u -r1.1.4.5 -r1.1.4.6 src/sys/dev/pci/ixgbe/ixgbe_bypass.h
cvs rdiff -u -r1.13.2.15 -r1.13.2.16 src/sys/dev/pci/ixgbe/ixgbe_common.c
cvs rdiff -u -r1.7.8.7 -r1.7.8.8 src/sys/dev/pci/ixgbe/ixgbe_common.h
cvs rdiff -u -r1.4.8.4 -r1.4.8.5 src/sys/dev/pci/ixgbe/ixgbe_dcb.c
cvs rdiff -u -r1.3.8.4 -r1.3.8.5 src/sys/dev/pci/ixgbe/ixgbe_dcb_82598.c
cvs rdiff -u -r1.22.2.20 -r1.22.2.21 src/sys/dev/pci/ixgbe/ixgbe_type.h
cvs rdiff -u -r1.9.6.8 -r1.9.6.9 src/sys/dev/pci/ixgbe/ixgbe_x540.c
cvs rdiff -u -r1.5.6.13 -r1.5.6.14 src/sys/dev/pci/ixgbe/ixgbe_x550.c
cvs rdiff -u -r1.56.2.42 -r1.56.2.43 src/sys/dev/pci/ixgbe/ixv.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/ix_txrx.c
diff -u src/sys/dev/pci/ixgbe/ix_txrx.c:1.24.2.29 src/sys/dev/pci/ixgbe/ix_txrx.c:1.24.2.30
--- src/sys/dev/pci/ixgbe/ix_txrx.c:1.24.2.29 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ix_txrx.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ix_txrx.c,v 1.24.2.29 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ix_txrx.c,v 1.24.2.30 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ix_txrx.c,v 1.24.2.29 2023/10/13 18:32:38 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ix_txrx.c,v 1.24.2.30 2023/10/18 14:23:15 martin Exp $");
#include "opt_inet.h"
#include "opt_inet6.h"
@@ -846,7 +846,6 @@ ixgbe_tx_ctx_setup(struct tx_ring *txr,
u8 ipproto = 0;
char *l3d;
-
/* First check if TSO is to be used */
if (mp->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) {
int rv = ixgbe_tso_setup(txr, mp, cmd_type_len, olinfo_status);
@@ -1282,9 +1281,9 @@ ixgbe_rsc_count(union ixgbe_adv_rx_desc
static void
ixgbe_setup_hw_rsc(struct rx_ring *rxr)
{
- struct ixgbe_softc *sc = rxr->sc;
- struct ixgbe_hw *hw = &sc->hw;
- u32 rscctrl, rdrxctl;
+ struct ixgbe_softc *sc = rxr->sc;
+ struct ixgbe_hw *hw = &sc->hw;
+ u32 rscctrl, rdrxctl;
/* If turning LRO/RSC off we need to disable it */
if ((sc->ifp->if_capenable & IFCAP_LRO) == 0) {
@@ -1746,9 +1745,9 @@ ixgbe_rx_input(struct rx_ring *rxr, stru
(CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) {
/*
* Send to the stack if:
- ** - LRO not enabled, or
- ** - no LRO resources, or
- ** - lro enqueue fails
+ * - LRO not enabled, or
+ * - no LRO resources, or
+ * - lro enqueue fails
*/
if (rxr->lro.lro_cnt != 0)
if (tcp_lro_rx(&rxr->lro, m, 0) == 0)
Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.57 src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.58
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.57 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixgbe.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.88.2.57 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixgbe.c,v 1.88.2.58 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe.c,v 1.88.2.57 2023/10/13 18:32:38 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe.c,v 1.88.2.58 2023/10/18 14:23:15 martin Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -117,6 +117,7 @@ static const ixgbe_vendor_info_t ixgbe_v
{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_XAUI_LOM, 0, 0, 0},
{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_CX4, 0, 0, 0},
{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_T3_LOM, 0, 0, 0},
+ {IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_LS, 0, 0, 0},
{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_COMBO_BACKPLANE, 0, 0, 0},
{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_BACKPLANE_FCOE, 0, 0, 0},
{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP_SF2, 0, 0, 0},
@@ -366,12 +367,12 @@ SYSCTL_INT(_hw_ix, OID_AUTO, num_queues,
* setting higher than RX as this seems
* the better performing choice.
*/
-static int ixgbe_txd = PERFORM_TXD;
+static int ixgbe_txd = DEFAULT_TXD;
SYSCTL_INT(_hw_ix, OID_AUTO, txd, CTLFLAG_RDTUN, &ixgbe_txd, 0,
"Number of transmit descriptors per queue");
/* Number of RX descriptors per ring */
-static int ixgbe_rxd = PERFORM_RXD;
+static int ixgbe_rxd = DEFAULT_RXD;
SYSCTL_INT(_hw_ix, OID_AUTO, rxd, CTLFLAG_RDTUN, &ixgbe_rxd, 0,
"Number of receive descriptors per queue");
@@ -758,8 +759,6 @@ ixgbe_initialize_transmit_units(struct i
rttdcs &= ~IXGBE_RTTDCS_ARBDIS;
IXGBE_WRITE_REG(hw, IXGBE_RTTDCS, rttdcs);
}
-
- return;
} /* ixgbe_initialize_transmit_units */
/************************************************************************
@@ -778,7 +777,7 @@ ixgbe_attach(device_t parent, device_t d
struct ixgbe_hw *hw;
int error = -1;
u32 ctrl_ext;
- u16 high, low, nvmreg;
+ u16 high, low, nvmreg, dev_caps;
pcireg_t id, subid;
const ixgbe_vendor_info_t *ent;
struct pci_attach_args *pa = aux;
@@ -922,14 +921,26 @@ ixgbe_attach(device_t parent, device_t d
/* Do descriptor calc and sanity checks */
if (((ixgbe_txd * sizeof(union ixgbe_adv_tx_desc)) % DBA_ALIGN) != 0 ||
ixgbe_txd < MIN_TXD || ixgbe_txd > MAX_TXD) {
- aprint_error_dev(dev, "TXD config issue, using default!\n");
+ aprint_error_dev(dev, "Invalid TX ring size (%d). "
+ "It must be between %d and %d, "
+ "inclusive, and must be a multiple of %zu. "
+ "Using default value of %d instead.\n",
+ ixgbe_txd, MIN_TXD, MAX_TXD,
+ DBA_ALIGN / sizeof(union ixgbe_adv_tx_desc),
+ DEFAULT_TXD);
sc->num_tx_desc = DEFAULT_TXD;
} else
sc->num_tx_desc = ixgbe_txd;
if (((ixgbe_rxd * sizeof(union ixgbe_adv_rx_desc)) % DBA_ALIGN) != 0 ||
ixgbe_rxd < MIN_RXD || ixgbe_rxd > MAX_RXD) {
- aprint_error_dev(dev, "RXD config issue, using default!\n");
+ aprint_error_dev(dev, "Invalid RX ring size (%d). "
+ "It must be between %d and %d, "
+ "inclusive, and must be a multiple of %zu. "
+ "Using default value of %d instead.\n",
+ ixgbe_rxd, MIN_RXD, MAX_RXD,
+ DBA_ALIGN / sizeof(union ixgbe_adv_rx_desc),
+ DEFAULT_RXD);
sc->num_rx_desc = DEFAULT_RXD;
} else
sc->num_rx_desc = ixgbe_rxd;
@@ -1238,10 +1249,15 @@ ixgbe_attach(device_t parent, device_t d
if (sc->feat_en & IXGBE_FEATURE_NETMAP)
ixgbe_netmap_attach(sc);
+ /* Print some flags */
snprintb(buf, sizeof(buf), IXGBE_FEATURE_FLAGS, sc->feat_cap);
aprint_verbose_dev(dev, "feature cap %s\n", buf);
snprintb(buf, sizeof(buf), IXGBE_FEATURE_FLAGS, sc->feat_en);
aprint_verbose_dev(dev, "feature ena %s\n", buf);
+ if (ixgbe_get_device_caps(hw, &dev_caps) == 0) {
+ snprintb(buf, sizeof(buf), IXGBE_DEVICE_CAPS_FLAGS, dev_caps);
+ aprint_verbose_dev(dev, "device cap %s\n", buf);
+ }
if (pmf_device_register(dev, ixgbe_suspend, ixgbe_resume))
pmf_class_network_register(dev, sc->ifp);
@@ -3281,9 +3297,9 @@ ixgbe_sysctl_interrupt_rate_handler(SYSC
&& (reg < IXGBE_MIN_RSC_EITR_10G1G))
return EINVAL;
}
- ixgbe_max_interrupt_rate = rate;
+ sc->max_interrupt_rate = rate;
} else
- ixgbe_max_interrupt_rate = 0;
+ sc->max_interrupt_rate = 0;
ixgbe_eitr_write(sc, que->msix, reg);
return (0);
@@ -3388,6 +3404,7 @@ ixgbe_add_device_sysctls(struct ixgbe_so
aprint_error_dev(dev, "could not create sysctl\n");
sc->enable_aim = ixgbe_enable_aim;
+ sc->max_interrupt_rate = ixgbe_max_interrupt_rate;
if (sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_READWRITE,
CTLTYPE_BOOL, "enable_aim", SYSCTL_DESCR("Interrupt Moderation"),
NULL, 0, &sc->enable_aim, 0, CTL_CREATE, CTL_EOL) != 0)
@@ -4199,9 +4216,6 @@ ixgbe_init_locked(struct ixgbe_softc *sc
/* Setup DMA Coalescing */
ixgbe_config_dmac(sc);
- /* And now turn on interrupts */
- ixgbe_enable_intr(sc);
-
/* Enable the use of the MBX by the VF's */
if (sc->feat_en & IXGBE_FEATURE_SRIOV) {
ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
@@ -4212,9 +4226,12 @@ ixgbe_init_locked(struct ixgbe_softc *sc
/* Update saved flags. See ixgbe_ifflags_cb() */
sc->if_flags = ifp->if_flags;
- /* Now inform the stack we're ready */
+ /* Inform the stack we're ready */
ifp->if_flags |= IFF_RUNNING;
+ /* And now turn on interrupts */
+ ixgbe_enable_intr(sc);
+
return;
} /* ixgbe_init_locked */
@@ -4295,8 +4312,8 @@ ixgbe_configure_ivars(struct ixgbe_softc
struct ix_queue *que = sc->queues;
u32 newitr;
- if (ixgbe_max_interrupt_rate > 0)
- newitr = (4000000 / ixgbe_max_interrupt_rate) & 0x0FF8;
+ if (sc->max_interrupt_rate > 0)
+ newitr = (4000000 / sc->max_interrupt_rate) & 0x0FF8;
else {
/*
* Disable DMA coalescing if interrupt moderation is
@@ -4881,7 +4898,7 @@ ixgbe_update_link_status(struct ixgbe_so
for (int i = 0; i < sc->num_queues; i++, que++)
que->eitr_setting = 0;
- if (sc->link_speed == IXGBE_LINK_SPEED_10GB_FULL){
+ if (sc->link_speed == IXGBE_LINK_SPEED_10GB_FULL) {
/*
* Discard count for both MAC Local Fault and
* Remote Fault because those registers are
@@ -5109,7 +5126,7 @@ ixgbe_legacy_irq(void *arg)
struct ixgbe_softc *sc = que->sc;
struct ixgbe_hw *hw = &sc->hw;
struct ifnet *ifp = sc->ifp;
- struct tx_ring *txr = sc->tx_rings;
+ struct tx_ring *txr = sc->tx_rings;
u32 eicr;
u32 eims_orig;
u32 eims_enable = 0;
@@ -6656,8 +6673,8 @@ static int
ixgbe_allocate_msix(struct ixgbe_softc *sc, const struct pci_attach_args *pa)
{
device_t dev = sc->dev;
- struct ix_queue *que = sc->queues;
- struct tx_ring *txr = sc->tx_rings;
+ struct ix_queue *que = sc->queues;
+ struct tx_ring *txr = sc->tx_rings;
pci_chipset_tag_t pc;
char intrbuf[PCI_INTRSTR_LEN];
char intr_xname[32];
@@ -6922,9 +6939,6 @@ ixgbe_configure_interrupts(struct ixgbe_
queues = min(queues,
min(mac->max_tx_queues, mac->max_rx_queues));
- /* reflect correct sysctl value */
- ixgbe_num_queues = queues;
-
/*
* Want one vector (RX/TX pair) per queue
* plus an additional for Link.
Index: src/sys/dev/pci/ixgbe/ixgbe.h
diff -u src/sys/dev/pci/ixgbe/ixgbe.h:1.24.6.28 src/sys/dev/pci/ixgbe/ixgbe.h:1.24.6.29
--- src/sys/dev/pci/ixgbe/ixgbe.h:1.24.6.28 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixgbe.h Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.24.6.28 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixgbe.h,v 1.24.6.29 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -119,19 +119,18 @@
/* Tunables */
/*
- * TxDescriptors Valid Range: 64-4096 Default Value: 256 This value is the
+ * TxDescriptors Valid Range: 64-4096 Default Value: 2048 This value is the
* number of transmit descriptors allocated by the driver. Increasing this
* value allows the driver to queue more transmits. Each descriptor is 16
* bytes. Performance tests have show the 2K value to be optimal for top
* performance.
*/
-#define DEFAULT_TXD 1024
-#define PERFORM_TXD 2048
+#define DEFAULT_TXD 2048
#define MAX_TXD 4096
#define MIN_TXD 64
/*
- * RxDescriptors Valid Range: 64-4096 Default Value: 256 This value is the
+ * RxDescriptors Valid Range: 64-4096 Default Value: 2048 This value is the
* number of receive descriptors allocated for each RX queue. Increasing this
* value allows the driver to buffer more incoming packets. Each descriptor
* is 16 bytes. A receive buffer is also allocated for each descriptor.
@@ -140,8 +139,7 @@
* against the system mbuf pool limit, you can tune nmbclusters
* to adjust for this.
*/
-#define DEFAULT_RXD 1024
-#define PERFORM_RXD 2048
+#define DEFAULT_RXD 2048
#define MAX_RXD 4096
#define MIN_RXD 64
@@ -202,11 +200,6 @@
#define IXGBE_82599_SCATTER_MAX (40 - IXGBE_TX_WTHRESH - 2)
#define IXGBE_SCATTER_DEFAULT 33
-/* Keep older OS drivers building... */
-#if !defined(SYSCTL_ADD_UQUAD)
-#define SYSCTL_ADD_UQUAD SYSCTL_ADD_QUAD
-#endif
-
/* Defines for printing debug information */
#define DEBUG_INIT 0
#define DEBUG_IOCTL 0
@@ -501,6 +494,7 @@ struct ixgbe_softc {
/* Info about the interface */
int advertise; /* link speeds */
bool enable_aim; /* adaptive interrupt moderation */
+ int max_interrupt_rate;
int link_active; /* Use LINK_STATE_* value */
u16 max_frame_size;
u16 num_segs;
@@ -680,19 +674,6 @@ struct ixgbe_softc {
"\t2 - tx pause\n" \
"\t3 - tx and rx pause"
-/* Workaround to make 8.0 buildable */
-#if __FreeBSD_version >= 800000 && __FreeBSD_version < 800504
-static __inline int
-drbr_needs_enqueue(struct ifnet *ifp, struct buf_ring *br)
-{
-#ifdef ALTQ
- if (ALTQ_IS_ENABLED(&ifp->if_snd))
- return (1);
-#endif
- return (!buf_ring_empty(br));
-}
-#endif
-
/*
* Find the number of unrefreshed RX descriptors
*/
Index: src/sys/dev/pci/ixgbe/ixgbe_82599.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_82599.c:1.14.8.10 src/sys/dev/pci/ixgbe/ixgbe_82599.c:1.14.8.11
--- src/sys/dev/pci/ixgbe/ixgbe_82599.c:1.14.8.10 Sun Oct 8 15:19:31 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_82599.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_82599.c,v 1.14.8.10 2023/10/08 15:19:31 martin Exp $ */
+/* $NetBSD: ixgbe_82599.c,v 1.14.8.11 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -36,7 +36,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_82599.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe_82599.c,v 1.14.8.10 2023/10/08 15:19:31 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_82599.c,v 1.14.8.11 2023/10/18 14:23:15 martin Exp $");
#include "ixgbe_type.h"
#include "ixgbe_82599.h"
@@ -571,6 +571,9 @@ enum ixgbe_media_type ixgbe_get_media_ty
case IXGBE_DEV_ID_82599_T3_LOM:
media_type = ixgbe_media_type_copper;
break;
+ case IXGBE_DEV_ID_82599_LS:
+ media_type = ixgbe_media_type_fiber_lco;
+ break;
case IXGBE_DEV_ID_82599_QSFP_SF_QP:
media_type = ixgbe_media_type_fiber_qsfp;
break;
@@ -628,7 +631,6 @@ s32 ixgbe_start_mac_link_82599(struct ix
DEBUGFUNC("ixgbe_start_mac_link_82599");
-
/* reset_pipeline requires us to hold this lock as it writes to
* AUTOC.
*/
Index: src/sys/dev/pci/ixgbe/ixgbe_api.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_api.c:1.15.8.9 src/sys/dev/pci/ixgbe/ixgbe_api.c:1.15.8.10
--- src/sys/dev/pci/ixgbe/ixgbe_api.c:1.15.8.9 Mon Jan 23 14:07:24 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_api.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_api.c,v 1.15.8.9 2023/01/23 14:07:24 martin Exp $ */
+/* $NetBSD: ixgbe_api.c,v 1.15.8.10 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -36,7 +36,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_api.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe_api.c,v 1.15.8.9 2023/01/23 14:07:24 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_api.c,v 1.15.8.10 2023/10/18 14:23:15 martin Exp $");
#include "ixgbe_api.h"
#include "ixgbe_common.h"
@@ -879,7 +879,7 @@ s32 ixgbe_validate_eeprom_checksum(struc
}
/**
- * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
+ * ixgbe_update_eeprom_checksum - Updates the EEPROM checksum
* @hw: pointer to hardware structure
**/
s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
@@ -1163,8 +1163,6 @@ s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw
IXGBE_NOT_IMPLEMENTED);
}
-
-
/**
* ixgbe_dmac_config - Configure DMA Coalescing registers.
* @hw: pointer to hardware structure
Index: src/sys/dev/pci/ixgbe/ixgbe_bypass.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_bypass.h:1.1.4.5 src/sys/dev/pci/ixgbe/ixgbe_bypass.h:1.1.4.6
--- src/sys/dev/pci/ixgbe/ixgbe_bypass.h:1.1.4.5 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_bypass.h Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_bypass.h,v 1.1.4.5 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixgbe_bypass.h,v 1.1.4.6 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
Copyright (c) 2001-2020, Intel Corporation
@@ -36,7 +36,6 @@
#ifndef _IXGBE_BYPASS_H_
#define _IXGBE_BYPASS_H_
-
/*
* The bypass driver needs to set FW to a epoc of the number of
* seconds we are into this year. This macro's help support that.
Index: src/sys/dev/pci/ixgbe/ixgbe_common.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_common.c:1.13.2.15 src/sys/dev/pci/ixgbe/ixgbe_common.c:1.13.2.16
--- src/sys/dev/pci/ixgbe/ixgbe_common.c:1.13.2.15 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_common.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_common.c,v 1.13.2.15 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixgbe_common.c,v 1.13.2.16 2023/10/18 14:23:15 martin 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.13.2.15 2023/10/13 18:32:38 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_common.c,v 1.13.2.16 2023/10/18 14:23:15 martin Exp $");
#include "ixgbe_common.h"
#include "ixgbe_phy.h"
@@ -1904,7 +1904,6 @@ static s32 ixgbe_get_eeprom_semaphore(st
DEBUGFUNC("ixgbe_get_eeprom_semaphore");
-
/* Get SMBI software semaphore between device drivers first */
for (i = 0; i < timeout; i++) {
/*
@@ -3389,7 +3388,6 @@ s32 ixgbe_disable_sec_rx_path_generic(st
DEBUGFUNC("ixgbe_disable_sec_rx_path_generic");
-
secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
secrxreg |= IXGBE_SECRXCTRL_RX_DIS;
IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg);
@@ -4313,10 +4311,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) {
Index: src/sys/dev/pci/ixgbe/ixgbe_common.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_common.h:1.7.8.7 src/sys/dev/pci/ixgbe/ixgbe_common.h:1.7.8.8
--- src/sys/dev/pci/ixgbe/ixgbe_common.h:1.7.8.7 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_common.h Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_common.h,v 1.7.8.7 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixgbe_common.h,v 1.7.8.8 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -45,12 +45,10 @@
IXGBE_WRITE_REG(hw, reg + 4, (u32) (value >> 32)); \
} while (0)
#define IXGBE_REMOVED(a) (0)
-#if !defined(NO_READ_PBA_RAW) || !defined(NO_WRITE_PBA_RAW)
struct ixgbe_pba {
u16 word[2];
u16 *pba_block;
};
-#endif
void ixgbe_dcb_get_rtrup2tc_generic(struct ixgbe_hw *hw, u8 *map);
Index: src/sys/dev/pci/ixgbe/ixgbe_dcb.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_dcb.c:1.4.8.4 src/sys/dev/pci/ixgbe/ixgbe_dcb.c:1.4.8.5
--- src/sys/dev/pci/ixgbe/ixgbe_dcb.c:1.4.8.4 Sun Jan 30 16:06:35 2022
+++ src/sys/dev/pci/ixgbe/ixgbe_dcb.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_dcb.c,v 1.4.8.4 2022/01/30 16:06:35 martin Exp $ */
+/* $NetBSD: ixgbe_dcb.c,v 1.4.8.5 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -35,7 +35,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_dcb.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe_dcb.c,v 1.4.8.4 2022/01/30 16:06:35 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_dcb.c,v 1.4.8.5 2023/10/18 14:23:15 martin Exp $");
#include "ixgbe_type.h"
#include "ixgbe_dcb.h"
@@ -297,7 +297,7 @@ void ixgbe_dcb_unpack_map_cee(struct ixg
}
/**
- * ixgbe_dcb_config - Struct containing DCB settings.
+ * ixgbe_dcb_check_config_cee - Struct containing DCB settings.
* @dcb_config: Pointer to DCB config structure
*
* This function checks DCB rules for DCB settings.
@@ -412,10 +412,8 @@ s32 ixgbe_dcb_get_tc_stats(struct ixgbe_
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_get_tc_stats_82599(hw, stats, tc_count);
break;
-#endif
default:
break;
}
@@ -443,10 +441,8 @@ s32 ixgbe_dcb_get_pfc_stats(struct ixgbe
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_get_pfc_stats_82599(hw, stats, tc_count);
break;
-#endif
default:
break;
}
@@ -485,11 +481,9 @@ s32 ixgbe_dcb_config_rx_arbiter_cee(stru
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_config_rx_arbiter_82599(hw, refill, max, bwgid,
tsa, map);
break;
-#endif
default:
break;
}
@@ -527,11 +521,9 @@ s32 ixgbe_dcb_config_tx_desc_arbiter_cee
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_config_tx_desc_arbiter_82599(hw, refill, max,
bwgid, tsa);
break;
-#endif
default:
break;
}
@@ -571,12 +563,10 @@ s32 ixgbe_dcb_config_tx_data_arbiter_cee
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_config_tx_data_arbiter_82599(hw, refill, max,
bwgid, tsa,
map);
break;
-#endif
default:
break;
}
@@ -609,10 +599,8 @@ s32 ixgbe_dcb_config_pfc_cee(struct ixgb
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_config_pfc_82599(hw, pfc_en, map);
break;
-#endif
default:
break;
}
@@ -638,10 +626,8 @@ s32 ixgbe_dcb_config_tc_stats(struct ixg
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_config_tc_stats_82599(hw, NULL);
break;
-#endif
default:
break;
}
@@ -686,7 +672,6 @@ s32 ixgbe_dcb_hw_config_cee(struct ixgbe
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ixgbe_dcb_config_82599(hw, dcb_config);
ret = ixgbe_dcb_hw_config_82599(hw, dcb_config->link_speed,
refill, max, bwgid,
@@ -694,7 +679,6 @@ s32 ixgbe_dcb_hw_config_cee(struct ixgbe
ixgbe_dcb_config_tc_stats_82599(hw, dcb_config);
break;
-#endif
default:
break;
}
@@ -721,10 +705,8 @@ s32 ixgbe_dcb_config_pfc(struct ixgbe_hw
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ret = ixgbe_dcb_config_pfc_82599(hw, pfc_en, map);
break;
-#endif
default:
break;
}
@@ -747,7 +729,6 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw
case ixgbe_mac_X550:
case ixgbe_mac_X550EM_x:
case ixgbe_mac_X550EM_a:
-#if !defined(NO_82599_SUPPORT) || !defined(NO_X540_SUPPORT)
ixgbe_dcb_config_rx_arbiter_82599(hw, refill, max, bwg_id,
tsa, map);
ixgbe_dcb_config_tx_desc_arbiter_82599(hw, refill, max, bwg_id,
@@ -755,7 +736,6 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw
ixgbe_dcb_config_tx_data_arbiter_82599(hw, refill, max, bwg_id,
tsa, map);
break;
-#endif
default:
break;
}
Index: src/sys/dev/pci/ixgbe/ixgbe_dcb_82598.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_dcb_82598.c:1.3.8.4 src/sys/dev/pci/ixgbe/ixgbe_dcb_82598.c:1.3.8.5
--- src/sys/dev/pci/ixgbe/ixgbe_dcb_82598.c:1.3.8.4 Sun Jan 30 16:06:35 2022
+++ src/sys/dev/pci/ixgbe/ixgbe_dcb_82598.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_dcb_82598.c,v 1.3.8.4 2022/01/30 16:06:35 martin Exp $ */
+/* $NetBSD: ixgbe_dcb_82598.c,v 1.3.8.5 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -35,7 +35,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_dcb_82598.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe_dcb_82598.c,v 1.3.8.4 2022/01/30 16:06:35 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_dcb_82598.c,v 1.3.8.5 2023/10/18 14:23:15 martin Exp $");
#include "ixgbe_type.h"
#include "ixgbe_dcb.h"
@@ -364,6 +364,5 @@ s32 ixgbe_dcb_hw_config_82598(struct ixg
tsa);
ixgbe_dcb_config_tc_stats_82598(hw);
-
return IXGBE_SUCCESS;
}
Index: src/sys/dev/pci/ixgbe/ixgbe_type.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22.2.20 src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22.2.21
--- src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22.2.20 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_type.h Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_type.h,v 1.22.2.20 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixgbe_type.h,v 1.22.2.21 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -108,6 +108,7 @@
#define IXGBE_DEV_ID_82599_KR 0x1517
#define IXGBE_DEV_ID_82599_COMBO_BACKPLANE PCI_PRODUCT_INTEL_82599_COMBO_BACKPLANE
#define IXGBE_SUBDEV_ID_82599_KX4_KR_MEZZ 0x000C
+#define IXGBE_DEV_ID_82599_LS 0x154F
#define IXGBE_DEV_ID_82599_CX4 PCI_PRODUCT_INTEL_82599_CX4
#define IXGBE_DEV_ID_82599_SFP PCI_PRODUCT_INTEL_82599_SFP
#define IXGBE_SUBDEV_ID_82599_SFP_WOL0 0x1071
@@ -2552,6 +2553,10 @@ enum {
#define IXGBE_DEVICE_CAPS_WOL_PORT0 0x8 /* WoL supported on port 0 */
#define IXGBE_DEVICE_CAPS_WOL_MASK 0xC /* Mask for WoL capabilities */
+#define IXGBE_DEVICE_CAPS_FLAGS "\20" \
+ "\1ALLOW_ANY_SFP" "\2FCOE_OFFLOAD" "\3WOL_PORT0_1" "\4WOL_PORT0" \
+ "\10NO_CROSSTALK_WR"
+
/* PCI Bus Info */
#define IXGBE_PCI_DEVICE_STATUS 0xAA
#define IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING 0x0020
@@ -3628,8 +3633,8 @@ union ixgbe_atr_input {
* bkt_hash - 2 bytes
*/
struct {
- u8 vm_pool;
- u8 flow_type;
+ u8 vm_pool;
+ u8 flow_type;
__be16 vlan_id;
__be32 dst_ip[4];
__be32 src_ip[4];
@@ -3660,7 +3665,6 @@ union ixgbe_atr_hash_dword {
__be32 dword;
};
-
#define IXGBE_MVALS_INIT(m) \
IXGBE_CAT(EEC, m), \
IXGBE_CAT(FLA, m), \
@@ -3796,6 +3800,7 @@ enum ixgbe_media_type {
ixgbe_media_type_fiber,
ixgbe_media_type_fiber_fixed,
ixgbe_media_type_fiber_qsfp,
+ ixgbe_media_type_fiber_lco,
ixgbe_media_type_copper,
ixgbe_media_type_backplane,
ixgbe_media_type_cx4,
@@ -4165,11 +4170,11 @@ struct ixgbe_link_info {
};
struct ixgbe_eeprom_info {
- struct ixgbe_eeprom_operations ops;
- enum ixgbe_eeprom_type type;
- u32 semaphore_delay;
- u16 word_size;
- u16 address_bits;
+ struct ixgbe_eeprom_operations ops;
+ enum ixgbe_eeprom_type type;
+ u32 semaphore_delay;
+ u16 word_size;
+ u16 address_bits;
u16 word_page_size;
u16 ctrl_word_3;
u8 nvm_image_ver_high;
@@ -4178,34 +4183,34 @@ struct ixgbe_eeprom_info {
#define IXGBE_FLAGS_DOUBLE_RESET_REQUIRED 0x01
struct ixgbe_mac_info {
- struct ixgbe_mac_operations ops;
- enum ixgbe_mac_type type;
- u8 addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
- u8 perm_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
- u8 san_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
+ struct ixgbe_mac_operations ops;
+ enum ixgbe_mac_type type;
+ u8 addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
+ u8 perm_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
+ u8 san_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
/* prefix for World Wide Node Name (WWNN) */
- u16 wwnn_prefix;
+ u16 wwnn_prefix;
/* prefix for World Wide Port Name (WWPN) */
- u16 wwpn_prefix;
+ u16 wwpn_prefix;
#define IXGBE_MAX_MTA 128
- u32 mta_shadow[IXGBE_MAX_MTA];
- s32 mc_filter_type;
- u32 mcft_size;
- u32 vft_size;
- u32 num_rar_entries;
- u32 rar_highwater;
- u32 rx_pb_size;
- u32 max_tx_queues;
- u32 max_rx_queues;
- u32 orig_autoc;
+ u32 mta_shadow[IXGBE_MAX_MTA];
+ s32 mc_filter_type;
+ u32 mcft_size;
+ u32 vft_size;
+ u32 num_rar_entries;
+ u32 rar_highwater;
+ u32 rx_pb_size;
+ u32 max_tx_queues;
+ u32 max_rx_queues;
+ u32 orig_autoc;
u8 san_mac_rar_index;
bool get_link_status;
- u32 orig_autoc2;
+ u32 orig_autoc2;
u16 max_msix_vectors;
bool arc_subsystem_valid;
- bool orig_link_settings_stored;
- bool autotry_restart;
- u8 flags;
+ bool orig_link_settings_stored;
+ bool autotry_restart;
+ u8 flags;
struct ixgbe_dmac_config dmac_config;
bool set_lben;
u32 max_link_up_time;
@@ -4213,25 +4218,25 @@ struct ixgbe_mac_info {
};
struct ixgbe_phy_info {
- struct ixgbe_phy_operations ops;
- enum ixgbe_phy_type type;
- u32 addr;
- u32 id;
- enum ixgbe_sfp_type sfp_type;
- bool sfp_setup_needed;
- u32 revision;
- enum ixgbe_media_type media_type;
+ struct ixgbe_phy_operations ops;
+ enum ixgbe_phy_type type;
+ u32 addr;
+ u32 id;
+ enum ixgbe_sfp_type sfp_type;
+ bool sfp_setup_needed;
+ u32 revision;
+ enum ixgbe_media_type media_type;
u32 phy_semaphore_mask;
- bool reset_disable;
- bool force_10_100_autonego;
- ixgbe_autoneg_advertised autoneg_advertised;
+ bool reset_disable;
+ bool force_10_100_autonego;
+ ixgbe_autoneg_advertised autoneg_advertised;
ixgbe_link_speed speeds_supported;
ixgbe_link_speed eee_speeds_supported;
ixgbe_link_speed eee_speeds_advertised;
- enum ixgbe_smart_speed smart_speed;
- bool smart_speed_active;
- bool multispeed_fiber;
- bool reset_if_overtemp;
+ enum ixgbe_smart_speed smart_speed;
+ bool smart_speed_active;
+ bool multispeed_fiber;
+ bool reset_if_overtemp;
bool qsfp_shared_i2c_bus;
u32 nw_mng_if_sel;
};
@@ -4240,21 +4245,21 @@ struct ixgbe_phy_info {
struct ixgbe_hw {
struct ixgbe_softc *back;
- struct ixgbe_mac_info mac;
- struct ixgbe_addr_filter_info addr_ctrl;
- struct ixgbe_fc_info fc;
- struct ixgbe_phy_info phy;
+ struct ixgbe_mac_info mac;
+ struct ixgbe_addr_filter_info addr_ctrl;
+ struct ixgbe_fc_info fc;
+ struct ixgbe_phy_info phy;
struct ixgbe_link_info link;
- struct ixgbe_eeprom_info eeprom;
- struct ixgbe_bus_info bus;
- struct ixgbe_mbx_info mbx;
+ struct ixgbe_eeprom_info eeprom;
+ struct ixgbe_bus_info bus;
+ struct ixgbe_mbx_info mbx;
const u32 *mvals;
- u16 device_id;
- u16 vendor_id;
- u16 subsystem_device_id;
- u16 subsystem_vendor_id;
- u8 revision_id;
- bool adapter_stopped;
+ u16 device_id;
+ u16 vendor_id;
+ u16 subsystem_device_id;
+ u16 subsystem_vendor_id;
+ u8 revision_id;
+ bool adapter_stopped;
int api_version;
bool force_full_reset;
bool allow_unsupported_sfp;
@@ -4266,7 +4271,6 @@ struct ixgbe_hw {
#define ixgbe_call_func(hw, func, params, error) \
(func != NULL) ? func params : error
-
/* Error Codes */
#define IXGBE_SUCCESS 0
#define IXGBE_ERR_EEPROM -1
@@ -4317,7 +4321,6 @@ struct ixgbe_hw {
#define IXGBE_NOT_IMPLEMENTED 0x7FFFFFFF
-
#define BYPASS_PAGE_CTL0 0x00000000
#define BYPASS_PAGE_CTL1 0x40000000
#define BYPASS_PAGE_CTL2 0x80000000
Index: src/sys/dev/pci/ixgbe/ixgbe_x540.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_x540.c:1.9.6.8 src/sys/dev/pci/ixgbe/ixgbe_x540.c:1.9.6.9
--- src/sys/dev/pci/ixgbe/ixgbe_x540.c:1.9.6.8 Mon Jan 31 17:38:36 2022
+++ src/sys/dev/pci/ixgbe/ixgbe_x540.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_x540.c,v 1.9.6.8 2022/01/31 17:38:36 martin Exp $ */
+/* $NetBSD: ixgbe_x540.c,v 1.9.6.9 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -36,7 +36,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_x540.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe_x540.c,v 1.9.6.8 2022/01/31 17:38:36 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_x540.c,v 1.9.6.9 2023/10/18 14:23:15 martin Exp $");
#include "ixgbe_x540.h"
#include "ixgbe_type.h"
@@ -75,7 +75,6 @@ s32 ixgbe_init_ops_X540(struct ixgbe_hw
ret_val = ixgbe_init_phy_ops_generic(hw);
ret_val = ixgbe_init_ops_generic(hw);
-
/* EEPROM */
eeprom->ops.init_params = ixgbe_init_eeprom_params_X540;
eeprom->ops.read = ixgbe_read_eerd_X540;
@@ -135,7 +134,6 @@ s32 ixgbe_init_ops_X540(struct ixgbe_hw
mac->ops.bypass_set = ixgbe_bypass_set_generic;
mac->ops.bypass_rd_eep = ixgbe_bypass_rd_eep_generic;
-
mac->mcft_size = IXGBE_X540_MC_TBL_SIZE;
mac->vft_size = IXGBE_X540_VFT_TBL_SIZE;
mac->num_rar_entries = IXGBE_X540_RAR_ENTRIES;
Index: src/sys/dev/pci/ixgbe/ixgbe_x550.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_x550.c:1.5.6.13 src/sys/dev/pci/ixgbe/ixgbe_x550.c:1.5.6.14
--- src/sys/dev/pci/ixgbe/ixgbe_x550.c:1.5.6.13 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixgbe_x550.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_x550.c,v 1.5.6.13 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixgbe_x550.c,v 1.5.6.14 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
@@ -35,7 +35,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_x550.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe_x550.c,v 1.5.6.13 2023/10/13 18:32:38 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe_x550.c,v 1.5.6.14 2023/10/18 14:23:15 martin Exp $");
#include "ixgbe_x550.h"
#include "ixgbe_x540.h"
@@ -786,7 +786,6 @@ s32 ixgbe_init_ops_X550EM(struct ixgbe_h
if (mac->ops.get_media_type(hw) != ixgbe_media_type_copper)
phy->ops.set_phy_power = NULL;
-
/* EEPROM */
eeprom->ops.init_params = ixgbe_init_eeprom_params_X540;
eeprom->ops.read = ixgbe_read_ee_hostif_X550;
@@ -922,7 +921,7 @@ out:
}
/**
- * ixgbe_fc_autoneg_fw _ Set up flow control for FW-controlled PHYs
+ * ixgbe_fc_autoneg_fw - Set up flow control for FW-controlled PHYs
* @hw: pointer to hardware structure
*
* Called at init time to set up flow control.
@@ -2048,7 +2047,7 @@ void ixgbe_init_mac_link_ops_X550em(stru
}
/**
- * ixgbe_get_link_capabilities_x550em - Determines link capabilities
+ * ixgbe_get_link_capabilities_X550em - Determines link capabilities
* @hw: pointer to hardware structure
* @speed: pointer to link speed
* @autoneg: TRUE when autoneg or autotry is enabled
@@ -2059,7 +2058,6 @@ s32 ixgbe_get_link_capabilities_X550em(s
{
DEBUGFUNC("ixgbe_get_link_capabilities_X550em");
-
if (hw->phy.type == ixgbe_phy_fw) {
*autoneg = TRUE;
*speed = hw->phy.speeds_supported;
@@ -3416,7 +3414,7 @@ out:
}
/**
- * ixgbe_write_ee_hostif_X550 - Write EEPROM word using hostif
+ * ixgbe_write_ee_hostif_data_X550 - Write EEPROM word using hostif
* @hw: pointer to hardware structure
* @offset: offset of word in the EEPROM to write
* @data: word write to the EEPROM
@@ -3883,7 +3881,7 @@ u64 ixgbe_get_supported_physical_layer_X
}
/**
- * ixgbe_get_bus_info_x550em - Set PCI bus info
+ * ixgbe_get_bus_info_X550em - Set PCI bus info
* @hw: pointer to hardware structure
*
* Sets bus link width and speed to unknown because X550em is
@@ -3948,7 +3946,7 @@ void ixgbe_disable_rx_x550(struct ixgbe_
}
/**
- * ixgbe_enter_lplu_x550em - Transition to low power states
+ * ixgbe_enter_lplu_t_x550em - Transition to low power states
* @hw: pointer to hardware structure
*
* Configures Low Power Link Up on transition to low power states
@@ -4056,7 +4054,7 @@ s32 ixgbe_enter_lplu_t_x550em(struct ixg
}
/**
- * ixgbe_get_lcd_x550em - Determine lowest common denominator
+ * ixgbe_get_lcd_t_x550em - Determine lowest common denominator
* @hw: pointer to hardware structure
* @lcd_speed: pointer to lowest common link speed
*
Index: src/sys/dev/pci/ixgbe/ixv.c
diff -u src/sys/dev/pci/ixgbe/ixv.c:1.56.2.42 src/sys/dev/pci/ixgbe/ixv.c:1.56.2.43
--- src/sys/dev/pci/ixgbe/ixv.c:1.56.2.42 Fri Oct 13 18:32:38 2023
+++ src/sys/dev/pci/ixgbe/ixv.c Wed Oct 18 14:23:15 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixv.c,v 1.56.2.42 2023/10/13 18:32:38 martin Exp $ */
+/* $NetBSD: ixv.c,v 1.56.2.43 2023/10/18 14:23:15 martin Exp $ */
/******************************************************************************
@@ -35,7 +35,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/if_ixv.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixv.c,v 1.56.2.42 2023/10/13 18:32:38 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixv.c,v 1.56.2.43 2023/10/18 14:23:15 martin Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -216,11 +216,11 @@ static bool ixv_txrx_workqueue = false;
* setting higher than RX as this seems
* the better performing choice.
*/
-static int ixv_txd = PERFORM_TXD;
+static int ixv_txd = DEFAULT_TXD;
TUNABLE_INT("hw.ixv.txd", &ixv_txd);
/* Number of RX descriptors per ring */
-static int ixv_rxd = PERFORM_RXD;
+static int ixv_rxd = DEFAULT_RXD;
TUNABLE_INT("hw.ixv.rxd", &ixv_rxd);
/* Legacy Transmit (single queue) */
@@ -500,14 +500,26 @@ ixv_attach(device_t parent, device_t dev
/* Do descriptor calc and sanity checks */
if (((ixv_txd * sizeof(union ixgbe_adv_tx_desc)) % DBA_ALIGN) != 0 ||
ixv_txd < MIN_TXD || ixv_txd > MAX_TXD) {
- aprint_error_dev(dev, "TXD config issue, using default!\n");
+ aprint_error_dev(dev, "Invalid TX ring size (%d). "
+ "It must be between %d and %d, "
+ "inclusive, and must be a multiple of %zu. "
+ "Using default value of %d instead.\n",
+ ixv_txd, MIN_TXD, MAX_TXD,
+ DBA_ALIGN / sizeof(union ixgbe_adv_tx_desc),
+ DEFAULT_TXD);
sc->num_tx_desc = DEFAULT_TXD;
} else
sc->num_tx_desc = ixv_txd;
if (((ixv_rxd * sizeof(union ixgbe_adv_rx_desc)) % DBA_ALIGN) != 0 ||
ixv_rxd < MIN_RXD || ixv_rxd > MAX_RXD) {
- aprint_error_dev(dev, "RXD config issue, using default!\n");
+ aprint_error_dev(dev, "Invalid RX ring size (%d). "
+ "It must be between %d and %d, "
+ "inclusive, and must be a multiple of %zu. "
+ "Using default value of %d instead.\n",
+ ixv_rxd, MIN_RXD, MAX_RXD,
+ DBA_ALIGN / sizeof(union ixgbe_adv_rx_desc),
+ DEFAULT_RXD);
sc->num_rx_desc = DEFAULT_RXD;
} else
sc->num_rx_desc = ixv_rxd;
@@ -537,6 +549,7 @@ ixv_attach(device_t parent, device_t dev
/* hw.ix defaults init */
sc->enable_aim = ixv_enable_aim;
+ sc->max_interrupt_rate = ixv_max_interrupt_rate;
sc->txrx_use_workqueue = ixv_txrx_workqueue;
@@ -559,7 +572,7 @@ ixv_attach(device_t parent, device_t dev
/* Check if VF was disabled by PF */
error = hw->mac.ops.get_link_state(hw, &sc->link_enabled);
- if (error) {
+ if (error) {
/* PF is not capable of controlling VF state. Enable the link. */
sc->link_enabled = TRUE;
}
@@ -817,7 +830,7 @@ ixv_init_locked(struct ixgbe_softc *sc)
/* Config/Enable Link */
error = hw->mac.ops.get_link_state(hw, &sc->link_enabled);
- if (error) {
+ if (error) {
/* PF is not capable of controlling VF state. Enable the link. */
sc->link_enabled = TRUE;
} else if (sc->link_enabled == FALSE)
@@ -830,16 +843,16 @@ ixv_init_locked(struct ixgbe_softc *sc)
/* Start watchdog */
callout_reset(&sc->timer, hz, ixv_local_timer, sc);
- /* And now turn on interrupts */
- ixv_enable_intr(sc);
-
/* Update saved flags. See ixgbe_ifflags_cb() */
sc->if_flags = ifp->if_flags;
- /* Now inform the stack we're ready */
+ /* Inform the stack we're ready */
ifp->if_flags |= IFF_RUNNING;
ifp->if_flags &= ~IFF_OACTIVE;
+ /* And now turn on interrupts */
+ ixv_enable_intr(sc);
+
return;
} /* ixv_init_locked */
@@ -1551,7 +1564,7 @@ map_err:
static void
ixv_free_pci_resources(struct ixgbe_softc *sc)
{
- struct ix_queue *que = sc->queues;
+ struct ix_queue *que = sc->queues;
int rid;
/*
@@ -2401,9 +2414,9 @@ ixv_sysctl_interrupt_rate_handler(SYSCTL
&& (reg < IXGBE_MIN_RSC_EITR_10G1G))
return EINVAL;
}
- ixv_max_interrupt_rate = rate;
+ sc->max_interrupt_rate = rate;
} else
- ixv_max_interrupt_rate = 0;
+ sc->max_interrupt_rate = 0;
ixv_eitr_write(sc, que->msix, reg);
return (0);
@@ -3229,7 +3242,7 @@ ixv_allocate_msix(struct ixgbe_softc *sc
{
device_t dev = sc->dev;
struct ix_queue *que = sc->queues;
- struct tx_ring *txr = sc->tx_rings;
+ struct tx_ring *txr = sc->tx_rings;
int error, msix_ctrl, rid, vector = 0;
pci_chipset_tag_t pc;
pcitag_t tag;