Module Name:    src
Committed By:   yamaguchi
Date:           Fri Mar 13 05:49:52 UTC 2020

Modified Files:
        src/sys/dev/pci: if_ixl.c

Log Message:
Use I40E_PFINT_ITRN registers to enable ITR for MSI-X interrupts


To generate a diff of this commit:
cvs rdiff -u -r1.63 -r1.64 src/sys/dev/pci/if_ixl.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/if_ixl.c
diff -u src/sys/dev/pci/if_ixl.c:1.63 src/sys/dev/pci/if_ixl.c:1.64
--- src/sys/dev/pci/if_ixl.c:1.63	Fri Mar 13 05:40:20 2020
+++ src/sys/dev/pci/if_ixl.c	Fri Mar 13 05:49:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ixl.c,v 1.63 2020/03/13 05:40:20 yamaguchi Exp $	*/
+/*	$NetBSD: if_ixl.c,v 1.64 2020/03/13 05:49:52 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2013-2015, Intel Corporation
@@ -74,7 +74,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ixl.c,v 1.63 2020/03/13 05:40:20 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ixl.c,v 1.64 2020/03/13 05:49:52 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -137,6 +137,8 @@ struct ixl_softc; /* defined */
 #define I40E_ITR_INDEX_TX		0x1
 #define I40E_ITR_INDEX_OTHER		0x2
 #define I40E_ITR_INDEX_NONE		0x3
+#define IXL_ITR_RX			0x7a /* 4K intrs/sec */
+#define IXL_ITR_TX			0x7a /* 4K intrs/sec */
 
 #define I40E_INTR_NOTX_QUEUE		0
 #define I40E_INTR_NOTX_INTR		0
@@ -704,6 +706,8 @@ struct ixl_softc {
 	unsigned int		 sc_nqueue_pairs_max;
 	unsigned int		 sc_nqueue_pairs_device;
 	struct ixl_queue_pair	*sc_qps;
+	uint32_t		 sc_itr_rx;
+	uint32_t		 sc_itr_tx;
 
 	struct evcnt		 sc_event_atq;
 	struct evcnt		 sc_event_link;
@@ -1453,6 +1457,8 @@ ixl_attach(device_t parent, device_t sel
 
 	if (pmf_device_register(self, NULL, NULL) != true)
 		aprint_debug_dev(self, "couldn't establish power handler\n");
+	sc->sc_itr_rx = IXL_ITR_RX;
+	sc->sc_itr_tx = IXL_ITR_TX;
 	sc->sc_attached = true;
 	return;
 
@@ -5914,13 +5920,18 @@ ixl_config_queue_intr(struct ixl_softc *
 		     I40E_QINT_TQCTL_NEXTQ_TYPE_SHIFT) |
 		     I40E_QINT_TQCTL_CAUSE_ENA_MASK);
 
-		if (sc->sc_intrtype == PCI_INTR_TYPE_MSIX)
+		if (sc->sc_intrtype == PCI_INTR_TYPE_MSIX) {
+			ixl_wr(sc, I40E_PFINT_ITRN(I40E_ITR_INDEX_RX, i),
+			    sc->sc_itr_rx);
+			ixl_wr(sc, I40E_PFINT_ITRN(I40E_ITR_INDEX_TX, i),
+			    sc->sc_itr_tx);
 			vector++;
+		}
 	}
 	ixl_flush(sc);
 
-	ixl_wr(sc, I40E_PFINT_ITR0(I40E_ITR_INDEX_RX), 0x7a);
-	ixl_wr(sc, I40E_PFINT_ITR0(I40E_ITR_INDEX_TX), 0x7a);
+	ixl_wr(sc, I40E_PFINT_ITR0(I40E_ITR_INDEX_RX), sc->sc_itr_rx);
+	ixl_wr(sc, I40E_PFINT_ITR0(I40E_ITR_INDEX_TX), sc->sc_itr_tx);
 	ixl_flush(sc);
 }
 

Reply via email to