Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pci Add some new event counters.



details:   https://anonhg.NetBSD.org/src/rev/0812a5f9bbbb
branches:  trunk
changeset: 374743:0812a5f9bbbb
user:      msaitoh <msaitoh%NetBSD.org@localhost>
date:      Thu May 11 07:19:02 2023 +0000

description:
Add some new event counters.

Add the following counters for 82575 and newer except 80003, ICHs and PCHs:
    - Only 82576 document describes about the circuit breaker,
      so the following two might be only for 82575:
        - Circuit Breaker TX Manageability Packet
        - Circuit Breaker RX Dropped Packet
    - 82575's document doesn't describe the following two, but we can see
      the same value as GO{T,R}C have:
        - Host Good Octets RX
        - Host Good Octets TX
    - 82575's document doesn't describe the LENERRS (Length Errors) counter.
      I don't know if it has.
    - Perhaps Non-SerDes/SGMII devices don't have SCVPC
      (SerDes/SGMII Code Violation Packet) register. We don't care if
      it's SerDes/SGMII or not for now.
    - HRMPC (Header Redirection Missed Packet) appears only once
      in 8257[56]'s datasheet. FreeBSD's igb counts it, so we do, too.
    - Count the following two for I350 and newer. I don't know if PCHs have:
        - EEE TX LPI
        - EEE RX LPI

diffstat:

 sys/dev/pci/if_wm.c    |  100 ++++++++++++++++++++++++++++++++++++++++--------
 sys/dev/pci/if_wmreg.h |   12 +++++-
 2 files changed, 94 insertions(+), 18 deletions(-)

diffs (265 lines):

diff -r 71bdc27a765e -r 0812a5f9bbbb sys/dev/pci/if_wm.c
--- a/sys/dev/pci/if_wm.c       Thu May 11 07:14:46 2023 +0000
+++ b/sys/dev/pci/if_wm.c       Thu May 11 07:19:02 2023 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wm.c,v 1.775 2023/05/11 07:14:46 msaitoh Exp $      */
+/*     $NetBSD: if_wm.c,v 1.776 2023/05/11 07:19:02 msaitoh Exp $      */
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -82,7 +82,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.775 2023/05/11 07:14:46 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.776 2023/05/11 07:19:02 msaitoh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_if_wm.h"
@@ -601,6 +601,7 @@ struct wm_softc {
        struct evcnt sc_ev_mcc;         /* Multiple Collision */
        struct evcnt sc_ev_latecol;     /* Late Collision */
        struct evcnt sc_ev_colc;        /* Collision */
+       struct evcnt sc_ev_cbtmpc;      /* Circuit Breaker Tx Mng. Packet */
        struct evcnt sc_ev_dc;          /* Defer */
        struct evcnt sc_ev_tncrs;       /* Tx-No CRS */
        struct evcnt sc_ev_sec;         /* Sequence Error */
@@ -611,6 +612,7 @@ struct wm_softc {
        struct evcnt sc_ev_htdpmc;      /* Host Tx Discarded Pkts by MAC */
 
        struct evcnt sc_ev_rlec;        /* Receive Length Error */
+       struct evcnt sc_ev_cbrdpc;      /* Circuit Breaker Rx Dropped Packet */
        struct evcnt sc_ev_prc64;       /* Packets Rx (64 bytes) */
        struct evcnt sc_ev_prc127;      /* Packets Rx (65-127 bytes) */
        struct evcnt sc_ev_prc255;      /* Packets Rx (128-255 bytes) */
@@ -673,12 +675,17 @@ struct wm_softc {
        struct evcnt sc_ev_hgptc;       /* Host Good Packets TX */
        struct evcnt sc_ev_debug4;      /* Debug Counter 4 */
        struct evcnt sc_ev_htcbdpc;     /* Host Tx Circuit Breaker Drp. Pkts */
-
+       struct evcnt sc_ev_hgorc;       /* Host Good Octets Rx */
+       struct evcnt sc_ev_hgotc;       /* Host Good Octets Tx */
+       struct evcnt sc_ev_lenerrs;     /* Length Error */
+       struct evcnt sc_ev_tlpic;       /* EEE Tx LPI */
+       struct evcnt sc_ev_rlpic;       /* EEE Rx LPI */
        struct evcnt sc_ev_b2ogprc;     /* BMC2OS pkts received by host */
        struct evcnt sc_ev_o2bspc;      /* OS2BMC pkts transmitted by host */
        struct evcnt sc_ev_b2ospc;      /* BMC2OS pkts sent by BMC */
        struct evcnt sc_ev_o2bgptc;     /* OS2BMC pkts received by BMC */
-
+       struct evcnt sc_ev_scvpc;       /* SerDes/SGMII Code Violation Pkt. */
+       struct evcnt sc_ev_hrmpc;       /* Header Redirection Missed Packet */
 #endif /* WM_EVENT_COUNTERS */
 
        struct sysctllog *sc_sysctllog;
@@ -3262,6 +3269,9 @@ alloc_retry:
                            "TCP Segmentation Context Tx Fail");
                else {
                        /* XXX Is the circuit breaker only for 82576? */
+                       evcnt_attach_dynamic(&sc->sc_ev_cbrdpc,
+                           EVCNT_TYPE_MISC, NULL, xname,
+                           "Circuit Breaker Rx Dropped Packet");
                        evcnt_attach_dynamic(&sc->sc_ev_cbrmpc,
                            EVCNT_TYPE_MISC, NULL, xname,
                            "Circuit Breaker Rx Manageability Packet");
@@ -3289,6 +3299,11 @@ alloc_retry:
            NULL, xname, "Multiple Collision");
        evcnt_attach_dynamic(&sc->sc_ev_latecol, EVCNT_TYPE_MISC,
            NULL, xname, "Late Collisions");
+
+       if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc))
+               evcnt_attach_dynamic(&sc->sc_ev_cbtmpc, EVCNT_TYPE_MISC,
+                   NULL, xname, "Circuit Breaker Tx Manageability Packet");
+
        evcnt_attach_dynamic(&sc->sc_ev_dc, EVCNT_TYPE_MISC,
            NULL, xname, "Defer");
        evcnt_attach_dynamic(&sc->sc_ev_prc64, EVCNT_TYPE_MISC,
@@ -3411,8 +3426,19 @@ alloc_retry:
                /* XXX Is the circuit breaker only for 82576? */
                evcnt_attach_dynamic(&sc->sc_ev_htcbdpc, EVCNT_TYPE_MISC,
                    NULL, xname, "Host Tx Circuit Breaker Dropped Packets");
-       }
-       if ((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003)) {
+
+               evcnt_attach_dynamic(&sc->sc_ev_hgorc, EVCNT_TYPE_MISC,
+                   NULL, xname, "Host Good Octets Rx");
+               evcnt_attach_dynamic(&sc->sc_ev_hgotc, EVCNT_TYPE_MISC,
+                   NULL, xname, "Host Good Octets Tx");
+               evcnt_attach_dynamic(&sc->sc_ev_lenerrs, EVCNT_TYPE_MISC,
+                   NULL, xname, "Length Errors");
+       }
+       if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) {
+               evcnt_attach_dynamic(&sc->sc_ev_tlpic, EVCNT_TYPE_MISC,
+                   NULL, xname, "EEE Tx LPI");
+               evcnt_attach_dynamic(&sc->sc_ev_rlpic, EVCNT_TYPE_MISC,
+                   NULL, xname, "EEE Rx LPI");
                evcnt_attach_dynamic(&sc->sc_ev_b2ogprc, EVCNT_TYPE_MISC,
                    NULL, xname, "BMC2OS Packets received by host");
                evcnt_attach_dynamic(&sc->sc_ev_o2bspc, EVCNT_TYPE_MISC,
@@ -3421,6 +3447,10 @@ alloc_retry:
                    NULL, xname, "BMC2OS Packets sent by BMC");
                evcnt_attach_dynamic(&sc->sc_ev_o2bgptc, EVCNT_TYPE_MISC,
                    NULL, xname, "OS2BMC Packets received by BMC");
+               evcnt_attach_dynamic(&sc->sc_ev_scvpc, EVCNT_TYPE_MISC,
+                   NULL, xname, "SerDes/SGMII Code Violation Packet");
+               evcnt_attach_dynamic(&sc->sc_ev_hrmpc, EVCNT_TYPE_MISC,
+                   NULL, xname, "Header Redirection Missed Packet");
        }
 #endif /* WM_EVENT_COUNTERS */
 
@@ -3488,8 +3518,10 @@ wm_detach(device_t self, int flags __unu
                evcnt_detach(&sc->sc_ev_tsctc);
                if ((sc->sc_type < WM_T_82575) || WM_IS_ICHPCH(sc))
                        evcnt_detach(&sc->sc_ev_tsctfc);
-               else
+               else {
+                       evcnt_detach(&sc->sc_ev_cbrdpc);
                        evcnt_detach(&sc->sc_ev_cbrmpc);
+               }
        }
 
        if (sc->sc_type >= WM_T_82542_2_1) {
@@ -3504,6 +3536,10 @@ wm_detach(device_t self, int flags __unu
        evcnt_detach(&sc->sc_ev_ecol);
        evcnt_detach(&sc->sc_ev_mcc);
        evcnt_detach(&sc->sc_ev_latecol);
+
+       if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc))
+               evcnt_detach(&sc->sc_ev_cbtmpc);
+
        evcnt_detach(&sc->sc_ev_dc);
        evcnt_detach(&sc->sc_ev_prc64);
        evcnt_detach(&sc->sc_ev_prc127);
@@ -3558,12 +3594,20 @@ wm_detach(device_t self, int flags __unu
                evcnt_detach(&sc->sc_ev_debug4);
                evcnt_detach(&sc->sc_ev_rxdmtc);
                evcnt_detach(&sc->sc_ev_htcbdpc);
-       }
-       if ((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003)) {
+
+               evcnt_detach(&sc->sc_ev_hgorc);
+               evcnt_detach(&sc->sc_ev_hgotc);
+               evcnt_detach(&sc->sc_ev_lenerrs);
+       }
+       if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) {
+               evcnt_detach(&sc->sc_ev_tlpic);
+               evcnt_detach(&sc->sc_ev_rlpic);
                evcnt_detach(&sc->sc_ev_b2ogprc);
                evcnt_detach(&sc->sc_ev_o2bspc);
                evcnt_detach(&sc->sc_ev_b2ospc);
                evcnt_detach(&sc->sc_ev_o2bgptc);
+               evcnt_detach(&sc->sc_ev_scvpc);
+               evcnt_detach(&sc->sc_ev_hrmpc);
        }
 #endif /* WM_EVENT_COUNTERS */
 
@@ -3895,10 +3939,16 @@ wm_tick(void *arg)
                WM_EVCNT_ADD(&sc->sc_ev_tx_xoff, CSR_READ(sc, WMREG_XOFFTXC));
                WM_EVCNT_ADD(&sc->sc_ev_rx_macctl, CSR_READ(sc, WMREG_FCRUC));
        }
+
        WM_EVCNT_ADD(&sc->sc_ev_scc, CSR_READ(sc, WMREG_SCC));
        WM_EVCNT_ADD(&sc->sc_ev_ecol, CSR_READ(sc, WMREG_ECOL));
        WM_EVCNT_ADD(&sc->sc_ev_mcc, CSR_READ(sc, WMREG_MCC));
        WM_EVCNT_ADD(&sc->sc_ev_latecol, CSR_READ(sc, WMREG_LATECOL));
+
+       if ((sc->sc_type >= WM_T_I350) && !WM_IS_ICHPCH(sc)) {
+               WM_EVCNT_ADD(&sc->sc_ev_cbtmpc, CSR_READ(sc, WMREG_CBTMPC));
+       }
+
        WM_EVCNT_ADD(&sc->sc_ev_dc, CSR_READ(sc, WMREG_DC));
        WM_EVCNT_ADD(&sc->sc_ev_prc64, CSR_READ(sc, WMREG_PRC64));
        WM_EVCNT_ADD(&sc->sc_ev_prc127, CSR_READ(sc, WMREG_PRC127));
@@ -3975,14 +4025,30 @@ wm_tick(void *arg)
                WM_EVCNT_ADD(&sc->sc_ev_debug4, CSR_READ(sc, WMREG_DEBUG4));
                WM_EVCNT_ADD(&sc->sc_ev_rxdmtc, CSR_READ(sc, WMREG_RXDMTC));
                WM_EVCNT_ADD(&sc->sc_ev_htcbdpc, CSR_READ(sc, WMREG_HTCBDPC));
-       }
-
-       if (((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003))
-           && ((CSR_READ(sc, WMREG_MANC) & MANC_EN_BMC2OS) != 0)) {
-               WM_EVCNT_ADD(&sc->sc_ev_b2ogprc, CSR_READ(sc, WMREG_B2OGPRC));
-               WM_EVCNT_ADD(&sc->sc_ev_o2bspc, CSR_READ(sc, WMREG_O2BSPC));
-               WM_EVCNT_ADD(&sc->sc_ev_b2ospc, CSR_READ(sc, WMREG_B2OSPC));
-               WM_EVCNT_ADD(&sc->sc_ev_o2bgptc, CSR_READ(sc, WMREG_O2BGPTC));
+
+               WM_EVCNT_ADD(&sc->sc_ev_hgorc,
+                   CSR_READ(sc, WMREG_HGORCL) +
+                   ((uint64_t)CSR_READ(sc, WMREG_HGORCH) << 32));
+               WM_EVCNT_ADD(&sc->sc_ev_hgotc,
+                   CSR_READ(sc, WMREG_HGOTCL) +
+                   ((uint64_t)CSR_READ(sc, WMREG_HGOTCH) << 32));
+               WM_EVCNT_ADD(&sc->sc_ev_lenerrs, CSR_READ(sc, WMREG_LENERRS));
+       }
+       if ((sc->sc_type >= WM_T_I350) && (sc->sc_type < WM_T_80003)) {
+               WM_EVCNT_ADD(&sc->sc_ev_tlpic, CSR_READ(sc, WMREG_TLPIC));
+               WM_EVCNT_ADD(&sc->sc_ev_rlpic, CSR_READ(sc, WMREG_RLPIC));
+               if ((CSR_READ(sc, WMREG_MANC) & MANC_EN_BMC2OS) != 0) {
+                       WM_EVCNT_ADD(&sc->sc_ev_b2ogprc,
+                           CSR_READ(sc, WMREG_B2OGPRC));
+                       WM_EVCNT_ADD(&sc->sc_ev_o2bspc,
+                           CSR_READ(sc, WMREG_O2BSPC));
+                       WM_EVCNT_ADD(&sc->sc_ev_b2ospc,
+                           CSR_READ(sc, WMREG_B2OSPC));
+                       WM_EVCNT_ADD(&sc->sc_ev_o2bgptc,
+                           CSR_READ(sc, WMREG_O2BGPTC));
+               }
+               WM_EVCNT_ADD(&sc->sc_ev_scvpc, CSR_READ(sc, WMREG_SCVPC));
+               WM_EVCNT_ADD(&sc->sc_ev_hrmpc, CSR_READ(sc, WMREG_HRMPC));
        }
        net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
        if_statadd_ref(nsr, if_collisions, colc);
diff -r 71bdc27a765e -r 0812a5f9bbbb sys/dev/pci/if_wmreg.h
--- a/sys/dev/pci/if_wmreg.h    Thu May 11 07:14:46 2023 +0000
+++ b/sys/dev/pci/if_wmreg.h    Thu May 11 07:19:02 2023 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wmreg.h,v 1.129 2023/05/11 07:14:46 msaitoh Exp $   */
+/*     $NetBSD: if_wmreg.h,v 1.130 2023/05/11 07:19:02 msaitoh Exp $   */
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -1152,6 +1152,7 @@ struct livengood_tcpip_ctxdesc {
 #define        WMREG_MCC       0x401c  /* Multiple Collision Count - R/clr */
 #define        WMREG_LATECOL   0x4020  /* Late Collisions Count - R/clr */
 #define        WMREG_COLC      0x4028  /* Collision Count - R/clr */
+#define        WMREG_CBTMPC    0x402c  /* Circuit Breaker Tx Manageability Packet */
 #define        WMREG_DC        0x4030  /* Defer Count - R/clr */
 #define        WMREG_TNCRS     0x4034  /* Tx with No CRS - R/clr */
 #define        WMREG_SEC       0x4038  /* Sequence Error Count */
@@ -1162,6 +1163,7 @@ struct livengood_tcpip_ctxdesc {
 #define        WMREG_HTDPMC    0x403c  /* Host Tx Discarded Packets by MAC Count */
 
 #define        WMREG_RLEC      0x4040  /* Receive Length Error Count */
+#define        WMREG_CBRDPC    0x4044  /* Circuit Breaker Rx Dropped Packet Count */
 #define        WMREG_XONRXC    0x4048  /* XON Rx Count - R/clr */
 #define        WMREG_XONTXC    0x404c  /* XON Tx Count - R/clr */
 #define        WMREG_XOFFRXC   0x4050  /* XOFF Rx Count - R/clr */
@@ -1230,6 +1232,11 @@ struct livengood_tcpip_ctxdesc {
 #define        WMREG_DEBUG4    0x411c  /* Debug Counter 4 */
 #define        WMREG_RXDMTC    0x4120  /* Rx Desc Min Thresh Count */
 #define        WMREG_HTCBDPC   0x4124  /* Host Tx Circuit Breaker Dropped Pkt. Cnt. */
+#define        WMREG_HGORCL    0x4128  /* Host Good Octets Rx Count Low (>=82576?) */
+#define        WMREG_HGORCH    0x412c  /* Host Good Octets Rx Count High (>=82576?) */
+#define        WMREG_HGOTCL    0x4130  /* Host Good Octets Tx Count Low (>=82576?) */
+#define        WMREG_HGOTCH    0x4134  /* Host Good Octets Tx Count High (>=82576?) */
+#define        WMREG_LENERRS   0x4138  /* Length Errors Count (>=82576?) */
 
 #define        WMREG_TLPIC     0x4148  /* EEE Tx LPI Count */
 #define        WMREG_RLPIC     0x414c  /* EEE Rx LPI Count */
@@ -1270,6 +1277,7 @@ struct livengood_tcpip_ctxdesc {
 #define        WMREG_PCS_ANADV 0x4218  /* AN Advertsement */
 #define        WMREG_PCS_LPAB  0x421c  /* Link Partnet Ability */
 #define        WMREG_PCS_NPTX  0x4220  /* Next Page Transmit */
+#define        WMREG_SCVPC     0x4228  /* SerDes/SGMII Code Violation Packet Count */
 
 #define        WMREG_RXCSUM    0x5000  /* Receive Checksum register */
 #define        RXCSUM_PCSS     0x000000ff      /* Packet Checksum Start */
@@ -1467,6 +1475,8 @@ struct livengood_tcpip_ctxdesc {
 #define        WMREG_B2OSPC    0x8fe0  /* BMC2OS packets sent by BMC */
 #define        WMREG_O2BGPTC   0x8fe4  /* OS2BMC packets received by BMC */
 
+#define        WMREG_HRMPC     0xa018  /* Header Redirection Missed Packet Count */
+
 #define        WMREG_EEC       0x12010
 #define        EEC_FLASH_DETECTED __BIT(19)    /* FLASH */
 #define        EEC_FLUPD       __BIT(23)       /* Update FLASH */



Home | Main Index | Thread Index | Old Index