Module Name: src Committed By: simonb Date: Mon Jun 22 02:26:20 UTC 2020
Modified Files: src/sys/arch/mips/cavium: octeonvar.h src/sys/arch/mips/cavium/dev: if_cnmac.c if_cnmacvar.h octeon_asx.c octeon_asxvar.h octeon_ciu.c octeon_fpa.c octeon_fpavar.h octeon_gmx.c octeon_gmxvar.h octeon_ipd.c octeon_ipdvar.h octeon_pci.c octeon_pip.c octeon_pipvar.h octeon_pko.c octeon_pkovar.h octeon_pow.c octeon_powvar.h src/sys/arch/mips/conf: files.octeon Log Message: Remove unmaintained CNMAC_DEBUG debug code. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/arch/mips/cavium/octeonvar.h cvs rdiff -u -r1.22 -r1.23 src/sys/arch/mips/cavium/dev/if_cnmac.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/mips/cavium/dev/if_cnmacvar.h \ src/sys/arch/mips/cavium/dev/octeon_asx.c \ src/sys/arch/mips/cavium/dev/octeon_ciu.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/mips/cavium/dev/octeon_asxvar.h \ src/sys/arch/mips/cavium/dev/octeon_ipdvar.h \ src/sys/arch/mips/cavium/dev/octeon_pipvar.h \ src/sys/arch/mips/cavium/dev/octeon_pko.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/mips/cavium/dev/octeon_fpa.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/mips/cavium/dev/octeon_fpavar.h \ src/sys/arch/mips/cavium/dev/octeon_gmxvar.h \ src/sys/arch/mips/cavium/dev/octeon_ipd.c \ src/sys/arch/mips/cavium/dev/octeon_pip.c \ src/sys/arch/mips/cavium/dev/octeon_powvar.h cvs rdiff -u -r1.13 -r1.14 src/sys/arch/mips/cavium/dev/octeon_gmx.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/mips/cavium/dev/octeon_pci.c \ src/sys/arch/mips/cavium/dev/octeon_pkovar.h cvs rdiff -u -r1.8 -r1.9 src/sys/arch/mips/cavium/dev/octeon_pow.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/mips/conf/files.octeon Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/mips/cavium/octeonvar.h diff -u src/sys/arch/mips/cavium/octeonvar.h:1.11 src/sys/arch/mips/cavium/octeonvar.h:1.12 --- src/sys/arch/mips/cavium/octeonvar.h:1.11 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/octeonvar.h Mon Jun 22 02:26:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeonvar.h,v 1.11 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeonvar.h,v 1.12 2020/06/22 02:26:19 simonb Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -415,47 +415,4 @@ octeon_get_cycles(void) #endif } -/* -------------------------------------------------------------------------- */ - -/* ---- event counter */ - -#if defined(CNMAC_DEBUG) -#define OCTEON_EVCNT_INC(sc, name) \ - do { (sc)->sc_ev_##name.ev_count++; } while (0) -#define OCTEON_EVCNT_ADD(sc, name, n) \ - do { (sc)->sc_ev_##name.ev_count += (n); } while (0) -#define OCTEON_EVCNT_ATTACH_EVCNTS(sc, entries, devname) \ -do { \ - int i; \ - const struct octeon_evcnt_entry *ee; \ - \ - for (i = 0; i < (int)__arraycount(entries); i++) { \ - ee = &(entries)[i]; \ - evcnt_attach_dynamic( \ - (struct evcnt *)((uintptr_t)(sc) + ee->ee_offset), \ - ee->ee_type, ee->ee_parent, devname, \ - ee->ee_name); \ - } \ -} while (0) -#else -#define OCTEON_EVCNT_INC(sc, name) -#define OCTEON_EVCNT_ADD(sc, name, n) -#define OCTEON_EVCNT_ATTACH_EVCNTS(sc, entries, devname) -#endif - -struct octeon_evcnt_entry { - size_t ee_offset; - int ee_type; - struct evcnt *ee_parent; - const char *ee_name; -}; - -#define OCTEON_EVCNT_ENTRY(_sc_type, _var, _ev_type, _parent, _name) \ - { \ - .ee_offset = offsetof(_sc_type, sc_ev_##_var), \ - .ee_type = EVCNT_TYPE_##_ev_type, \ - .ee_parent = _parent, \ - .ee_name = _name \ - } - #endif /* _MIPS_OCTEON_OCTEONVAR_H_ */ Index: src/sys/arch/mips/cavium/dev/if_cnmac.c diff -u src/sys/arch/mips/cavium/dev/if_cnmac.c:1.22 src/sys/arch/mips/cavium/dev/if_cnmac.c:1.23 --- src/sys/arch/mips/cavium/dev/if_cnmac.c:1.22 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/if_cnmac.c Mon Jun 22 02:26:19 2020 @@ -1,24 +1,12 @@ -/* $NetBSD: if_cnmac.c,v 1.22 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: if_cnmac.c,v 1.23 2020/06/22 02:26:19 simonb Exp $ */ #include <sys/cdefs.h> #if 0 -__KERNEL_RCSID(0, "$NetBSD: if_cnmac.c,v 1.22 2020/06/18 13:52:08 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_cnmac.c,v 1.23 2020/06/22 02:26:19 simonb Exp $"); #endif #include "opt_octeon.h" -#ifdef CNMAC_DEBUG - -#ifndef DIAGNOSTIC -#define DIAGNOSTIC -#endif - -#ifndef DEBUG -#define DEBUG -#endif - -#endif - /* * If no free send buffer is available, free all the sent buffers and bail out. */ @@ -83,14 +71,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_cnmac.c,v #include <mips/cavium/dev/octeon_smivar.h> #include <mips/cavium/dev/if_cnmacvar.h> -#ifdef CNMAC_DEBUG -#define CNMAC_KASSERT(x) KASSERT(x) -#define CNMAC_KDASSERT(x) KDASSERT(x) -#else -#define CNMAC_KASSERT(x) -#define CNMAC_KDASSERT(x) -#endif - /* * Set the PKO to think command buffers are an odd length. This makes it so we * never have to divide a comamnd across two buffers. @@ -183,46 +163,6 @@ int cnmac_param_intr = 0; CFATTACH_DECL_NEW(cnmac, sizeof(struct cnmac_softc), cnmac_match, cnmac_attach, NULL, NULL); -#ifdef CNMAC_DEBUG - -static const struct octeon_evcnt_entry octeon_evcnt_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct cnmac_softc, name, type, parent, descr) - _ENTRY(rx, MISC, NULL, "rx"), - _ENTRY(rxint, INTR, NULL, "rx intr"), - _ENTRY(rxrs, MISC, NULL, "rx dynamic short"), - _ENTRY(rxbufpkalloc, MISC, NULL, "rx buf pkt alloc"), - _ENTRY(rxbufpkput, MISC, NULL, "rx buf pkt put"), - _ENTRY(rxbufwqalloc, MISC, NULL, "rx buf wqe alloc"), - _ENTRY(rxbufwqput, MISC, NULL, "rx buf wqe put"), - _ENTRY(rxerrcode, MISC, NULL, "rx code error"), - _ENTRY(rxerrfix, MISC, NULL, "rx fixup error"), - _ENTRY(rxerrjmb, MISC, NULL, "rx jmb error"), - _ENTRY(rxerrlink, MISC, NULL, "rx link error"), - _ENTRY(rxerroff, MISC, NULL, "rx offload error"), - _ENTRY(rxonperrshort, MISC, NULL, "rx onp fixup short error"), - _ENTRY(rxonperrpreamble, MISC, NULL, "rx onp fixup preamble error"), - _ENTRY(rxonperrcrc, MISC, NULL, "rx onp fixup crc error"), - _ENTRY(rxonperraddress, MISC, NULL, "rx onp fixup address error"), - _ENTRY(rxonponp, MISC, NULL, "rx onp fixup onp packets"), - _ENTRY(rxonpok, MISC, NULL, "rx onp fixup success packets"), - _ENTRY(tx, MISC, NULL, "tx"), - _ENTRY(txadd, MISC, NULL, "tx add"), - _ENTRY(txbufcballoc, MISC, NULL, "tx buf cb alloc"), - _ENTRY(txbufcbget, MISC, NULL, "tx buf cb get"), - _ENTRY(txbufgballoc, MISC, NULL, "tx buf gb alloc"), - _ENTRY(txbufgbget, MISC, NULL, "tx buf gb get"), - _ENTRY(txbufgbput, MISC, NULL, "tx buf gb put"), - _ENTRY(txdel, MISC, NULL, "tx del"), - _ENTRY(txerr, MISC, NULL, "tx error"), - _ENTRY(txerrcmd, MISC, NULL, "tx cmd error"), - _ENTRY(txerrgbuf, MISC, NULL, "tx gbuf error"), - _ENTRY(txerrlink, MISC, NULL, "tx link error"), - _ENTRY(txerrmkcmd, MISC, NULL, "tx makecmd error"), -#undef _ENTRY -}; -#endif - /* ---- buffer management */ static const struct cnmac_pool_param { @@ -384,9 +324,6 @@ cnmac_attach(device_t parent, device_t s sc->sc_rate_recv_fixup_odd_nibble_short_cap.tv_sec = 1; sc->sc_rate_recv_fixup_odd_nibble_preamble_cap.tv_sec = 1; sc->sc_rate_recv_fixup_odd_nibble_crc_cap.tv_sec = 1; -#ifdef CNMAC_DEBUG - sc->sc_rate_recv_fixup_odd_nibble_addr_cap.tv_sec = 1; -#endif /* XXX */ #if 1 @@ -398,9 +335,6 @@ cnmac_attach(device_t parent, device_t s = octpow_intr_establish(OCTEON_POW_GROUP_PIP, IPL_NET, cnmac_recv_intr, NULL, NULL); - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octeon_evcnt_entries, - device_xname(sc->sc_dev)); - dict = device_properties(sc->sc_gmx->sc_dev); clk = prop_dictionary_get(dict, "rgmii-tx"); @@ -598,7 +532,8 @@ cnmac_mediastatus(struct ifnet *ifp, str static inline void cnmac_send_queue_flush_prefetch(struct cnmac_softc *sc) { - CNMAC_KASSERT(sc->sc_prefetch == 0); + + KASSERT(sc->sc_prefetch == 0); octfau_op_inc_fetch_8(&sc->sc_fau_done, 0); sc->sc_prefetch = 1; } @@ -606,13 +541,10 @@ cnmac_send_queue_flush_prefetch(struct c static inline void cnmac_send_queue_flush_fetch(struct cnmac_softc *sc) { -#ifndef CNMAC_DEBUG - if (!sc->sc_prefetch) - return; -#endif - CNMAC_KASSERT(sc->sc_prefetch == 1); + + KASSERT(sc->sc_prefetch == 1); sc->sc_hard_done_cnt = octfau_op_inc_read_8(&sc->sc_fau_done); - CNMAC_KASSERT(sc->sc_hard_done_cnt <= 0); + KASSERT(sc->sc_hard_done_cnt <= 0); sc->sc_prefetch = 0; } @@ -623,8 +555,8 @@ cnmac_send_queue_flush(struct cnmac_soft const int64_t sent_count = sc->sc_hard_done_cnt; int i; - CNMAC_KASSERT(sc->sc_flush == 0); - CNMAC_KASSERT(sent_count <= 0); + KASSERT(sc->sc_flush == 0); + KASSERT(sent_count <= 0); for (i = 0; i < 0 - sent_count; i++) { struct mbuf *m; @@ -633,7 +565,6 @@ cnmac_send_queue_flush(struct cnmac_soft cnmac_send_queue_del(sc, &m, &gbuf); octfpa_buf_put(cnmac_fb_sg, gbuf); - OCTEON_EVCNT_INC(sc, txbufgbput); m_freem(m); @@ -650,12 +581,12 @@ cnmac_send_queue_flush_sync(struct cnmac if (sc->sc_flush == 0) return; - CNMAC_KASSERT(sc->sc_flush > 0); + KASSERT(sc->sc_flush > 0); /* XXX XXX XXX */ octfau_op_inc_read_8(&sc->sc_fau_done); sc->sc_soft_req_cnt -= sc->sc_flush; - CNMAC_KASSERT(sc->sc_soft_req_cnt >= 0); + KASSERT(sc->sc_soft_req_cnt >= 0); /* XXX XXX XXX */ sc->sc_flush = 0; @@ -671,7 +602,6 @@ cnmac_send_queue_is_full(struct cnmac_so if (__predict_false(nofree_cnt == GATHER_QUEUE_SIZE - 1)) { cnmac_send_queue_flush(sc); - OCTEON_EVCNT_INC(sc, txerrgbuf); cnmac_send_queue_flush_sync(sc); return 1; } @@ -712,8 +642,6 @@ cnmac_send_queue_add(struct cnmac_softc if ((m->m_flags & M_EXT) && m->m_ext.ext_free != NULL) sc->sc_ext_callback_cnt++; - - OCTEON_EVCNT_INC(sc, txadd); } static inline void @@ -722,7 +650,7 @@ cnmac_send_queue_del(struct cnmac_softc struct _send_queue_entry *sqe; sqe = SIMPLEQ_FIRST(&sc->sc_sendq); - CNMAC_KASSERT(sqe != NULL); + KASSERT(sqe != NULL); SIMPLEQ_REMOVE_HEAD(&sc->sc_sendq, _sqe_entry); *rm = (void *)sqe; @@ -730,10 +658,8 @@ cnmac_send_queue_del(struct cnmac_softc if (((*rm)->m_flags & M_EXT) && (*rm)->m_ext.ext_free != NULL) { sc->sc_ext_callback_cnt--; - CNMAC_KASSERT(sc->sc_ext_callback_cnt >= 0); + KASSERT(sc->sc_ext_callback_cnt >= 0); } - - OCTEON_EVCNT_INC(sc, txdel); } static inline int @@ -748,11 +674,9 @@ cnmac_buf_free_work(struct cnmac_softc * start_buffer = addr & ~(2048 - 1); octfpa_buf_put_paddr(cnmac_fb_pkt, start_buffer); - OCTEON_EVCNT_INC(sc, rxbufpkput); } octfpa_buf_put(cnmac_fb_wqe, work); - OCTEON_EVCNT_INC(sc, rxbufwqput); return 0; } @@ -761,17 +685,11 @@ static inline void cnmac_buf_ext_free_m(struct mbuf *m, void *buf, size_t size, void *arg) { uint64_t *work = (void *)arg; -#ifdef CNMAC_DEBUG - struct cnmac_softc *sc = (void *)(uintptr_t)work[0]; -#endif int s = splnet(); - OCTEON_EVCNT_INC(sc, rxrs); - octfpa_buf_put(cnmac_fb_wqe, work); - OCTEON_EVCNT_INC(sc, rxbufwqput); - CNMAC_KASSERT(m != NULL); + KASSERT(m != NULL); pool_cache_put(mb_cache, m); @@ -782,18 +700,13 @@ static inline void cnmac_buf_ext_free_ext(struct mbuf *m, void *buf, size_t size, void *arg) { uint64_t *work = (void *)arg; -#ifdef CNMAC_DEBUG - struct cnmac_softc *sc = (void *)(uintptr_t)work[0]; -#endif int s = splnet(); octfpa_buf_put(cnmac_fb_wqe, work); - OCTEON_EVCNT_INC(sc, rxbufwqput); octfpa_buf_put(cnmac_fb_pkt, buf); - OCTEON_EVCNT_INC(sc, rxbufpkput); - CNMAC_KASSERT(m != NULL); + KASSERT(m != NULL); pool_cache_put(mb_cache, m); @@ -886,7 +799,7 @@ cnmac_send_makecmd_gbuf(struct cnmac_sof continue; #if 0 - CNMAC_KASSERT(((uint32_t)m->m_data & (PAGE_SIZE - 1)) + KASSERT(((uint32_t)m->m_data & (PAGE_SIZE - 1)) == (kvtophys((vaddr_t)m->m_data) & (PAGE_SIZE - 1))); #endif @@ -917,7 +830,7 @@ cnmac_send_makecmd_gbuf(struct cnmac_sof } } - CNMAC_KASSERT(m == NULL); + KASSERT(m == NULL); *rsegs = segs; @@ -984,12 +897,12 @@ cnmac_send_cmd(struct cnmac_softc *sc, u #endif cmdptr += sc->sc_cmdptr.cmdptr_idx; - CNMAC_KASSERT(cmdptr != NULL); + KASSERT(cmdptr != NULL); *cmdptr++ = pko_cmd_w0; *cmdptr++ = pko_cmd_w1; - CNMAC_KASSERT(sc->sc_cmdptr.cmdptr_idx + 2 <= FPA_COMMAND_BUFFER_POOL_NWORDS - 1); + KASSERT(sc->sc_cmdptr.cmdptr_idx + 2 <= FPA_COMMAND_BUFFER_POOL_NWORDS - 1); if (sc->sc_cmdptr.cmdptr_idx + 2 == FPA_COMMAND_BUFFER_POOL_NWORDS - 1) { paddr_t buf; @@ -1002,7 +915,6 @@ cnmac_send_cmd(struct cnmac_softc *sc, u result = 1; goto done; } - OCTEON_EVCNT_INC(sc, txbufcbget); *cmdptr++ = buf; sc->sc_cmdptr.cmdptr = (uint64_t)buf; sc->sc_cmdptr.cmdptr_idx = 0; @@ -1026,7 +938,6 @@ cnmac_send_buf(struct cnmac_softc *sc, s error = cnmac_send_makecmd(sc, m, gbuf, &pko_cmd_w0, &pko_cmd_w1); if (error != 0) { /* Already logging */ - OCTEON_EVCNT_INC(sc, txerrmkcmd); result = error; goto done; } @@ -1034,7 +945,6 @@ cnmac_send_buf(struct cnmac_softc *sc, s error = cnmac_send_cmd(sc, pko_cmd_w0, pko_cmd_w1, pwdc); if (error != 0) { /* Already logging */ - OCTEON_EVCNT_INC(sc, txerrcmd); result = error; } @@ -1049,17 +959,13 @@ cnmac_send(struct cnmac_softc *sc, struc uint64_t *gbuf = NULL; int result = 0, error; - OCTEON_EVCNT_INC(sc, tx); - gaddr = octfpa_buf_get_paddr(cnmac_fb_sg); if (gaddr == 0) { log(LOG_WARNING, "%s: can not allocate gather buffer from " "free pool allocator\n", device_xname(sc->sc_dev)); - OCTEON_EVCNT_INC(sc, txerrgbuf); result = 1; goto done; } - OCTEON_EVCNT_INC(sc, txbufgbget); #ifdef __mips_n32 KASSERT((gaddr & ~MIPS_PHYS_MASK) == 0); @@ -1068,13 +974,12 @@ cnmac_send(struct cnmac_softc *sc, struc gbuf = (uint64_t *)(uintptr_t)MIPS_PHYS_TO_XKPHYS_CACHED(gaddr); #endif - CNMAC_KASSERT(gbuf != NULL); + KASSERT(gbuf != NULL); error = cnmac_send_buf(sc, m, gbuf, pwdc); if (error != 0) { /* Already logging */ octfpa_buf_put_paddr(cnmac_fb_sg, gaddr); - OCTEON_EVCNT_INC(sc, txbufgbput); result = error; goto done; } @@ -1111,7 +1016,6 @@ cnmac_start(struct ifnet *ifp) m_freem(m); IF_DROP(&ifp->if_snd); - OCTEON_EVCNT_INC(sc, txerrlink); } goto last; } @@ -1150,7 +1054,6 @@ cnmac_start(struct ifnet *ifp) log(LOG_WARNING, "%s: failed in the transmission of the packet\n", device_xname(sc->sc_dev)); - OCTEON_EVCNT_INC(sc, txerr); } else sc->sc_soft_req_cnt++; @@ -1323,7 +1226,7 @@ cnmac_recv_mbuf(struct cnmac_softc *sc, MGETHDR(m, M_NOWAIT, MT_DATA); if (m == NULL) return 1; - CNMAC_KASSERT(m != NULL); + KASSERT(m != NULL); if ((word2 & PIP_WQE_WORD2_IP_BUFS) == 0) { /* Dynamic short */ @@ -1355,7 +1258,7 @@ cnmac_recv_mbuf(struct cnmac_softc *sc, work[0] = (uintptr_t)sc; MEXTADD(m, ext_buf, ext_size, 0, ext_free, work); - CNMAC_KASSERT(ISSET(m->m_flags, M_EXT)); + KASSERT(ISSET(m->m_flags, M_EXT)); m->m_data = data; m->m_len = m->m_pkthdr.len = (word1 & PIP_WQE_WORD1_LEN) >> 48; @@ -1366,7 +1269,7 @@ cnmac_recv_mbuf(struct cnmac_softc *sc, *rm = m; - CNMAC_KASSERT(*rm != NULL); + KASSERT(*rm != NULL); return 0; } @@ -1411,7 +1314,6 @@ cnmac_recv_check(struct cnmac_softc *sc, log(LOG_DEBUG, "%s: link is not up, the packet was dropped\n", device_xname(sc->sc_dev)); - OCTEON_EVCNT_INC(sc, rxerrlink); return 1; } @@ -1422,7 +1324,6 @@ cnmac_recv_check(struct cnmac_softc *sc, &sc->sc_rate_recv_check_jumbo_cap)) log(LOG_DEBUG, "jumbo frame was received\n"); - OCTEON_EVCNT_INC(sc, rxerrjmb); return 1; } #endif @@ -1445,7 +1346,6 @@ cnmac_recv_check(struct cnmac_softc *sc, "(error code = %" PRId64 ")\n", device_xname(sc->sc_dev), word2 & PIP_WQE_WORD2_NOIP_OPECODE); } - OCTEON_EVCNT_INC(sc, rxerrcode); return 1; } @@ -1470,15 +1370,13 @@ cnmac_recv(struct cnmac_softc *sc, uint6 } /* XXX XXX XXX */ - CNMAC_KASSERT(sc != NULL); - CNMAC_KASSERT(work != NULL); - - OCTEON_EVCNT_INC(sc, rx); + KASSERT(sc != NULL); + KASSERT(work != NULL); word2 = work[2]; ifp = &sc->sc_ethercom.ec_if; - CNMAC_KASSERT(ifp != NULL); + KASSERT(ifp != NULL); if (__predict_false(cnmac_recv_check(sc, word2) != 0)) { if_statinc(ifp, if_ierrors); @@ -1496,7 +1394,7 @@ cnmac_recv(struct cnmac_softc *sc, uint6 /* work[0] .. work[3] may not be valid any more */ - CNMAC_KASSERT(m != NULL); + KASSERT(m != NULL); octipd_offload(word2, m->m_data, &m->m_pkthdr.csum_flags); @@ -1570,16 +1468,16 @@ cnmac_recv_intr(void *data, uint64_t *wo struct cnmac_softc *sc; int port; - CNMAC_KASSERT(work != NULL); + KASSERT(work != NULL); port = (work[1] & PIP_WQE_WORD1_IPRT) >> 42; - CNMAC_KASSERT(port < GMX_PORT_NUNITS); + KASSERT(port < GMX_PORT_NUNITS); sc = cnmac_gsc[port]; - CNMAC_KASSERT(sc != NULL); - CNMAC_KASSERT(port == sc->sc_port); + KASSERT(sc != NULL); + KASSERT(port == sc->sc_port); /* XXX process all work queue entries anyway */ Index: src/sys/arch/mips/cavium/dev/if_cnmacvar.h diff -u src/sys/arch/mips/cavium/dev/if_cnmacvar.h:1.2 src/sys/arch/mips/cavium/dev/if_cnmacvar.h:1.3 --- src/sys/arch/mips/cavium/dev/if_cnmacvar.h:1.2 Sun May 31 06:27:06 2020 +++ src/sys/arch/mips/cavium/dev/if_cnmacvar.h Mon Jun 22 02:26:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cnmacvar.h,v 1.2 2020/05/31 06:27:06 simonb Exp $ */ +/* $NetBSD: if_cnmacvar.h,v 1.3 2020/06/22 02:26:19 simonb Exp $ */ #undef DEBUG #undef TENBASET_DBG @@ -118,42 +118,5 @@ struct cnmac_softc { struct timeval sc_rate_recv_fixup_odd_nibble_preamble_cap; struct timeval sc_rate_recv_fixup_odd_nibble_crc_last; struct timeval sc_rate_recv_fixup_odd_nibble_crc_cap; -#ifdef CNMAC_DEBUG - struct timeval sc_rate_recv_fixup_odd_nibble_addr_last; - struct timeval sc_rate_recv_fixup_odd_nibble_addr_cap; -#endif int sc_quirks; -#ifdef CNMAC_DEBUG - struct evcnt sc_ev_rx; - struct evcnt sc_ev_rxint; - struct evcnt sc_ev_rxrs; - struct evcnt sc_ev_rxbufpkalloc; - struct evcnt sc_ev_rxbufpkput; - struct evcnt sc_ev_rxbufwqalloc; - struct evcnt sc_ev_rxbufwqput; - struct evcnt sc_ev_rxerrcode; - struct evcnt sc_ev_rxerrfix; - struct evcnt sc_ev_rxerrjmb; - struct evcnt sc_ev_rxerrlink; - struct evcnt sc_ev_rxerroff; - struct evcnt sc_ev_rxonperrshort; - struct evcnt sc_ev_rxonperrpreamble; - struct evcnt sc_ev_rxonperrcrc; - struct evcnt sc_ev_rxonperraddress; - struct evcnt sc_ev_rxonponp; - struct evcnt sc_ev_rxonpok; - struct evcnt sc_ev_tx; - struct evcnt sc_ev_txadd; - struct evcnt sc_ev_txbufcballoc; - struct evcnt sc_ev_txbufcbget; - struct evcnt sc_ev_txbufgballoc; - struct evcnt sc_ev_txbufgbget; - struct evcnt sc_ev_txbufgbput; - struct evcnt sc_ev_txdel; - struct evcnt sc_ev_txerr; - struct evcnt sc_ev_txerrcmd; - struct evcnt sc_ev_txerrgbuf; - struct evcnt sc_ev_txerrlink; - struct evcnt sc_ev_txerrmkcmd; -#endif }; Index: src/sys/arch/mips/cavium/dev/octeon_asx.c diff -u src/sys/arch/mips/cavium/dev/octeon_asx.c:1.2 src/sys/arch/mips/cavium/dev/octeon_asx.c:1.3 --- src/sys/arch/mips/cavium/dev/octeon_asx.c:1.2 Sun May 31 06:27:06 2020 +++ src/sys/arch/mips/cavium/dev/octeon_asx.c Mon Jun 22 02:26:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_asx.c,v 1.2 2020/05/31 06:27:06 simonb Exp $ */ +/* $NetBSD: octeon_asx.c,v 1.3 2020/06/22 02:26:19 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_asx.c,v 1.2 2020/05/31 06:27:06 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_asx.c,v 1.3 2020/06/22 02:26:19 simonb Exp $"); #include "opt_octeon.h" @@ -38,15 +38,6 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_asx.c #include <mips/cavium/dev/octeon_asxreg.h> #include <mips/cavium/dev/octeon_asxvar.h> -#ifdef CNMAC_DEBUG -void octasx_intr_evcnt_attach(struct octasx_softc *); -void octasx_intr_rml(void *); -#endif - -#ifdef CNMAC_DEBUG -struct octasx_softc *__octasx_softc; -#endif - /* XXX */ void octasx_init(struct octasx_attach_args *aa, struct octasx_softc **rsc) @@ -67,12 +58,6 @@ octasx_init(struct octasx_attach_args *a panic("can't map %s space", "asx register"); *rsc = sc; - -#ifdef CNMAC_DEBUG - octasx_intr_evcnt_attach(sc); - if (__octasx_softc == NULL) - __octasx_softc = sc; -#endif } #define _ASX_RD8(sc, off) \ @@ -82,17 +67,11 @@ octasx_init(struct octasx_attach_args *a static int octasx_enable_tx(struct octasx_softc *, int); static int octasx_enable_rx(struct octasx_softc *, int); -#ifdef CNMAC_DEBUG -static int octasx_enable_intr(struct octasx_softc *, int); -#endif int octasx_enable(struct octasx_softc *sc, int enable) { -#ifdef CNMAC_DEBUG - octasx_enable_intr(sc, enable); -#endif octasx_enable_tx(sc, enable); octasx_enable_rx(sc, enable); return 0; @@ -126,56 +105,6 @@ octasx_enable_rx(struct octasx_softc *sc return 0; } -#if defined(CNMAC_DEBUG) -int octasx_intr_rml_verbose; - -static const struct octeon_evcnt_entry octasx_intr_evcnt_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octasx_softc, name, type, parent, descr) - _ENTRY(asxrxpsh, MISC, NULL, "asx tx fifo overflow"), - _ENTRY(asxtxpop, MISC, NULL, "asx tx fifo underflow"), - _ENTRY(asxovrflw, MISC, NULL, "asx rx fifo overflow"), -#undef _ENTRY -}; - -void -octasx_intr_evcnt_attach(struct octasx_softc *sc) -{ - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octasx_intr_evcnt_entries, "asx0"); -} - -void -octasx_intr_rml(void *arg) -{ - struct octasx_softc *sc = __octasx_softc; - uint64_t reg = 0; - - reg = octasx_int_summary(sc); - if (octasx_intr_rml_verbose) - printf("%s: ASX_INT_REG=0x%016" PRIx64 "\n", __func__, reg); - if (reg & ASX0_INT_REG_TXPSH) - OCTEON_EVCNT_INC(sc, asxrxpsh); - if (reg & ASX0_INT_REG_TXPOP) - OCTEON_EVCNT_INC(sc, asxtxpop); - if (reg & ASX0_INT_REG_OVRFLW) - OCTEON_EVCNT_INC(sc, asxovrflw); -} - -static int -octasx_enable_intr(struct octasx_softc *sc, int enable) -{ - uint64_t asx_int_xxx = 0; - - SET(asx_int_xxx, - ASX0_INT_REG_TXPSH | - ASX0_INT_REG_TXPOP | - ASX0_INT_REG_OVRFLW); - _ASX_WR8(sc, ASX0_INT_REG_OFFSET, asx_int_xxx); - _ASX_WR8(sc, ASX0_INT_EN_OFFSET, enable ? asx_int_xxx : 0); - return 0; -} -#endif - int octasx_clk_set(struct octasx_softc *sc, int tx_setting, int rx_setting) { @@ -183,66 +112,3 @@ octasx_clk_set(struct octasx_softc *sc, _ASX_WR8(sc, ASX0_RX_CLK_SET0_OFFSET + 8 * sc->sc_port, rx_setting); return 0; } - -#ifdef CNMAC_DEBUG -uint64_t -octasx_int_summary(struct octasx_softc *sc) -{ - uint64_t summary; - - summary = _ASX_RD8(sc, ASX0_INT_REG_OFFSET); - _ASX_WR8(sc, ASX0_INT_REG_OFFSET, summary); - return summary; -} - -#define _ENTRY(x) { #x, x##_BITS, x##_OFFSET } - -struct octasx_dump_reg_ { - const char *name; - const char *format; - size_t offset; -}; - -void octasx_dump(void); - -static const struct octasx_dump_reg_ octasx_dump_regs_[] = { - _ENTRY(ASX0_RX_PRT_EN), - _ENTRY(ASX0_TX_PRT_EN), - _ENTRY(ASX0_INT_REG), - _ENTRY(ASX0_INT_EN), - _ENTRY(ASX0_RX_CLK_SET0), - _ENTRY(ASX0_RX_CLK_SET1), - _ENTRY(ASX0_RX_CLK_SET2), - _ENTRY(ASX0_PRT_LOOP), - _ENTRY(ASX0_TX_CLK_SET0), - _ENTRY(ASX0_TX_CLK_SET1), - _ENTRY(ASX0_TX_CLK_SET2), - _ENTRY(ASX0_COMP_BYP), - _ENTRY(ASX0_TX_HI_WATER000), - _ENTRY(ASX0_TX_HI_WATER001), - _ENTRY(ASX0_TX_HI_WATER002), - _ENTRY(ASX0_GMII_RX_CLK_SET), - _ENTRY(ASX0_GMII_RX_DAT_SET), - _ENTRY(ASX0_MII_RX_DAT_SET), -}; - -void -octasx_dump(void) -{ - struct octasx_softc *sc = __octasx_softc; - const struct octasx_dump_reg_ *reg; - uint64_t tmp; - char buf[512]; - int i; - - for (i = 0; i < (int)__arraycount(octasx_dump_regs_); i++) { - reg = &octasx_dump_regs_[i]; - tmp = _ASX_RD8(sc, reg->offset); - if (reg->format == NULL) - snprintf(buf, sizeof(buf), "%016" PRIx64, tmp); - else - snprintb(buf, sizeof(buf), reg->format, tmp); - printf("\t%-24s: %s\n", reg->name, buf); - } -} -#endif Index: src/sys/arch/mips/cavium/dev/octeon_ciu.c diff -u src/sys/arch/mips/cavium/dev/octeon_ciu.c:1.2 src/sys/arch/mips/cavium/dev/octeon_ciu.c:1.3 --- src/sys/arch/mips/cavium/dev/octeon_ciu.c:1.2 Sun May 31 06:27:06 2020 +++ src/sys/arch/mips/cavium/dev/octeon_ciu.c Mon Jun 22 02:26:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_ciu.c,v 1.2 2020/05/31 06:27:06 simonb Exp $ */ +/* $NetBSD: octeon_ciu.c,v 1.3 2020/06/22 02:26:19 simonb Exp $ */ /* * Copyright (c) 2008 Internet Initiative Japan, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_ciu.c,v 1.2 2020/05/31 06:27:06 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_ciu.c,v 1.3 2020/06/22 02:26:19 simonb Exp $"); #include "opt_octeon.h" @@ -43,89 +43,4 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_ciu.c #include <mips/cavium/octeonvar.h> #include <mips/cavium/dev/octeon_ciureg.h> -#ifdef CIUDEBUG -#define DPRINTF(x) printf x -#else -#define DPRINTF(x) -#endif - -#ifdef CNMAC_DEBUG -void octciu_dump(void); -void octciu_dump_regs(void); - -#define _ENTRY(x) { #x, x##_BITS, x } - -struct octciu_dump_reg_entry { - const char *name; - const char *format; - paddr_t address; -}; - -static const struct octciu_dump_reg_entry octciu_dump_regs_entries[] = { - _ENTRY(CIU_INT0_SUM0), - _ENTRY(CIU_INT1_SUM0), - _ENTRY(CIU_INT2_SUM0), - _ENTRY(CIU_INT3_SUM0), - _ENTRY(CIU_INT32_SUM0), - _ENTRY(CIU_INT_SUM1), - _ENTRY(CIU_INT0_EN0), - _ENTRY(CIU_INT1_EN0), - _ENTRY(CIU_INT2_EN0), - _ENTRY(CIU_INT3_EN0), - _ENTRY(CIU_INT32_EN0), - _ENTRY(CIU_INT0_EN1), - _ENTRY(CIU_INT1_EN1), - _ENTRY(CIU_INT2_EN1), - _ENTRY(CIU_INT3_EN1), - _ENTRY(CIU_INT32_EN1), - _ENTRY(CIU_TIM0), - _ENTRY(CIU_TIM1), - _ENTRY(CIU_TIM2), - _ENTRY(CIU_TIM3), - _ENTRY(CIU_WDOG0), - _ENTRY(CIU_WDOG1), - /* _ENTRY(CIU_PP_POKE0), */ - /* _ENTRY(CIU_PP_POKE1), */ - _ENTRY(CIU_MBOX_SET0), - _ENTRY(CIU_MBOX_SET1), - _ENTRY(CIU_MBOX_CLR0), - _ENTRY(CIU_MBOX_CLR1), - _ENTRY(CIU_PP_RST), - _ENTRY(CIU_PP_DBG), - _ENTRY(CIU_GSTOP), - _ENTRY(CIU_NMI), - _ENTRY(CIU_DINT), - _ENTRY(CIU_FUSE), - _ENTRY(CIU_BIST), - _ENTRY(CIU_SOFT_BIST), - _ENTRY(CIU_SOFT_RST), - _ENTRY(CIU_SOFT_PRST), - _ENTRY(CIU_PCI_INTA) -}; - -void -octciu_dump(void) -{ - octciu_dump_regs(); -} - -void -octciu_dump_regs(void) -{ - const struct octciu_dump_reg_entry *reg; - uint64_t tmp; - char buf[512]; - int i; - - for (i = 0; i < (int)__arraycount(octciu_dump_regs_entries); i++) { - reg = &octciu_dump_regs_entries[i]; - tmp = octeon_xkphys_read_8(reg->address); - if (reg->format == NULL) { - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - } else { - snprintb(buf, sizeof(buf), reg->format, tmp); - } - printf("\t%-24s: %s\n", reg->name, buf); - } -} -#endif +/* XXX keep this file? */ Index: src/sys/arch/mips/cavium/dev/octeon_asxvar.h diff -u src/sys/arch/mips/cavium/dev/octeon_asxvar.h:1.3 src/sys/arch/mips/cavium/dev/octeon_asxvar.h:1.4 --- src/sys/arch/mips/cavium/dev/octeon_asxvar.h:1.3 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_asxvar.h Mon Jun 22 02:26:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_asxvar.h,v 1.3 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_asxvar.h,v 1.4 2020/06/22 02:26:19 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -34,11 +34,6 @@ struct octasx_softc { int sc_port; bus_space_tag_t sc_regt; bus_space_handle_t sc_regh; -#if defined(OCTEON_DEBUG) || defined(CNMAC_DEBUG) - struct evcnt sc_ev_asxrxpsh; - struct evcnt sc_ev_asxtxpop; - struct evcnt sc_ev_asxovrflw; -#endif }; /* XXX */ Index: src/sys/arch/mips/cavium/dev/octeon_ipdvar.h diff -u src/sys/arch/mips/cavium/dev/octeon_ipdvar.h:1.3 src/sys/arch/mips/cavium/dev/octeon_ipdvar.h:1.4 --- src/sys/arch/mips/cavium/dev/octeon_ipdvar.h:1.3 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_ipdvar.h Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_ipdvar.h,v 1.3 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_ipdvar.h,v 1.4 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -36,13 +36,6 @@ struct octipd_softc { bus_space_handle_t sc_regh; size_t sc_first_mbuff_skip; size_t sc_not_first_mbuff_skip; -#ifdef CNMAC_DEBUG - struct evcnt sc_ev_ipdbpsub; - struct evcnt sc_ev_ipdprcpar3; - struct evcnt sc_ev_ipdprcpar2; - struct evcnt sc_ev_ipdprcpar1; - struct evcnt sc_ev_ipdprcpar0; -#endif }; /* XXX */ @@ -53,20 +46,11 @@ struct octipd_attach_args { size_t aa_not_first_mbuff_skip; }; -void octipd_init(struct octipd_attach_args *, - struct octipd_softc **); -int octipd_enable(struct octipd_softc *); -int octipd_config(struct octipd_softc *); -int octipd_red(struct octipd_softc *, uint64_t, uint64_t); -void octipd_sub_port_fcs(struct octipd_softc *, int); -void octipd_offload(uint64_t, void *, int *); - -#ifdef CNMAC_DEBUG -void octipd_int_enable(struct octipd_softc *, int); -uint64_t octipd_int_summary(struct octipd_softc *); -#endif /* CNMAC_DEBUG */ -#ifdef CNMAC_DEBUG -void octipd_int_enable(struct octipd_softc *, int); -#endif /* CNMAC_DEBUG */ +void octipd_init(struct octipd_attach_args *, struct octipd_softc **); +int octipd_enable(struct octipd_softc *); +int octipd_config(struct octipd_softc *); +int octipd_red(struct octipd_softc *, uint64_t, uint64_t); +void octipd_sub_port_fcs(struct octipd_softc *, int); +void octipd_offload(uint64_t, void *, int *); #endif /* _OCTEON_IPDVAR_H_ */ Index: src/sys/arch/mips/cavium/dev/octeon_pipvar.h diff -u src/sys/arch/mips/cavium/dev/octeon_pipvar.h:1.3 src/sys/arch/mips/cavium/dev/octeon_pipvar.h:1.4 --- src/sys/arch/mips/cavium/dev/octeon_pipvar.h:1.3 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_pipvar.h Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_pipvar.h,v 1.3 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_pipvar.h,v 1.4 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -38,14 +38,6 @@ struct octpip_softc { int sc_tag_type; int sc_receive_group; size_t sc_ip_offset; -#ifdef CNMAC_DEBUG - struct evcnt sc_ev_pipbeperr; - struct evcnt sc_ev_pipfeperr; - struct evcnt sc_ev_pipskprunt; - struct evcnt sc_ev_pipbadtag; - struct evcnt sc_ev_pipprtnxa; - struct evcnt sc_ev_pippktdrp; -#endif }; /* XXX */ @@ -63,16 +55,5 @@ void octpip_gbl_ctl_debug(struct octpip int octpip_port_config(struct octpip_softc *); void octpip_prt_cfg_enable(struct octpip_softc *, uint64_t, int); void octpip_stats(struct octpip_softc *, struct ifnet *, int); -#ifdef CNMAC_DEBUG -void octpip_int_enable(struct octpip_softc *, int); -void octpip_dump(void); -void octpip_dump_regs(void); -void octpip_dump_stats(void); -#endif /* CNMAC_DEBUG */ - -#ifdef CNMAC_DEBUG -void octpip_int_enable(struct octpip_softc *, int); -uint64_t octpip_int_summary(struct octpip_softc *); -#endif /* CNMAC_DEBUG */ #endif /* _OCTEON_PIPVAR_H_ */ Index: src/sys/arch/mips/cavium/dev/octeon_pko.c diff -u src/sys/arch/mips/cavium/dev/octeon_pko.c:1.3 src/sys/arch/mips/cavium/dev/octeon_pko.c:1.4 --- src/sys/arch/mips/cavium/dev/octeon_pko.c:1.3 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_pko.c Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_pko.c,v 1.3 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_pko.c,v 1.4 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_pko.c,v 1.3 2020/06/18 13:52:08 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_pko.c,v 1.4 2020/06/22 02:26:20 simonb Exp $"); #include "opt_octeon.h" @@ -42,20 +42,11 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_pko.c #include <mips/cavium/dev/octeon_pkoreg.h> #include <mips/cavium/dev/octeon_pkovar.h> -#ifdef CNMAC_DEBUG -void octpko_intr_evcnt_attach(struct octpko_softc *); -void octpko_intr_rml(void *); -#endif - #define _PKO_RD8(sc, off) \ bus_space_read_8((sc)->sc_regt, (sc)->sc_regh, (off)) #define _PKO_WR8(sc, off, v) \ bus_space_write_8((sc)->sc_regt, (sc)->sc_regh, (off), (v)) -#ifdef CNMAC_DEBUG -struct octpko_softc *__octpko_softc; -#endif - /* ----- gloal functions */ /* XXX */ @@ -81,11 +72,6 @@ octpko_init(struct octpko_attach_args *a panic("can't map %s space", "pko register"); *rsc = sc; - -#ifdef CNMAC_DEBUG - octpko_intr_evcnt_attach(sc); - __octpko_softc = sc; -#endif } int @@ -125,10 +111,6 @@ octpko_config(struct octpko_softc *sc) SET(reg_cmd_buf, (sc->sc_cmd_buf_pool << 20) & PKO_REG_CMD_BUF_POOL); SET(reg_cmd_buf, sc->sc_cmd_buf_size & PKO_REG_CMD_BUF_SIZE); _PKO_WR8(sc, PKO_REG_CMD_BUF_OFFSET, reg_cmd_buf); - -#ifdef CNMAC_DEBUG - octpko_int_enable(sc, 1); -#endif } int @@ -192,60 +174,3 @@ octpko_port_config(struct octpko_softc * return 0; } - -#ifdef CNMAC_DEBUG -int octpko_intr_rml_verbose; -struct evcnt octpko_intr_evcnt; - -static const struct octeon_evcnt_entry octpko_intr_evcnt_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octpko_softc, name, type, parent, descr) - _ENTRY(pkoerrdbell, MISC, NULL, "pko doorbell overflow"), - _ENTRY(pkoerrparity, MISC, NULL, "pko parity error") -#undef _ENTRY -}; - -void -octpko_intr_evcnt_attach(struct octpko_softc *sc) -{ - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octpko_intr_evcnt_entries, "pko0"); -} - -void -octpko_intr_rml(void *arg) -{ - struct octpko_softc *sc; - uint64_t reg; - - octpko_intr_evcnt.ev_count++; - sc = __octpko_softc; - KASSERT(sc != NULL); - reg = octpko_int_summary(sc); - if (octpko_intr_rml_verbose) - printf("%s: PKO_REG_ERROR=0x%016" PRIx64 "\n", __func__, reg); - if (reg & PKO_REG_ERROR_DOORBELL) - OCTEON_EVCNT_INC(sc, pkoerrdbell); - if (reg & PKO_REG_ERROR_PARITY) - OCTEON_EVCNT_INC(sc, pkoerrparity); -} - -void -octpko_int_enable(struct octpko_softc *sc, int enable) -{ - uint64_t pko_int_xxx = 0; - - pko_int_xxx = PKO_REG_ERROR_DOORBELL | PKO_REG_ERROR_PARITY; - _PKO_WR8(sc, PKO_REG_ERROR_OFFSET, pko_int_xxx); - _PKO_WR8(sc, PKO_REG_INT_MASK_OFFSET, enable ? pko_int_xxx : 0); -} - -uint64_t -octpko_int_summary(struct octpko_softc *sc) -{ - uint64_t summary; - - summary = _PKO_RD8(sc, PKO_REG_ERROR_OFFSET); - _PKO_WR8(sc, PKO_REG_ERROR_OFFSET, summary); - return summary; -} -#endif Index: src/sys/arch/mips/cavium/dev/octeon_fpa.c diff -u src/sys/arch/mips/cavium/dev/octeon_fpa.c:1.6 src/sys/arch/mips/cavium/dev/octeon_fpa.c:1.7 --- src/sys/arch/mips/cavium/dev/octeon_fpa.c:1.6 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_fpa.c Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_fpa.c,v 1.6 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_fpa.c,v 1.7 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -29,7 +29,7 @@ #undef FPADEBUG #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_fpa.c,v 1.6 2020/06/18 13:52:08 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_fpa.c,v 1.7 2020/06/22 02:26:20 simonb Exp $"); #include "opt_octeon.h" @@ -72,17 +72,6 @@ struct octfpa_softc { bus_dma_tag_t sc_dmat; struct octfpa_desc sc_descs[8]; - -#ifdef CNMAC_DEBUG - struct evcnt sc_ev_fpaq7perr; - struct evcnt sc_ev_fpaq7coff; - struct evcnt sc_ev_fpaq7und; - struct evcnt sc_ev_fpaq6perr; - struct evcnt sc_ev_fpaq6coff; - struct evcnt sc_ev_fpaq6und; - struct evcnt sc_ev_fpaq5perr; - struct evcnt sc_ev_fpaq5coff; -#endif }; void octfpa_bootstrap(struct octeon_config *); @@ -95,11 +84,6 @@ static void octfpa_init(struct octfpa_s static uint64_t octfpa_iobdma(struct octfpa_softc *, int, int); #endif -#ifdef CNMAC_DEBUG -void octfpa_intr_evcnt_attach(struct octfpa_softc *); -void octfpa_intr_rml(void *); -#endif - static struct octfpa_softc octfpa_softc; /* ---- global functions */ @@ -122,94 +106,6 @@ octfpa_reset(void) /* XXX */ } -#ifdef CNMAC_DEBUG -int octfpa_intr_rml_verbose; -struct evcnt octfpa_intr_evcnt; - -static const struct octeon_evcnt_entry octfpa_intr_evcnt_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octfpa_softc, name, type, parent, descr) - _ENTRY(fpaq7perr, MISC, NULL, "fpa q7 pointer"), - _ENTRY(fpaq7coff, MISC, NULL, "fpa q7 counter offset"), - _ENTRY(fpaq7und, MISC, NULL, "fpa q7 underflow"), - _ENTRY(fpaq6perr, MISC, NULL, "fpa q6 pointer"), - _ENTRY(fpaq6coff, MISC, NULL, "fpa q6 counter offset"), - _ENTRY(fpaq6und, MISC, NULL, "fpa q6 underflow"), - _ENTRY(fpaq5perr, MISC, NULL, "fpa q5 pointer"), - _ENTRY(fpaq5coff, MISC, NULL, "fpa q5 counter offset"), -#undef _ENTRY -}; - -void -octfpa_intr_evcnt_attach(struct octfpa_softc *sc) -{ - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octfpa_intr_evcnt_entries, "fpa0"); -} - -void -octfpa_intr_rml(void *arg) -{ - struct octfpa_softc *sc; - uint64_t reg; - - octfpa_intr_evcnt.ev_count++; - sc = &octfpa_softc; - KASSERT(sc != NULL); - reg = octfpa_int_summary(); - if (octfpa_intr_rml_verbose) - printf("%s: FPA_INT_SUM=0x%016" PRIx64 "\n", __func__, reg); - if (reg & FPA_INT_SUM_Q7_PERR) - OCTEON_EVCNT_INC(sc, fpaq7perr); - if (reg & FPA_INT_SUM_Q7_COFF) - OCTEON_EVCNT_INC(sc, fpaq7coff); - if (reg & FPA_INT_SUM_Q7_UND) - OCTEON_EVCNT_INC(sc, fpaq7und); - if (reg & FPA_INT_SUM_Q6_PERR) - OCTEON_EVCNT_INC(sc, fpaq6perr); - if (reg & FPA_INT_SUM_Q6_COFF) - OCTEON_EVCNT_INC(sc, fpaq6coff); - if (reg & FPA_INT_SUM_Q6_UND) - OCTEON_EVCNT_INC(sc, fpaq6und); - if (reg & FPA_INT_SUM_Q5_PERR) - OCTEON_EVCNT_INC(sc, fpaq5perr); - if (reg & FPA_INT_SUM_Q5_COFF) - OCTEON_EVCNT_INC(sc, fpaq5coff); -} - -void -octfpa_int_enable(struct octfpa_softc *sc, int enable) -{ - const uint64_t int_xxx = - FPA_INT_ENB_Q7_PERR | FPA_INT_ENB_Q7_COFF | FPA_INT_ENB_Q7_UND | - FPA_INT_ENB_Q6_PERR | FPA_INT_ENB_Q6_COFF | FPA_INT_ENB_Q6_UND | - FPA_INT_ENB_Q5_PERR | FPA_INT_ENB_Q5_COFF | FPA_INT_ENB_Q5_UND | - FPA_INT_ENB_Q4_PERR | FPA_INT_ENB_Q4_COFF | FPA_INT_ENB_Q4_UND | - FPA_INT_ENB_Q3_PERR | FPA_INT_ENB_Q3_COFF | FPA_INT_ENB_Q3_UND | - FPA_INT_ENB_Q2_PERR | FPA_INT_ENB_Q2_COFF | FPA_INT_ENB_Q2_UND | - FPA_INT_ENB_Q1_PERR | FPA_INT_ENB_Q1_COFF | FPA_INT_ENB_Q1_UND | - FPA_INT_ENB_Q0_PERR | FPA_INT_ENB_Q0_COFF | FPA_INT_ENB_Q0_UND | - FPA_INT_ENB_FED1_DBE | FPA_INT_ENB_FED1_SBE | - FPA_INT_ENB_FED0_DBE | FPA_INT_ENB_FED0_SBE; - - bus_space_write_8(sc->sc_regt, sc->sc_regh, FPA_INT_SUM_OFFSET, - int_xxx); - if (enable) - bus_space_write_8(sc->sc_regt, sc->sc_regh, FPA_INT_ENB_OFFSET, - int_xxx); -} - -uint64_t -octfpa_int_summary(void) -{ - struct octfpa_softc *sc = &octfpa_softc; - uint64_t summary; - - summary = bus_space_read_8(sc->sc_regt, sc->sc_regh, FPA_INT_SUM_OFFSET); - bus_space_write_8(sc->sc_regt, sc->sc_regh, FPA_INT_SUM_OFFSET, summary); - return summary; -} -#endif - int octfpa_buf_init(int poolno, size_t size, size_t nelems, struct octfpa_buf **rfb) { @@ -315,10 +211,6 @@ octfpa_init(struct octfpa_softc *sc) octfpa_init_bus(sc); octfpa_init_regs(sc); -#ifdef CNMAC_DEBUG - octfpa_int_enable(sc, 1); - octfpa_intr_evcnt_attach(sc); -#endif } void @@ -348,21 +240,6 @@ octfpa_init_regs(struct octfpa_softc *sc bus_space_write_8(sc->sc_regt, sc->sc_regh, FPA_CTL_STATUS_OFFSET, FPA_CTL_STATUS_ENB); - -/* XXX */ -#ifdef CNMAC_DEBUG - bus_space_write_8(sc->sc_regt, sc->sc_regh, FPA_INT_ENB_OFFSET, - FPA_INT_ENB_Q7_PERR | FPA_INT_ENB_Q7_COFF | FPA_INT_ENB_Q7_UND | - FPA_INT_ENB_Q6_PERR | FPA_INT_ENB_Q6_COFF | FPA_INT_ENB_Q6_UND | - FPA_INT_ENB_Q5_PERR | FPA_INT_ENB_Q5_COFF | FPA_INT_ENB_Q5_UND | - FPA_INT_ENB_Q4_PERR | FPA_INT_ENB_Q4_COFF | FPA_INT_ENB_Q4_UND | - FPA_INT_ENB_Q3_PERR | FPA_INT_ENB_Q3_COFF | FPA_INT_ENB_Q3_UND | - FPA_INT_ENB_Q2_PERR | FPA_INT_ENB_Q2_COFF | FPA_INT_ENB_Q2_UND | - FPA_INT_ENB_Q1_PERR | FPA_INT_ENB_Q1_COFF | FPA_INT_ENB_Q1_UND | - FPA_INT_ENB_Q0_PERR | FPA_INT_ENB_Q0_COFF | FPA_INT_ENB_Q0_UND | - FPA_INT_ENB_FED1_DBE | FPA_INT_ENB_FED1_SBE | - FPA_INT_ENB_FED0_DBE | FPA_INT_ENB_FED0_SBE); -#endif } int @@ -406,113 +283,3 @@ octfpa_available_fpa_pool(int *available return 0; } - -#ifdef CNMAC_DEBUG -void octfpa_dump_regs(void); -void octfpa_dump_bufs(void); -void octfpa_dump_buf(int); - -#define _ENTRY(x) { #x, x##_BITS, x##_OFFSET } - -struct octfpa_dump_reg_ { - const char *name; - const char *format; - size_t offset; -}; - -static const struct octfpa_dump_reg_ octfpa_dump_regs_[] = { - _ENTRY(FPA_INT_SUM), - _ENTRY(FPA_INT_ENB), - _ENTRY(FPA_CTL_STATUS), - _ENTRY(FPA_QUE0_AVAILABLE), - _ENTRY(FPA_QUE1_AVAILABLE), - _ENTRY(FPA_QUE2_AVAILABLE), - _ENTRY(FPA_QUE3_AVAILABLE), - _ENTRY(FPA_QUE4_AVAILABLE), - _ENTRY(FPA_QUE5_AVAILABLE), - _ENTRY(FPA_QUE6_AVAILABLE), - _ENTRY(FPA_QUE7_AVAILABLE), - _ENTRY(FPA_WART_CTL), - _ENTRY(FPA_WART_STATUS), - _ENTRY(FPA_BIST_STATUS), - _ENTRY(FPA_QUE0_PAGE_INDEX), - _ENTRY(FPA_QUE1_PAGE_INDEX), - _ENTRY(FPA_QUE2_PAGE_INDEX), - _ENTRY(FPA_QUE3_PAGE_INDEX), - _ENTRY(FPA_QUE4_PAGE_INDEX), - _ENTRY(FPA_QUE5_PAGE_INDEX), - _ENTRY(FPA_QUE6_PAGE_INDEX), - _ENTRY(FPA_QUE7_PAGE_INDEX), - _ENTRY(FPA_QUE_EXP), - _ENTRY(FPA_QUE_ACT), -}; - -static const char *octfpa_dump_bufs_[8] = { - [0] = "recv", - [1] = "wq", - [2] = "cmdbuf", - [3] = "gbuf", -}; - -void -octfpa_dump(void) -{ - octfpa_dump_regs(); - octfpa_dump_bufs(); -} - -void -octfpa_dump_regs(void) -{ - struct octfpa_softc *sc = &octfpa_softc; - const struct octfpa_dump_reg_ *reg; - uint64_t tmp; - char buf[512]; - int i; - - for (i = 0; i < (int)__arraycount(octfpa_dump_regs_); i++) { - reg = &octfpa_dump_regs_[i]; - tmp = bus_space_read_8(sc->sc_regt, sc->sc_regh, reg->offset); - if (reg->format == NULL) { - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - } else { - snprintb(buf, sizeof(buf), reg->format, tmp); - } - printf("\t%-24s: %s\n", reg->name, buf); - } -} - -/* - * XXX assume pool 7 is unused! - */ -void -octfpa_dump_bufs(void) -{ - int i; - - for (i = 0; i < 8; i++) - octfpa_dump_buf(i); -} - -void -octfpa_dump_buf(int pool) -{ - int i; - uint64_t ptr; - const char *name; - - name = octfpa_dump_bufs_[pool]; - if (name == NULL) - return; - printf("%s pool:\n", name); - for (i = 0; (ptr = octfpa_load(pool)) != 0; i++) { - printf("\t%016" PRIx64 "%s", ptr, ((i % 4) == 3) ? "\n" : ""); - octfpa_store(ptr, OCTEON_POOL_NO_DUMP, 0); - } - if (i % 4 != 3) - printf("\n"); - printf("total = %d buffers\n", i); - while ((ptr = octfpa_load(OCTEON_POOL_NO_DUMP)) != 0) - octfpa_store(ptr, pool, 0); -} -#endif Index: src/sys/arch/mips/cavium/dev/octeon_fpavar.h diff -u src/sys/arch/mips/cavium/dev/octeon_fpavar.h:1.5 src/sys/arch/mips/cavium/dev/octeon_fpavar.h:1.6 --- src/sys/arch/mips/cavium/dev/octeon_fpavar.h:1.5 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_fpavar.h Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_fpavar.h,v 1.5 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_fpavar.h,v 1.6 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -54,10 +54,6 @@ void *octfpa_buf_get(struct octfpa_buf uint64_t octfpa_query(int); int octfpa_available_fpa_pool(int *available, int pool_no); -#ifdef CNMAC_DEBUG -void octfpa_dump(void); -#endif - #define OCTEON_CACHE_LINE_SIZE (128) /* Pool sizes in bytes, must be multiple of a cache line */ Index: src/sys/arch/mips/cavium/dev/octeon_gmxvar.h diff -u src/sys/arch/mips/cavium/dev/octeon_gmxvar.h:1.5 src/sys/arch/mips/cavium/dev/octeon_gmxvar.h:1.6 --- src/sys/arch/mips/cavium/dev/octeon_gmxvar.h:1.5 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_gmxvar.h Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_gmxvar.h,v 1.5 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_gmxvar.h,v 1.6 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -71,32 +71,6 @@ struct octgmx_port_softc { int sc_clk_tx_setting; int sc_clk_rx_setting; - -#if defined(OCTEON_DEBUG) || defined(CNMAC_DEBUG) -#if 0 - /* XXX */ - struct evcnt sc_ev_pausedrp; - struct evcnt sc_ev_phydupx; - struct evcnt sc_ev_physpd; - struct evcnt sc_ev_phylink; -#endif - struct evcnt sc_ev_ifgerr; - struct evcnt sc_ev_coldet; - struct evcnt sc_ev_falerr; - struct evcnt sc_ev_rcverr; - struct evcnt sc_ev_rsverr; - struct evcnt sc_ev_pckterr; - struct evcnt sc_ev_ovrerr; - struct evcnt sc_ev_niberr; - struct evcnt sc_ev_skperr; - struct evcnt sc_ev_lenerr; - struct evcnt sc_ev_alnerr; - struct evcnt sc_ev_fcserr; - struct evcnt sc_ev_jabber; - struct evcnt sc_ev_maxerr; - struct evcnt sc_ev_carext; - struct evcnt sc_ev_minerr; -#endif }; struct octgmx_softc { @@ -110,14 +84,6 @@ struct octgmx_softc { struct octgmx_port_softc *sc_ports; - -#if defined(OCTEON_DEBUG) || defined(CNMAC_DEBUG) - struct evcnt sc_ev_latecol; - struct evcnt sc_ev_xsdef; - struct evcnt sc_ev_xscol; - struct evcnt sc_ev_undflw; - struct evcnt sc_ev_pkonxa; -#endif }; #endif Index: src/sys/arch/mips/cavium/dev/octeon_ipd.c diff -u src/sys/arch/mips/cavium/dev/octeon_ipd.c:1.5 src/sys/arch/mips/cavium/dev/octeon_ipd.c:1.6 --- src/sys/arch/mips/cavium/dev/octeon_ipd.c:1.5 Fri Jun 19 02:23:43 2020 +++ src/sys/arch/mips/cavium/dev/octeon_ipd.c Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_ipd.c,v 1.5 2020/06/19 02:23:43 simonb Exp $ */ +/* $NetBSD: octeon_ipd.c,v 1.6 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_ipd.c,v 1.5 2020/06/19 02:23:43 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_ipd.c,v 1.6 2020/06/22 02:26:20 simonb Exp $"); #include "opt_octeon.h" @@ -53,22 +53,6 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_ipd.c #define IP_OFFSET(data, word2) \ ((uintptr_t)(data) + (uintptr_t)__SHIFTOUT(word2, PIP_WQE_WORD2_IP_OFFSET)) -#ifdef CNMAC_DEBUG -void octipd_intr_evcnt_attach(struct octipd_softc *); -void octipd_intr_rml(void *); -int octipd_intr_drop(void *); - -void octipd_dump(void); - -static void *octipd_intr_drop_ih; -struct evcnt octipd_intr_drop_evcnt = - EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "octeon", - "ipd drop intr"); -EVCNT_ATTACH_STATIC(octipd_intr_drop_evcnt); - -struct octipd_softc *__octipd_softc[3/* XXX */]; -#endif - /* XXX */ void octipd_init(struct octipd_attach_args *aa, struct octipd_softc **rsc) @@ -91,15 +75,6 @@ octipd_init(struct octipd_attach_args *a panic("can't map %s space", "ipd register"); *rsc = sc; - -#ifdef CNMAC_DEBUG - octipd_int_enable(sc, 1); - octipd_intr_evcnt_attach(sc); - if (octipd_intr_drop_ih == NULL) - octipd_intr_drop_ih = octeon_intr_establish(CIU_INT_IPD_DRP, - IPL_NET, octipd_intr_drop, NULL); - __octipd_softc[sc->sc_port] = sc; -#endif /* CNMAC_DEBUG */ } #define _IPD_RD8(sc, off) \ @@ -294,165 +269,3 @@ octipd_sub_port_fcs(struct octipd_softc SET(sub_port_fcs, 1 << sc->sc_port); _IPD_WR8(sc, IPD_SUB_PORT_FCS_OFFSET, sub_port_fcs); } - -#ifdef CNMAC_DEBUG -int octipd_intr_rml_verbose; -struct evcnt octipd_intr_evcnt; - -static const struct octeon_evcnt_entry octipd_intr_evcnt_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octipd_softc, name, type, parent, descr) - _ENTRY(ipdbpsub, MISC, NULL, "ipd backpressure subtract"), - _ENTRY(ipdprcpar3, MISC, NULL, "ipd parity error 127:96"), - _ENTRY(ipdprcpar2, MISC, NULL, "ipd parity error 95:64"), - _ENTRY(ipdprcpar1, MISC, NULL, "ipd parity error 63:32"), - _ENTRY(ipdprcpar0, MISC, NULL, "ipd parity error 31:0"), -#undef _ENTRY -}; - -void -octipd_intr_evcnt_attach(struct octipd_softc *sc) -{ - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octipd_intr_evcnt_entries, "ipd0"); -} - -void -octipd_intr_rml(void *arg) -{ - int i; - - octipd_intr_evcnt.ev_count++; - for (i = 0; i < 3/* XXX */; i++) { - struct octipd_softc *sc; - uint64_t reg; - - sc = __octipd_softc[i]; - KASSERT(sc != NULL); - reg = octipd_int_summary(sc); - if (octipd_intr_rml_verbose) - printf("%s: IPD_INT_SUM=0x%016" PRIx64 "\n", __func__, reg); - if (reg & IPD_INT_SUM_BP_SUB) - OCTEON_EVCNT_INC(sc, ipdbpsub); - if (reg & IPD_INT_SUM_PRC_PAR3) - OCTEON_EVCNT_INC(sc, ipdprcpar3); - if (reg & IPD_INT_SUM_PRC_PAR2) - OCTEON_EVCNT_INC(sc, ipdprcpar2); - if (reg & IPD_INT_SUM_PRC_PAR1) - OCTEON_EVCNT_INC(sc, ipdprcpar1); - if (reg & IPD_INT_SUM_PRC_PAR0) - OCTEON_EVCNT_INC(sc, ipdprcpar0); - } -} - -void -octipd_int_enable(struct octipd_softc *sc, int enable) -{ - uint64_t ipd_int_xxx = 0; - - SET(ipd_int_xxx, - IPD_INT_SUM_BP_SUB | - IPD_INT_SUM_PRC_PAR3 | - IPD_INT_SUM_PRC_PAR2 | - IPD_INT_SUM_PRC_PAR1 | - IPD_INT_SUM_PRC_PAR0); - _IPD_WR8(sc, IPD_INT_SUM_OFFSET, ipd_int_xxx); - _IPD_WR8(sc, IPD_INT_ENB_OFFSET, enable ? ipd_int_xxx : 0); -} - -uint64_t -octipd_int_summary(struct octipd_softc *sc) -{ - uint64_t summary; - - summary = _IPD_RD8(sc, IPD_INT_SUM_OFFSET); - _IPD_WR8(sc, IPD_INT_SUM_OFFSET, summary); - return summary; -} - -int -octipd_intr_drop(void *arg) -{ - octeon_write_csr(CIU_INT0_SUM0, CIU_INTX_SUM0_IPD_DRP); - octipd_intr_drop_evcnt.ev_count++; - return (1); -} - -#define _ENTRY(x) { #x, x##_BITS, x##_OFFSET } - -struct octipd_dump_reg { - const char *name; - const char *format; - size_t offset; -}; - -static const struct octipd_dump_reg octipd_dump_regs[] = { - _ENTRY(IPD_1ST_MBUFF_SKIP), - _ENTRY(IPD_NOT_1ST_MBUFF_SKIP), - _ENTRY(IPD_PACKET_MBUFF_SIZE), - _ENTRY(IPD_CTL_STATUS), - _ENTRY(IPD_WQE_FPA_QUEUE), - _ENTRY(IPD_PORT0_BP_PAGE_CNT), - _ENTRY(IPD_PORT1_BP_PAGE_CNT), - _ENTRY(IPD_PORT2_BP_PAGE_CNT), - _ENTRY(IPD_PORT32_BP_PAGE_CNT), - _ENTRY(IPD_SUB_PORT_BP_PAGE_CNT), - _ENTRY(IPD_1ST_NEXT_PTR_BACK), - _ENTRY(IPD_2ND_NEXT_PTR_BACK), - _ENTRY(IPD_INT_ENB), - _ENTRY(IPD_INT_SUM), - _ENTRY(IPD_SUB_PORT_FCS), - _ENTRY(IPD_QOS0_RED_MARKS), - _ENTRY(IPD_QOS1_RED_MARKS), - _ENTRY(IPD_QOS2_RED_MARKS), - _ENTRY(IPD_QOS3_RED_MARKS), - _ENTRY(IPD_QOS4_RED_MARKS), - _ENTRY(IPD_QOS5_RED_MARKS), - _ENTRY(IPD_QOS6_RED_MARKS), - _ENTRY(IPD_QOS7_RED_MARKS), - _ENTRY(IPD_PORT_BP_COUNTERS_PAIR0), - _ENTRY(IPD_PORT_BP_COUNTERS_PAIR1), - _ENTRY(IPD_PORT_BP_COUNTERS_PAIR2), - _ENTRY(IPD_PORT_BP_COUNTERS_PAIR32), - _ENTRY(IPD_RED_PORT_ENABLE), - _ENTRY(IPD_RED_QUE0_PARAM), - _ENTRY(IPD_RED_QUE1_PARAM), - _ENTRY(IPD_RED_QUE2_PARAM), - _ENTRY(IPD_RED_QUE3_PARAM), - _ENTRY(IPD_RED_QUE4_PARAM), - _ENTRY(IPD_RED_QUE5_PARAM), - _ENTRY(IPD_RED_QUE6_PARAM), - _ENTRY(IPD_RED_QUE7_PARAM), - _ENTRY(IPD_PTR_COUNT), - _ENTRY(IPD_BP_PRT_RED_END), - _ENTRY(IPD_QUE0_FREE_PAGE_CNT), - _ENTRY(IPD_CLK_COUNT), - _ENTRY(IPD_PWP_PTR_FIFO_CTL), - _ENTRY(IPD_PRC_HOLD_PTR_FIFO_CTL), - _ENTRY(IPD_PRC_PORT_PTR_FIFO_CTL), - _ENTRY(IPD_PKT_PTR_VALID), - _ENTRY(IPD_WQE_PTR_VALID), - _ENTRY(IPD_BIST_STATUS), -}; - -void -octipd_dump(void) -{ - struct octipd_softc *sc; - const struct octipd_dump_reg *reg; - uint64_t tmp; - char buf[512]; - int i; - - sc = __octipd_softc[0]; - for (i = 0; i < (int)__arraycount(octipd_dump_regs); i++) { - reg = &octipd_dump_regs[i]; - tmp = _IPD_RD8(sc, reg->offset); - if (reg->format == NULL) { - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - } else { - snprintb(buf, sizeof(buf), reg->format, tmp); - } - printf("%-32s: %s\n", reg->name, buf); - } -} -#endif /* CNMAC_DEBUG */ Index: src/sys/arch/mips/cavium/dev/octeon_pip.c diff -u src/sys/arch/mips/cavium/dev/octeon_pip.c:1.5 src/sys/arch/mips/cavium/dev/octeon_pip.c:1.6 --- src/sys/arch/mips/cavium/dev/octeon_pip.c:1.5 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_pip.c Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_pip.c,v 1.5 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_pip.c,v 1.6 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_pip.c,v 1.5 2020/06/18 13:52:08 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_pip.c,v 1.6 2020/06/22 02:26:20 simonb Exp $"); #include "opt_octeon.h" @@ -42,16 +42,6 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_pip.c #include <mips/cavium/dev/octeon_pipreg.h> #include <mips/cavium/dev/octeon_pipvar.h> -#ifdef CNMAC_DEBUG -struct octpip_softc *__octpip_softc; - -void octpip_intr_evcnt_attach(struct octpip_softc *); -void octpip_intr_rml(void *); - -void octpip_dump(void); -void octpip_int_enable(struct octpip_softc *, int); -#endif - /* * register definitions (for debug and statics) */ @@ -88,27 +78,6 @@ static const struct octpip_dump_reg_ oct _ENTRY_0_1_2_32 (PIP_STAT_INB_ERRS), }; -#ifdef CNMAC_DEBUG -static const struct octpip_dump_reg_ octpip_dump_regs_[] = { - _ENTRY (PIP_BIST_STATUS), - _ENTRY (PIP_INT_REG), - _ENTRY (PIP_INT_EN), - _ENTRY (PIP_STAT_CTL), - _ENTRY (PIP_GBL_CTL), - _ENTRY (PIP_GBL_CFG), - _ENTRY (PIP_SOFT_RST), - _ENTRY (PIP_IP_OFFSET), - _ENTRY (PIP_TAG_SECRET), - _ENTRY (PIP_TAG_MASK), - _ENTRY_0_3 (PIP_DEC_IPSEC), - _ENTRY (PIP_RAW_WORD), - _ENTRY_0_7 (PIP_QOS_VLAN), - _ENTRY_0_3 (PIP_QOS_WATCH), - _ENTRY_0_1_2_32 (PIP_PRT_CFG), - _ENTRY_0_1_2_32 (PIP_PRT_TAG), -}; -#endif - #undef _ENTRY #undef _ENTRY_0_3 #undef _ENTRY_0_7 @@ -137,13 +106,6 @@ octpip_init(struct octpip_attach_args *a panic("can't map %s space", "pip register"); *rsc = sc; - -#ifdef CNMAC_DEBUG - octpip_int_enable(sc, 1); - octpip_intr_evcnt_attach(sc); - __octpip_softc = sc; - printf("PIP Code initialized.\n"); -#endif } #define _PIP_RD8(sc, off) \ @@ -247,152 +209,3 @@ octpip_stats(struct octpip_softc *sc, st _PIP_WR8(sc, PIP_STAT_CTL_OFFSET, pip_stat_ctl); } - - -#ifdef CNMAC_DEBUG -int octpip_intr_rml_verbose; -struct evcnt octpip_intr_evcnt; - -static const struct octeon_evcnt_entry octpip_intr_evcnt_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octpip_softc, name, type, parent, descr) - _ENTRY(pipbeperr, MISC, NULL, "pip parity error backend"), - _ENTRY(pipfeperr, MISC, NULL, "pip parity error frontend"), - _ENTRY(pipskprunt, MISC, NULL, "pip skiper"), - _ENTRY(pipbadtag, MISC, NULL, "pip bad tag"), - _ENTRY(pipprtnxa, MISC, NULL, "pip nonexistent port"), - _ENTRY(pippktdrp, MISC, NULL, "pip qos drop"), -#undef _ENTRY -}; - -void -octpip_intr_evcnt_attach(struct octpip_softc *sc) -{ - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octpip_intr_evcnt_entries, "pip0"); -} - -void -octpip_intr_rml(void *arg) -{ - struct octpip_softc *sc; - uint64_t reg; - - octpip_intr_evcnt.ev_count++; - sc = __octpip_softc; - KASSERT(sc != NULL); - reg = octpip_int_summary(sc); - if (octpip_intr_rml_verbose) - printf("%s: PIP_INT_REG=0x%016" PRIx64 "\n", __func__, reg); - if (reg & PIP_INT_REG_BEPERR) - OCTEON_EVCNT_INC(sc, pipbeperr); - if (reg & PIP_INT_REG_FEPERR) - OCTEON_EVCNT_INC(sc, pipfeperr); - if (reg & PIP_INT_REG_SKPRUNT) - OCTEON_EVCNT_INC(sc, pipskprunt); - if (reg & PIP_INT_REG_BADTAG) - OCTEON_EVCNT_INC(sc, pipbadtag); - if (reg & PIP_INT_REG_PRTNXA) - OCTEON_EVCNT_INC(sc, pipprtnxa); - if (reg & PIP_INT_REG_PKTDRP) - OCTEON_EVCNT_INC(sc, pippktdrp); -} - -void octpip_dump_regs(void); -void octpip_dump_stats(void); - -void -octpip_dump(void) -{ - octpip_dump_regs(); - octpip_dump_stats(); -} - -void -octpip_dump_regs(void) -{ - struct octpip_softc *sc = __octpip_softc; - const struct octpip_dump_reg_ *reg; - uint64_t tmp; - char buf[512]; - int i; - - for (i = 0; i < (int)__arraycount(octpip_dump_regs_); i++) { - reg = &octpip_dump_regs_[i]; - tmp = _PIP_RD8(sc, reg->offset); - if (reg->format == NULL) { - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - } else { - snprintb(buf, sizeof(buf), reg->format, tmp); - } - printf("\t%-24s: %s\n", reg->name, buf); - } -} - -void -octpip_dump_stats(void) -{ - struct octpip_softc *sc = __octpip_softc; - const struct octpip_dump_reg_ *reg; - uint64_t tmp; - char buf[512]; - int i; - uint64_t pip_stat_ctl; - - pip_stat_ctl = _PIP_RD8(sc, PIP_STAT_CTL_OFFSET); - _PIP_WR8(sc, PIP_STAT_CTL_OFFSET, pip_stat_ctl & ~PIP_STAT_CTL_RDCLR); - for (i = 0; i < (int)__arraycount(octpip_dump_stats_); i++) { - reg = &octpip_dump_stats_[i]; - tmp = _PIP_RD8(sc, reg->offset); - if (reg->format == NULL) { - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - } else { - snprintb(buf, sizeof(buf), reg->format, tmp); - } - printf("\t%-24s: %s\n", reg->name, buf); - } - printf("\t%-24s:\n", "PIP_QOS_DIFF[0-63]"); - for (i = 0; i < 64; i++) { - tmp = _PIP_RD8(sc, PIP_QOS_DIFF0_OFFSET + sizeof(uint64_t) * i); - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - printf("%s\t%s%s", - ((i % 4) == 0) ? "\t" : "", - buf, - ((i % 4) == 3) ? "\n" : ""); - } - printf("\t%-24s:\n", "PIP_TAG_INC[0-63]"); - for (i = 0; i < 64; i++) { - tmp = _PIP_RD8(sc, PIP_TAG_INC0_OFFSET + sizeof(uint64_t) * i); - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - printf("%s\t%s%s", - ((i % 4) == 0) ? "\t" : "", - buf, - ((i % 4) == 3) ? "\n" : ""); - } - _PIP_WR8(sc, PIP_STAT_CTL_OFFSET, pip_stat_ctl); -} - -void -octpip_int_enable(struct octpip_softc *sc, int enable) -{ - uint64_t pip_int_xxx = 0; - - SET(pip_int_xxx, - PIP_INT_EN_BEPERR | - PIP_INT_EN_FEPERR | - PIP_INT_EN_SKPRUNT | - PIP_INT_EN_BADTAG | - PIP_INT_EN_PRTNXA | - PIP_INT_EN_PKTDRP); - _PIP_WR8(sc, PIP_INT_REG_OFFSET, pip_int_xxx); - _PIP_WR8(sc, PIP_INT_EN_OFFSET, enable ? pip_int_xxx : 0); -} -uint64_t -octpip_int_summary(struct octpip_softc *sc) -{ - uint64_t summary; - - summary = _PIP_RD8(sc, PIP_INT_REG_OFFSET); - _PIP_WR8(sc, PIP_INT_REG_OFFSET, summary); - return summary; -} -#endif /* CNMAC_DEBUG */ Index: src/sys/arch/mips/cavium/dev/octeon_powvar.h diff -u src/sys/arch/mips/cavium/dev/octeon_powvar.h:1.5 src/sys/arch/mips/cavium/dev/octeon_powvar.h:1.6 --- src/sys/arch/mips/cavium/dev/octeon_powvar.h:1.5 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_powvar.h Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_powvar.h,v 1.5 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_powvar.h,v 1.6 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -57,25 +57,6 @@ struct octpow_softc { bus_space_handle_t sc_regh; int sc_port; int sc_int_pc_base; -#ifdef CNMAC_DEBUG - struct evcnt sc_ev_powecciopcsrpend; - struct evcnt sc_ev_powecciopdbgpend; - struct evcnt sc_ev_powecciopaddwork; - struct evcnt sc_ev_powecciopillop; - struct evcnt sc_ev_poweccioppend24; - struct evcnt sc_ev_poweccioppend23; - struct evcnt sc_ev_poweccioppend22; - struct evcnt sc_ev_poweccioppend21; - struct evcnt sc_ev_poweccioptagnull; - struct evcnt sc_ev_poweccioptagnullnull; - struct evcnt sc_ev_powecciopordatom; - struct evcnt sc_ev_powecciopnull; - struct evcnt sc_ev_powecciopnullnull; - struct evcnt sc_ev_poweccrpe; - struct evcnt sc_ev_poweccsyn; - struct evcnt sc_ev_poweccdbe; - struct evcnt sc_ev_poweccsbe; -#endif }; /* XXX */ Index: src/sys/arch/mips/cavium/dev/octeon_gmx.c diff -u src/sys/arch/mips/cavium/dev/octeon_gmx.c:1.13 src/sys/arch/mips/cavium/dev/octeon_gmx.c:1.14 --- src/sys/arch/mips/cavium/dev/octeon_gmx.c:1.13 Fri Jun 19 02:23:43 2020 +++ src/sys/arch/mips/cavium/dev/octeon_gmx.c Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_gmx.c,v 1.13 2020/06/19 02:23:43 simonb Exp $ */ +/* $NetBSD: octeon_gmx.c,v 1.14 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_gmx.c,v 1.13 2020/06/19 02:23:43 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_gmx.c,v 1.14 2020/06/22 02:26:20 simonb Exp $"); #include "opt_octeon.h" @@ -110,13 +110,6 @@ static int octgmx_rgmii_set_mac_addr(str uint64_t); static int octgmx_rgmii_set_filter(struct octgmx_port_softc *); -#ifdef CNMAC_DEBUG -void octgmx_intr_evcnt_attach(struct octgmx_softc *); -void octgmx_dump(void); -void octgmx_debug_reset(void); -int octgmx_intr_drop(void *); -#endif - static const int octgmx_rx_adr_cam_regs[] = { GMX0_RX0_ADR_CAM0, GMX0_RX0_ADR_CAM1, GMX0_RX0_ADR_CAM2, GMX0_RX0_ADR_CAM3, GMX0_RX0_ADR_CAM4, GMX0_RX0_ADR_CAM5 @@ -153,20 +146,6 @@ struct octgmx_port_ops *octgmx_port_ops[ [GMX_SPI42_PORT] = &octgmx_port_ops_spi42 }; -#ifdef CNMAC_DEBUG -static void *octgmx_intr_drop_ih; -struct evcnt octgmx_intr_drop_evcnt = - EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "octeon", - "gmx drop intr"); -struct evcnt octgmx_intr_evcnt = - EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "octeon", - "gmx intr"); -EVCNT_ATTACH_STATIC(octgmx_intr_drop_evcnt); -EVCNT_ATTACH_STATIC(octgmx_intr_evcnt); - -struct octgmx_port_softc *__octgmx_port_softc[3/* XXX */]; -#endif - CFATTACH_DECL_NEW(octgmx, sizeof(struct octgmx_softc), octgmx_match, octgmx_attach, NULL, NULL); @@ -230,18 +209,7 @@ octgmx_attach(device_t parent, device_t gmx_aa.ga_gmx_port = port_sc; config_found_sm_loc(self, "octgmx", NULL, &gmx_aa, octgmx_print, octgmx_submatch); - -#ifdef CNMAC_DEBUG - __octgmx_port_softc[i] = port_sc; -#endif } - -#ifdef CNMAC_DEBUG - octgmx_intr_evcnt_attach(sc); - if (octgmx_intr_drop_ih == NULL) - octgmx_intr_drop_ih = octeon_intr_establish(CIU_INT_GMX_DRP, - IPL_NET, octgmx_intr_drop, NULL); -#endif } static int @@ -1172,454 +1140,3 @@ octgmx_setfilt_addrs(struct octgmx_port_ return 0; } #endif - -/* ---- interrupt */ - -#ifdef CNMAC_DEBUG -void octgmx_intr_rml_gmx0(void); - -int octgmx_intr_rml_verbose; - -/* tx - per unit (gmx0, gmx1, ...) */ -static const struct octeon_evcnt_entry octgmx_intr_evcnt_tx_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octgmx_softc, name, type, parent, descr) - _ENTRY(latecol, MISC, NULL, "tx late collision"), - _ENTRY(xsdef, MISC, NULL, "tx excessive deferral"), - _ENTRY(xscol, MISC, NULL, "tx excessive collision"), - _ENTRY(undflw, MISC, NULL, "tx underflow"), - _ENTRY(pkonxa, MISC, NULL, "tx port addr out-of-range") -#undef _ENTRY -}; - -/* rx - per port (gmx0:0, gmx0:1, ...) */ -static const struct octeon_evcnt_entry octgmx_intr_evcnt_rx_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octgmx_port_softc, name, type, parent, descr) - _ENTRY(minerr, MISC, NULL, "rx min error"), - _ENTRY(carext, MISC, NULL, "rx carrier error"), - _ENTRY(maxerr, MISC, NULL, "rx max error"), - _ENTRY(jabber, MISC, NULL, "rx jabber error"), - _ENTRY(fcserr, MISC, NULL, "rx fcs error"), - _ENTRY(alnerr, MISC, NULL, "rx align error"), - _ENTRY(lenerr, MISC, NULL, "rx length error"), - _ENTRY(rcverr, MISC, NULL, "rx receive error"), - _ENTRY(skperr, MISC, NULL, "rx skip error"), - _ENTRY(niberr, MISC, NULL, "rx nibble error"), - _ENTRY(ovrerr, MISC, NULL, "rx overflow error"), - _ENTRY(pckterr, MISC, NULL, "rx packet error"), - _ENTRY(rsverr, MISC, NULL, "rx reserved opcode error"), - _ENTRY(falerr, MISC, NULL, "rx false carrier error"), - _ENTRY(coldet, MISC, NULL, "rx collision detect"), - _ENTRY(ifgerr, MISC, NULL, "rx ifg error") -#undef _ENTRY -}; - -void -octgmx_intr_evcnt_attach(struct octgmx_softc *sc) -{ - struct octgmx_port_softc *port_sc; - int i; - - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octgmx_intr_evcnt_tx_entries, - device_xname(sc->sc_dev)); - for (i = 0; i < sc->sc_nports; i++) { - port_sc = &sc->sc_ports[i]; - OCTEON_EVCNT_ATTACH_EVCNTS(port_sc, octgmx_intr_evcnt_rx_entries, - device_xname(sc->sc_dev)); - } -} - -void -octgmx_intr_rml_gmx0(void) -{ - struct octgmx_port_softc *sc = NULL/* XXX gcc */; - int i; - uint64_t reg = 0/* XXX gcc */; - - octgmx_intr_evcnt.ev_count++; - - sc = __octgmx_port_softc[0]; - if (sc == NULL) - return; - - /* GMX0_RXn_INT_REG or GMX0_TXn_INT_REG */ - reg = octgmx_get_tx_int_reg(sc); - if (octgmx_intr_rml_verbose && reg != 0) - printf("%s: GMX_TX_INT_REG=0x%016" PRIx64 "\n", __func__, reg); - if (reg & TX_INT_REG_LATE_COL) - OCTEON_EVCNT_INC(sc->sc_port_gmx, latecol); - if (reg & TX_INT_REG_XSDEF) - OCTEON_EVCNT_INC(sc->sc_port_gmx, xsdef); - if (reg & TX_INT_REG_XSCOL) - OCTEON_EVCNT_INC(sc->sc_port_gmx, xscol); - if (reg & TX_INT_REG_UNDFLW) - OCTEON_EVCNT_INC(sc->sc_port_gmx, undflw); - if (reg & TX_INT_REG_PKO_NXA) - OCTEON_EVCNT_INC(sc->sc_port_gmx, pkonxa); - - for (i = 0; i < GMX_PORT_NUNITS; i++) { - sc = __octgmx_port_softc[i]; - if (sc == NULL) - continue; - reg = octgmx_get_rx_int_reg(sc); - if (octgmx_intr_rml_verbose) - printf("%s: GMX_RX_INT_REG=0x%016" PRIx64 "\n", __func__, reg); - if (reg & RXN_INT_REG_MINERR) - OCTEON_EVCNT_INC(sc, minerr); - if (reg & RXN_INT_REG_CAREXT) - OCTEON_EVCNT_INC(sc, carext); - if (reg & RXN_INT_REG_JABBER) - OCTEON_EVCNT_INC(sc, jabber); - if (reg & RXN_INT_REG_FCSERR) - OCTEON_EVCNT_INC(sc, fcserr); - if (reg & RXN_INT_REG_ALNERR) - OCTEON_EVCNT_INC(sc, alnerr); - if (reg & RXN_INT_REG_LENERR) - OCTEON_EVCNT_INC(sc, lenerr); - if (reg & RXN_INT_REG_RCVERR) - OCTEON_EVCNT_INC(sc, rcverr); - if (reg & RXN_INT_REG_SKPERR) - OCTEON_EVCNT_INC(sc, skperr); - if (reg & RXN_INT_REG_NIBERR) - OCTEON_EVCNT_INC(sc, niberr); - if (reg & RXN_INT_REG_OVRERR) - OCTEON_EVCNT_INC(sc, ovrerr); - if (reg & RXN_INT_REG_PCTERR) - OCTEON_EVCNT_INC(sc, pckterr); - if (reg & RXN_INT_REG_RSVERR) - OCTEON_EVCNT_INC(sc, rsverr); - if (reg & RXN_INT_REG_FALERR) - OCTEON_EVCNT_INC(sc, falerr); - if (reg & RXN_INT_REG_COLDET) - OCTEON_EVCNT_INC(sc, coldet); - if (reg & RXN_INT_REG_IFGERR) - OCTEON_EVCNT_INC(sc, ifgerr); - } -} - -#ifdef notyet -void -octgmx_intr_rml_gmx1(void) -{ - uint64_t reg = 0/* XXX gcc */; - - /* GMX1_RXn_INT_REG or GMX1_TXn_INT_REG */ -} -#endif - -int -octgmx_intr_drop(void *arg) -{ - octeon_write_csr(CIU_INT0_SUM0, CIU_INTX_SUM0_GMX_DRP); - octgmx_intr_drop_evcnt.ev_count++; - return (1); -} - -uint64_t -octgmx_get_rx_int_reg(struct octgmx_port_softc *sc) -{ - uint64_t reg; - uint64_t rx_int_reg = 0; - - reg = _GMX_PORT_RD8(sc, GMX0_RX0_INT_REG); - /* clear */ - SET(rx_int_reg, 0 | - RXN_INT_REG_PHY_DUPX | - RXN_INT_REG_PHY_SPD | - RXN_INT_REG_PHY_LINK | - RXN_INT_REG_IFGERR | - RXN_INT_REG_COLDET | - RXN_INT_REG_FALERR | - RXN_INT_REG_RSVERR | - RXN_INT_REG_PCTERR | - RXN_INT_REG_OVRERR | - RXN_INT_REG_NIBERR | - RXN_INT_REG_SKPERR | - RXN_INT_REG_RCVERR | - RXN_INT_REG_LENERR | - RXN_INT_REG_ALNERR | - RXN_INT_REG_FCSERR | - RXN_INT_REG_JABBER | - RXN_INT_REG_MAXERR | - RXN_INT_REG_CAREXT | - RXN_INT_REG_MINERR); - _GMX_PORT_WR8(sc, GMX0_RX0_INT_REG, rx_int_reg); - - return reg; -} - -uint64_t -octgmx_get_tx_int_reg(struct octgmx_port_softc *sc) -{ - uint64_t reg; - uint64_t tx_int_reg = 0; - - reg = _GMX_PORT_RD8(sc, GMX0_TX_INT_REG); - /* clear */ - SET(tx_int_reg, 0 | - TX_INT_REG_LATE_COL | - TX_INT_REG_XSDEF | - TX_INT_REG_XSCOL | - TX_INT_REG_UNDFLW | - TX_INT_REG_PKO_NXA); - _GMX_PORT_WR8(sc, GMX0_TX_INT_REG, tx_int_reg); - - return reg; -} -#endif /* CNMAC_DEBUG */ - -/* ---- debug */ - -#ifdef CNMAC_DEBUG -#define _ENTRY(x) { #x, x##_BITS, x } - -struct octgmx_dump_reg_ { - const char *name; - const char *format; - size_t offset; -}; - -static const struct octgmx_dump_reg_ octgmx_dump_regs_[] = { - _ENTRY(GMX0_SMAC0), - _ENTRY(GMX0_BIST0), - _ENTRY(GMX0_RX_PRTS), - _ENTRY(GMX0_RX_BP_DROP0), - _ENTRY(GMX0_RX_BP_DROP1), - _ENTRY(GMX0_RX_BP_DROP2), - _ENTRY(GMX0_RX_BP_ON0), - _ENTRY(GMX0_RX_BP_ON1), - _ENTRY(GMX0_RX_BP_ON2), - _ENTRY(GMX0_RX_BP_OFF0), - _ENTRY(GMX0_RX_BP_OFF1), - _ENTRY(GMX0_RX_BP_OFF2), - _ENTRY(GMX0_TX_PRTS), - _ENTRY(GMX0_TX_IFG), - _ENTRY(GMX0_TX_JAM), - _ENTRY(GMX0_TX_COL_ATTEMPT), - _ENTRY(GMX0_TX_PAUSE_PKT_DMAC), - _ENTRY(GMX0_TX_PAUSE_PKT_TYPE), - _ENTRY(GMX0_TX_OVR_BP), - _ENTRY(GMX0_TX_BP), - _ENTRY(GMX0_TX_CORRUPT), - _ENTRY(GMX0_RX_PRT_INFO), - _ENTRY(GMX0_TX_LFSR), - _ENTRY(GMX0_TX_INT_REG), - _ENTRY(GMX0_TX_INT_EN), - _ENTRY(GMX0_NXA_ADR), - _ENTRY(GMX0_BAD_REG), - _ENTRY(GMX0_STAT_BP), - _ENTRY(GMX0_TX_CLK_MSK0), - _ENTRY(GMX0_TX_CLK_MSK1), - _ENTRY(GMX0_RX_TX_STATUS), - _ENTRY(GMX0_INF_MODE), -}; - -static const struct octgmx_dump_reg_ octgmx_dump_port_regs_[] = { - _ENTRY(GMX0_RX0_INT_REG), - _ENTRY(GMX0_RX0_INT_EN), - _ENTRY(GMX0_PRT0_CFG), - _ENTRY(GMX0_RX0_FRM_CTL), - _ENTRY(GMX0_RX0_FRM_CHK), - _ENTRY(GMX0_RX0_FRM_MIN), - _ENTRY(GMX0_RX0_FRM_MAX), - _ENTRY(GMX0_RX0_JABBER), - _ENTRY(GMX0_RX0_DECISION), - _ENTRY(GMX0_RX0_UDD_SKP), - _ENTRY(GMX0_RX0_STATS_CTL), - _ENTRY(GMX0_RX0_IFG), - _ENTRY(GMX0_RX0_RX_INBND), - _ENTRY(GMX0_RX0_ADR_CTL), - _ENTRY(GMX0_RX0_ADR_CAM_EN), - _ENTRY(GMX0_RX0_ADR_CAM0), - _ENTRY(GMX0_RX0_ADR_CAM1), - _ENTRY(GMX0_RX0_ADR_CAM2), - _ENTRY(GMX0_RX0_ADR_CAM3), - _ENTRY(GMX0_RX0_ADR_CAM4), - _ENTRY(GMX0_RX0_ADR_CAM5), - _ENTRY(GMX0_TX0_CLK), - _ENTRY(GMX0_TX0_THRESH), - _ENTRY(GMX0_TX0_APPEND), - _ENTRY(GMX0_TX0_SLOT), - _ENTRY(GMX0_TX0_BURST), - _ENTRY(GMX0_TX0_PAUSE_PKT_TIME), - _ENTRY(GMX0_TX0_MIN_PKT), - _ENTRY(GMX0_TX0_PAUSE_PKT_INTERVAL), - _ENTRY(GMX0_TX0_SOFT_PAUSE), - _ENTRY(GMX0_TX0_PAUSE_TOGO), - _ENTRY(GMX0_TX0_PAUSE_ZERO), - _ENTRY(GMX0_TX0_STATS_CTL), - _ENTRY(GMX0_TX0_CTL), -}; - -static const struct octgmx_dump_reg_ octgmx_dump_port_stats_[] = { - _ENTRY(GMX0_RX0_STATS_PKTS), - _ENTRY(GMX0_RX0_STATS_OCTS), - _ENTRY(GMX0_RX0_STATS_PKTS_CTL), - _ENTRY(GMX0_RX0_STATS_OCTS_CTL), - _ENTRY(GMX0_RX0_STATS_PKTS_DMAC), - _ENTRY(GMX0_RX0_STATS_OCTS_DMAC), - _ENTRY(GMX0_RX0_STATS_PKTS_DRP), - _ENTRY(GMX0_RX0_STATS_OCTS_DRP), - _ENTRY(GMX0_RX0_STATS_PKTS_BAD), - _ENTRY(GMX0_TX0_STAT0), - _ENTRY(GMX0_TX0_STAT1), - _ENTRY(GMX0_TX0_STAT2), - _ENTRY(GMX0_TX0_STAT3), - _ENTRY(GMX0_TX0_STAT4), - _ENTRY(GMX0_TX0_STAT5), - _ENTRY(GMX0_TX0_STAT6), - _ENTRY(GMX0_TX0_STAT7), - _ENTRY(GMX0_TX0_STAT8), - _ENTRY(GMX0_TX0_STAT9), -}; - -void octgmx_dump_common(void); -void octgmx_dump_port0(void); -void octgmx_dump_port1(void); -void octgmx_dump_port2(void); -void octgmx_dump_port0_regs(void); -void octgmx_dump_port1_regs(void); -void octgmx_dump_port2_regs(void); -void octgmx_dump_port0_stats(void); -void octgmx_dump_port1_stats(void); -void octgmx_dump_port2_stats(void); -void octgmx_dump_port_regs(int); -void octgmx_dump_port_stats(int); -void octgmx_dump_common_x(int, const struct octgmx_dump_reg_ *, size_t); -void octgmx_dump_port_x(int, const struct octgmx_dump_reg_ *, size_t); -void octgmx_dump_x(int, const struct octgmx_dump_reg_ *, size_t, size_t, int); -void octgmx_dump_x_index(char *, size_t, int); - -void -octgmx_dump(void) -{ - octgmx_dump_common(); - octgmx_dump_port0(); - octgmx_dump_port1(); - octgmx_dump_port2(); -} - -void -octgmx_dump_common(void) -{ - octgmx_dump_common_x(0, octgmx_dump_regs_, - __arraycount(octgmx_dump_regs_)); -} - -void -octgmx_dump_port0(void) -{ - octgmx_dump_port_regs(0); - octgmx_dump_port_stats(0); -} - -void -octgmx_dump_port1(void) -{ - octgmx_dump_port_regs(1); - octgmx_dump_port_stats(1); -} - -void -octgmx_dump_port2(void) -{ - octgmx_dump_port_regs(2); - octgmx_dump_port_stats(2); -} - -void -octgmx_dump_port_regs(int portno) -{ - octgmx_dump_port_x(portno, octgmx_dump_port_regs_, - __arraycount(octgmx_dump_port_regs_)); -} - -void -octgmx_dump_port_stats(int portno) -{ - struct octgmx_port_softc *sc = __octgmx_port_softc[0]; - uint64_t rx_stats_ctl; - uint64_t tx_stats_ctl; - - rx_stats_ctl = _GMX_RD8(sc, GMX0_BASE_PORT_SIZE * portno + GMX0_RX0_STATS_CTL); - _GMX_WR8(sc, GMX0_BASE_PORT_SIZE * portno + GMX0_RX0_STATS_CTL, - rx_stats_ctl & ~RXN_STATS_CTL_RD_CLR); - tx_stats_ctl = _GMX_RD8(sc, GMX0_BASE_PORT_SIZE * portno + GMX0_TX0_STATS_CTL); - _GMX_WR8(sc, GMX0_BASE_PORT_SIZE * portno + GMX0_TX0_STATS_CTL, - tx_stats_ctl & ~TXN_STATS_CTL_RD_CLR); - octgmx_dump_port_x(portno, octgmx_dump_port_stats_, - __arraycount(octgmx_dump_port_stats_)); - _GMX_WR8(sc, GMX0_BASE_PORT_SIZE * portno + GMX0_RX0_STATS_CTL, rx_stats_ctl); - _GMX_WR8(sc, GMX0_BASE_PORT_SIZE * portno + GMX0_TX0_STATS_CTL, tx_stats_ctl); -} - -void -octgmx_dump_common_x(int portno, const struct octgmx_dump_reg_ *regs, size_t size) -{ - octgmx_dump_x(portno, regs, size, 0, 0); -} - -void -octgmx_dump_port_x(int portno, const struct octgmx_dump_reg_ *regs, size_t size) -{ - octgmx_dump_x(portno, regs, size, GMX0_BASE_PORT_SIZE * portno, 1); -} - -void -octgmx_dump_x(int portno, const struct octgmx_dump_reg_ *regs, size_t size, size_t base, int index) -{ - struct octgmx_port_softc *sc = __octgmx_port_softc[0]; - const struct octgmx_dump_reg_ *reg; - uint64_t tmp; - char name[64]; - char buf[512]; - int i; - - for (i = 0; i < (int)size; i++) { - reg = ®s[i]; - tmp = _GMX_RD8(sc, base + reg->offset); - - if (reg->format == NULL) - snprintf(buf, sizeof(buf), "%016" PRIx64, tmp); - else - snprintb(buf, sizeof(buf), reg->format, tmp); - - snprintf(name, sizeof(name), "%s", reg->name); - if (index > 0) - octgmx_dump_x_index(name, sizeof(name), portno); - - printf("\t%-24s: %s\n", name, buf); - } -} - -void -octgmx_dump_x_index(char *buf, size_t len, int index) -{ - static const char *patterns[] = { "_TX0_", "_RX0_", "_PRT0_" }; - int i; - - for (i = 0; i < (int)__arraycount(patterns); i++) { - char *p; - - p = strstr(buf, patterns[i]); - if (p == NULL) - continue; - p = strchr(p, '0'); - KASSERT(p != NULL); - *p = '0' + index; - return; - } -} - -void -octgmx_debug_reset(void) -{ - int i; - - for (i = 0; i < 3; i++) - octgmx_link_enable(__octgmx_port_softc[i], 0); - for (i = 0; i < 3; i++) - octgmx_link_enable(__octgmx_port_softc[i], 1); -} -#endif Index: src/sys/arch/mips/cavium/dev/octeon_pci.c diff -u src/sys/arch/mips/cavium/dev/octeon_pci.c:1.4 src/sys/arch/mips/cavium/dev/octeon_pci.c:1.5 --- src/sys/arch/mips/cavium/dev/octeon_pci.c:1.4 Fri Jun 19 02:23:43 2020 +++ src/sys/arch/mips/cavium/dev/octeon_pci.c Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_pci.c,v 1.4 2020/06/19 02:23:43 simonb Exp $ */ +/* $NetBSD: octeon_pci.c,v 1.5 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007, 2008 Internet Initiative Japan, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_pci.c,v 1.4 2020/06/19 02:23:43 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_pci.c,v 1.5 2020/06/22 02:26:20 simonb Exp $"); #include "opt_octeon.h" @@ -50,11 +50,6 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_pci.c void octpci_bootstrap(struct octeon_config *); static void octpci_init(void); -#ifdef CNMAC_DEBUG -static int octpci_intr_rml(void *); -static void *octpci_intr_rml_ih; -#endif - void octpci_bootstrap(struct octeon_config *mcp) { @@ -64,50 +59,6 @@ octpci_bootstrap(struct octeon_config *m static void octpci_init(void) { -#ifdef CNMAC_DEBUG - octpci_intr_rml_ih = octeon_intr_establish( CIU_INT_RML, IPL_NET, - octpci_intr_rml, NULL); -#endif -} - -#ifdef CNMAC_DEBUG -int octpci_intr_rml_verbose; - -void octgmx_intr_rml_gmx0(void *); -void octgmx_intr_rml_gmx1(void *); -void octasx_intr_rml(void *); -void octipd_intr_rml(void *); -void octpip_intr_rml(void *); -void octpow_intr_rml(void *); -void octpko_intr_rml(void *); -void octfpa_intr_rml(void *); - -static int -octpci_intr_rml(void *arg) -{ - uint64_t block; - block = octeon_read_csr(NPI_RSL_INT_BLOCKS); - if (octpci_intr_rml_verbose) - printf("%s: block=0x%016" PRIx64 "\n", __func__, block); - if (ISSET(block, NPI_RSL_INT_BLOCKS_GMX0)) - octgmx_intr_rml_gmx0(arg); -#ifdef notyet - if (ISSET(block, NPI_RSL_INT_BLOCKS_GMX1)) - octgmx_intr_rml_gmx1(arg); -#endif - if (ISSET(block, NPI_RSL_INT_BLOCKS_ASX0)) - octasx_intr_rml(arg); - if (ISSET(block, NPI_RSL_INT_BLOCKS_IPD)) - octipd_intr_rml(arg); - if (ISSET(block, NPI_RSL_INT_BLOCKS_PIP)) - octpip_intr_rml(arg); - if (ISSET(block, NPI_RSL_INT_BLOCKS_POW)) - octpow_intr_rml(arg); - if (ISSET(block, NPI_RSL_INT_BLOCKS_PKO)) - octpko_intr_rml(arg); - if (ISSET(block, NPI_RSL_INT_BLOCKS_FPA)) - octfpa_intr_rml(arg); - return 1; + /* XXX remove this? */ } -#endif Index: src/sys/arch/mips/cavium/dev/octeon_pkovar.h diff -u src/sys/arch/mips/cavium/dev/octeon_pkovar.h:1.4 src/sys/arch/mips/cavium/dev/octeon_pkovar.h:1.5 --- src/sys/arch/mips/cavium/dev/octeon_pkovar.h:1.4 Thu Jun 18 13:52:08 2020 +++ src/sys/arch/mips/cavium/dev/octeon_pkovar.h Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_pkovar.h,v 1.4 2020/06/18 13:52:08 simonb Exp $ */ +/* $NetBSD: octeon_pkovar.h,v 1.5 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -61,11 +61,6 @@ struct octpko_softc { *sc_cmdptr; int sc_cmd_buf_pool; size_t sc_cmd_buf_size; - -#ifdef CNMAC_DEBUG - struct evcnt sc_ev_pkoerrdbell; - struct evcnt sc_ev_pkoerrparity; -#endif }; /* XXX */ Index: src/sys/arch/mips/cavium/dev/octeon_pow.c diff -u src/sys/arch/mips/cavium/dev/octeon_pow.c:1.8 src/sys/arch/mips/cavium/dev/octeon_pow.c:1.9 --- src/sys/arch/mips/cavium/dev/octeon_pow.c:1.8 Fri Jun 19 02:23:43 2020 +++ src/sys/arch/mips/cavium/dev/octeon_pow.c Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: octeon_pow.c,v 1.8 2020/06/19 02:23:43 simonb Exp $ */ +/* $NetBSD: octeon_pow.c,v 1.9 2020/06/22 02:26:20 simonb Exp $ */ /* * Copyright (c) 2007 Internet Initiative Japan, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: octeon_pow.c,v 1.8 2020/06/19 02:23:43 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: octeon_pow.c,v 1.9 2020/06/22 02:26:20 simonb Exp $"); #include "opt_octeon.h" /* CNMAC_DEBUG */ @@ -61,33 +61,10 @@ struct octpow_intr_handle { int pi_group; void (*pi_cb)(void *, uint64_t *); void *pi_data; - -#ifdef CNMAC_DEBUG -#define _EV_PER_N 32 /* XXX */ -#define _EV_IVAL_N 32 /* XXX */ - int pi_first; - struct timeval pi_last; - struct evcnt pi_ev_per[_EV_PER_N]; - struct evcnt pi_ev_ival[_EV_IVAL_N]; - struct evcnt pi_ev_stray_tc; - struct evcnt pi_ev_stray_ds; - struct evcnt pi_ev_stray_iq; -#endif }; void octpow_bootstrap(struct octeon_config *); -#ifdef CNMAC_DEBUG -void octpow_intr_evcnt_attach(struct octpow_softc *); -void octpow_intr_rml(void *); - -static void octpow_intr_debug_init( - struct octpow_intr_handle *, int); -static inline void octpow_intr_work_debug_ival(struct octpow_softc *, - struct octpow_intr_handle *); -static inline void octpow_intr_work_debug_per(struct octpow_softc *, - struct octpow_intr_handle *, int); -#endif static void octpow_init(struct octpow_softc *); static void octpow_init_regs(struct octpow_softc *); static inline int octpow_tag_sw_poll(void) __unused; @@ -99,17 +76,9 @@ static inline void octpow_intr_work(stru struct octpow_intr_handle *, int); static int octpow_intr(void *); -#ifdef CNMAC_DEBUG -void octpow_dump(void); -#endif - /* XXX */ struct octpow_softc octpow_softc; -#ifdef CNMAC_DEBUG -struct octpow_softc *__octpow_softc; -#endif - /* * XXX: parameter tuning is needed: see files.octeon */ @@ -260,11 +229,6 @@ octpow_bootstrap(struct octeon_config *m /* XXX */ octpow_init(sc); - -#ifdef CNMAC_DEBUG - __octpow_softc = sc; -#endif - } static inline void @@ -323,78 +287,9 @@ octpow_intr_establish(int group, int lev pow_ih->pi_cb = cb; pow_ih->pi_data = data; -#ifdef CNMAC_DEBUG - octpow_intr_debug_init(pow_ih, group); -#endif return pow_ih; } -#ifdef CNMAC_DEBUG -#define _NAMELEN 8 -#define _DESCRLEN 40 - -static void -octpow_intr_debug_init(struct octpow_intr_handle *pow_ih, int group) -{ - pow_ih->pi_first = 1; - char *name, *descr; - int i; - - name = malloc(_NAMELEN + - _DESCRLEN * __arraycount(pow_ih->pi_ev_per) + - _DESCRLEN * __arraycount(pow_ih->pi_ev_ival), - M_DEVBUF, M_WAITOK); - descr = name + _NAMELEN; - snprintf(name, _NAMELEN, "pow%d", group); - for (i = 0; i < (int)__arraycount(pow_ih->pi_ev_per); i++) { - int n = 1 << (i - 1); - - (void)snprintf(descr, _DESCRLEN, - "# of works per intr (%d-%d)", - (i == 0) ? 0 : n, - (i == 0) ? 0 : ((n << 1) - 1)); - evcnt_attach_dynamic(&pow_ih->pi_ev_per[i], - EVCNT_TYPE_MISC, NULL, name, descr); - descr += _DESCRLEN; - } - for (i = 0; i < (int)__arraycount(pow_ih->pi_ev_ival); i++) { - int n = 1 << (i - 1); - int p, q; - char unit; - - p = n; - q = (n << 1) - 1; - unit = 'u'; - /* - * 0 is exceptional - */ - if (i == 0) - p = q = 0; - /* - * count 1024usec as 1msec - * - * XXX this is not exact - */ - if ((i - 1) >= 10) { - p /= 1000; - q /= 1000; - unit = 'm'; - } - (void)snprintf(descr, _DESCRLEN, "intr interval (%d-%d%csec)", - p, q, unit); - evcnt_attach_dynamic(&pow_ih->pi_ev_ival[i], - EVCNT_TYPE_MISC, NULL, name, descr); - descr += _DESCRLEN; - } - evcnt_attach_dynamic(&pow_ih->pi_ev_stray_tc, - EVCNT_TYPE_MISC, NULL, name, "stray intr (TC)"); - evcnt_attach_dynamic(&pow_ih->pi_ev_stray_ds, - EVCNT_TYPE_MISC, NULL, name, "stray intr (DS)"); - evcnt_attach_dynamic(&pow_ih->pi_ev_stray_iq, - EVCNT_TYPE_MISC, NULL, name, "stray intr (IQ)"); -} -#endif - void octpow_init(struct octpow_softc *sc) { @@ -402,10 +297,6 @@ octpow_init(struct octpow_softc *sc) sc->sc_int_pc_base = 10000; octpow_config_int_pc(sc, sc->sc_int_pc_base); - -#ifdef CNMAC_DEBUG - octpow_error_int_enable(sc, 1); -#endif } void @@ -417,82 +308,12 @@ octpow_init_regs(struct octpow_softc *sc &sc->sc_regh); if (status != 0) panic("can't map %s space", "pow register"); - -#ifdef CNMAC_DEBUG - _POW_WR8(sc, POW_ECC_ERR_OFFSET, - POW_ECC_ERR_IOP_IE | POW_ECC_ERR_RPE_IE | - POW_ECC_ERR_DBE_IE | POW_ECC_ERR_SBE_IE); -#endif } /* -------------------------------------------------------------------------- */ /* ---- interrupt handling */ -#ifdef CNMAC_DEBUG -static inline void -octpow_intr_work_debug_ival(struct octpow_softc *sc, - struct octpow_intr_handle *pow_ih) -{ - struct timeval now; - struct timeval ival; - int n; - - microtime(&now); - if (__predict_false(pow_ih->pi_first == 1)) { - pow_ih->pi_first = 0; - goto stat_done; - } - timersub(&now, &pow_ih->pi_last, &ival); - if (ival.tv_sec != 0) - goto stat_done; /* XXX */ - n = ffs64((uint64_t)ival.tv_usec); - if (n > (int)__arraycount(pow_ih->pi_ev_ival) - 1) - n = (int)__arraycount(pow_ih->pi_ev_ival) - 1; - pow_ih->pi_ev_ival[n].ev_count++; - -stat_done: - pow_ih->pi_last = now; /* struct copy */ -} - -static inline void -octpow_intr_work_debug_per(struct octpow_softc *sc, - struct octpow_intr_handle *pow_ih, int count) -{ - int n; - - n = ffs64(count); - if (n > (int)__arraycount(pow_ih->pi_ev_per) - 1) - n = (int)__arraycount(pow_ih->pi_ev_per) - 1; - pow_ih->pi_ev_per[n].ev_count++; -#if 1 - if (count == 0) { - uint64_t wq_int_cnt; - - wq_int_cnt = _POW_GROUP_RD8(sc, pow_ih, POW_WQ_INT_CNT0_OFFSET); - if (wq_int_cnt & POW_WQ_INT_CNTX_TC_CNT) - pow_ih->pi_ev_stray_tc.ev_count++; - if (wq_int_cnt & POW_WQ_INT_CNTX_DS_CNT) - pow_ih->pi_ev_stray_ds.ev_count++; - if (wq_int_cnt & POW_WQ_INT_CNTX_IQ_CNT) - pow_ih->pi_ev_stray_iq.ev_count++; - } -#endif -} -#endif - -#ifdef CNMAC_DEBUG -#define _POW_INTR_WORK_DEBUG_IVAL(sc, ih) \ - octpow_intr_work_debug_ival((sc), (ih)) -#define _POW_INTR_WORK_DEBUG_PER(sc, ih, count) \ - octpow_intr_work_debug_per((sc), (ih), (count)) -#else -#define _POW_INTR_WORK_DEBUG_IVAL(sc, ih) \ - do {} while (0) -#define _POW_INTR_WORK_DEBUG_PER(sc, ih, count) \ - do {} while (0) -#endif - /* * Interrupt handling by fixed count, following Cavium's SDK code. * @@ -514,8 +335,6 @@ octpow_intr_work(struct octpow_softc *sc _POW_WR8(sc, POW_PP_GRP_MSK0_OFFSET, __BIT(pow_ih->pi_group)); - _POW_INTR_WORK_DEBUG_IVAL(sc, pow_ih); - for (count = 0; count < recv_limit; count++) { octpow_tag_sw_wait(); octpow_work_request_async( @@ -526,8 +345,6 @@ octpow_intr_work(struct octpow_softc *sc break; (*pow_ih->pi_cb)(pow_ih->pi_data, work); } - - _POW_INTR_WORK_DEBUG_PER(sc, pow_ih, count); } static int @@ -647,466 +464,3 @@ octpow_ring_intr(void) return int_rate; } #endif /* CNMAC_INTR_FEEDBACK_RING */ - -/* -------------------------------------------------------------------------- */ - -/* ---- debug configuration */ - -#ifdef CNMAC_DEBUG - -void -octpow_error_int_enable(void *data, int enable) -{ - struct octpow_softc *sc = data; - uint64_t pow_error_int_xxx; - - pow_error_int_xxx = - POW_ECC_ERR_IOP | POW_ECC_ERR_RPE | - POW_ECC_ERR_DBE | POW_ECC_ERR_SBE; - _POW_WR8(sc, POW_ECC_ERR_OFFSET, pow_error_int_xxx); - _POW_WR8(sc, POW_ECC_ERR_OFFSET, enable ? pow_error_int_xxx : 0); -} - -uint64_t -octpow_error_int_summary(void *data) -{ - struct octpow_softc *sc = data; - uint64_t summary; - - summary = _POW_RD8(sc, POW_ECC_ERR_OFFSET); - _POW_WR8(sc, POW_ECC_ERR_OFFSET, summary); - return summary; -} - -#endif - -/* -------------------------------------------------------------------------- */ - -/* ---- debug counter */ - -#ifdef CNMAC_DEBUG -int octpow_intr_rml_verbose; -struct evcnt octpow_intr_evcnt; - -static const struct octeon_evcnt_entry octpow_intr_evcnt_entries[] = { -#define _ENTRY(name, type, parent, descr) \ - OCTEON_EVCNT_ENTRY(struct octpow_softc, name, type, parent, descr) - _ENTRY(powecciopcsrpend, MISC, NULL, "pow csr load"), - _ENTRY(powecciopdbgpend, MISC, NULL, "pow dbg load"), - _ENTRY(powecciopaddwork, MISC, NULL, "pow addwork"), - _ENTRY(powecciopillop, MISC, NULL, "pow ill op"), - _ENTRY(poweccioppend24, MISC, NULL, "pow pend24"), - _ENTRY(poweccioppend23, MISC, NULL, "pow pend23"), - _ENTRY(poweccioppend22, MISC, NULL, "pow pend22"), - _ENTRY(poweccioppend21, MISC, NULL, "pow pend21"), - _ENTRY(poweccioptagnull, MISC, NULL, "pow tag null"), - _ENTRY(poweccioptagnullnull, MISC, NULL, "pow tag nullnull"), - _ENTRY(powecciopordatom, MISC, NULL, "pow ordered atomic"), - _ENTRY(powecciopnull, MISC, NULL, "pow core null"), - _ENTRY(powecciopnullnull, MISC, NULL, "pow core nullnull"), - _ENTRY(poweccrpe, MISC, NULL, "pow remote-pointer error"), - _ENTRY(poweccsyn, MISC, NULL, "pow syndrome value"), - _ENTRY(poweccdbe, MISC, NULL, "pow double bit"), - _ENTRY(poweccsbe, MISC, NULL, "pow single bit"), -#undef _ENTRY -}; - -void -octpow_intr_evcnt_attach(struct octpow_softc *sc) -{ - OCTEON_EVCNT_ATTACH_EVCNTS(sc, octpow_intr_evcnt_entries, "pow0"); -} - -void -octpow_intr_rml(void *arg) -{ - struct octpow_softc *sc; - uint64_t reg; - - octpow_intr_evcnt.ev_count++; - sc = __octpow_softc; - KASSERT(sc != NULL); - reg = octpow_error_int_summary(sc); - if (octpow_intr_rml_verbose) - printf("%s: POW_ECC_ERR=0x%016" PRIx64 "\n", __func__, reg); - switch (reg & POW_ECC_ERR_IOP) { - case POW_ECC_ERR_IOP_CSRPEND: - OCTEON_EVCNT_INC(sc, powecciopcsrpend); - break; - case POW_ECC_ERR_IOP_DBGPEND: - OCTEON_EVCNT_INC(sc, powecciopdbgpend); - break; - case POW_ECC_ERR_IOP_ADDWORK: - OCTEON_EVCNT_INC(sc, powecciopaddwork); - break; - case POW_ECC_ERR_IOP_ILLOP: - OCTEON_EVCNT_INC(sc, powecciopillop); - break; - case POW_ECC_ERR_IOP_PEND24: - OCTEON_EVCNT_INC(sc, poweccioppend24); - break; - case POW_ECC_ERR_IOP_PEND23: - OCTEON_EVCNT_INC(sc, poweccioppend23); - break; - case POW_ECC_ERR_IOP_PEND22: - OCTEON_EVCNT_INC(sc, poweccioppend22); - break; - case POW_ECC_ERR_IOP_PEND21: - OCTEON_EVCNT_INC(sc, poweccioppend21); - break; - case POW_ECC_ERR_IOP_TAGNULL: - OCTEON_EVCNT_INC(sc, poweccioptagnull); - break; - case POW_ECC_ERR_IOP_TAGNULLNULL: - OCTEON_EVCNT_INC(sc, poweccioptagnullnull); - break; - case POW_ECC_ERR_IOP_ORDATOM: - OCTEON_EVCNT_INC(sc, powecciopordatom); - break; - case POW_ECC_ERR_IOP_NULL: - OCTEON_EVCNT_INC(sc, powecciopnull); - break; - case POW_ECC_ERR_IOP_NULLNULL: - OCTEON_EVCNT_INC(sc, powecciopnullnull); - break; - default: - break; - } - if (reg & POW_ECC_ERR_RPE) - OCTEON_EVCNT_INC(sc, poweccrpe); - if (reg & POW_ECC_ERR_SYN) - OCTEON_EVCNT_INC(sc, poweccsyn); - if (reg & POW_ECC_ERR_DBE) - OCTEON_EVCNT_INC(sc, poweccdbe); - if (reg & POW_ECC_ERR_SBE) - OCTEON_EVCNT_INC(sc, poweccsbe); -} -#endif - -/* -------------------------------------------------------------------------- */ - -/* ---- debug dump */ - -#ifdef CNMAC_DEBUG - -void octpow_dump_reg(void); -void octpow_dump_ops(void); - -void -octpow_dump(void) -{ - octpow_dump_reg(); - octpow_dump_ops(); -} - -/* ---- register dump */ - -struct octpow_dump_reg_entry { - const char *name; - const char *format; - size_t offset; -}; - -#define _ENTRY(x) { #x, x##_BITS, x##_OFFSET } -#define _ENTRY_0_7(x) \ - _ENTRY(x## 0), _ENTRY(x## 1), _ENTRY(x## 2), _ENTRY(x## 3), \ - _ENTRY(x## 4), _ENTRY(x## 5), _ENTRY(x## 6), _ENTRY(x## 7) -#define _ENTRY_0_15(x) \ - _ENTRY(x## 0), _ENTRY(x## 1), _ENTRY(x## 2), _ENTRY(x## 3), \ - _ENTRY(x## 4), _ENTRY(x## 5), _ENTRY(x## 6), _ENTRY(x## 7), \ - _ENTRY(x## 8), _ENTRY(x## 9), _ENTRY(x##10), _ENTRY(x##11), \ - _ENTRY(x##12), _ENTRY(x##13), _ENTRY(x##14), _ENTRY(x##15) - -static const struct octpow_dump_reg_entry octpow_dump_reg_entries[] = { - _ENTRY (POW_PP_GRP_MSK0), - _ENTRY (POW_PP_GRP_MSK1), - _ENTRY_0_15 (POW_WQ_INT_THR), - _ENTRY_0_15 (POW_WQ_INT_CNT), - _ENTRY_0_7 (POW_QOS_THR), - _ENTRY_0_7 (POW_QOS_RND), - _ENTRY (POW_WQ_INT), - _ENTRY (POW_WQ_INT_PC), - _ENTRY (POW_NW_TIM), - _ENTRY (POW_ECC_ERR), - _ENTRY (POW_NOS_CNT), - _ENTRY_0_15 (POW_WS_PC), - _ENTRY_0_7 (POW_WA_PC), - _ENTRY_0_7 (POW_IQ_CNT), - _ENTRY (POW_WA_COM_PC), - _ENTRY (POW_IQ_COM_CNT), - _ENTRY (POW_TS_PC), - _ENTRY (POW_DS_PC), - _ENTRY (POW_BIST_STAT) -}; - -#undef _ENTRY - -void -octpow_dump_reg(void) -{ - struct octpow_softc *sc = __octpow_softc; - const struct octpow_dump_reg_entry *entry; - uint64_t tmp; - char buf[512]; - int i; - - for (i = 0; i < (int)__arraycount(octpow_dump_reg_entries); i++) { - entry = &octpow_dump_reg_entries[i]; - tmp = _POW_RD8(sc, entry->offset); - if (entry->format == NULL) - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - else - snprintb(buf, sizeof(buf), entry->format, tmp); - printf("\t%-24s: %s\n", entry->name, buf); - } -} - -/* ---- operations dump */ - -struct octpow_dump_ops_entry { - const char *name; - const char *format; - uint64_t (*func)(int); -}; - -void octpow_dump_ops_coreid(int); -void octpow_dump_ops_index(int); -void octpow_dump_ops_qos(int); -void octpow_dump_ops_grp(int); -void octpow_dump_ops_queue(int); -void octpow_dump_ops_common(const struct octpow_dump_ops_entry *, size_t, - const char *, int); - -#define _ENTRY_COMMON(name, prefix, x, y) \ - { #name "_" #x, prefix##_##y##_BITS, octpow_status_by_##name##_##x } - -const struct octpow_dump_ops_entry octpow_dump_ops_coreid_entries[] = { -#define _ENTRY(x, y) _ENTRY_COMMON(coreid, POW_STATUS_LOAD_RESULT, x, y) - _ENTRY(pend_tag, PEND_TAG), - _ENTRY(pend_wqp, PEND_WQP), - _ENTRY(cur_tag_next, CUR_TAG_NEXT), - _ENTRY(cur_tag_prev, CUR_TAG_PREV), - _ENTRY(cur_wqp_next, CUR_WQP_NEXT), - _ENTRY(cur_wqp_prev, CUR_WQP_PREV) -#undef _ENTRY -}; - -const struct octpow_dump_ops_entry octpow_dump_ops_index_entries[] = { -#define _ENTRY(x, y) _ENTRY_COMMON(index, POW_MEMORY_LOAD_RESULT, x, y) - _ENTRY(tag, TAG), - _ENTRY(wqp, WQP), - _ENTRY(desched, DESCHED) -#undef _ENTRY -}; - -const struct octpow_dump_ops_entry octpow_dump_ops_qos_entries[] = { -#define _ENTRY(x, y) _ENTRY_COMMON(qos, POW_IDXPTR_LOAD_RESULT_QOS, x, y) - _ENTRY(free_loc, FREE_LOC) -#undef _ENTRY -}; - -const struct octpow_dump_ops_entry octpow_dump_ops_grp_entries[] = { -#define _ENTRY(x, y) _ENTRY_COMMON(grp, POW_IDXPTR_LOAD_RESULT_GRP, x, y) - _ENTRY(nosched_des, NOSCHED_DES) -#undef _ENTRY -}; - -const struct octpow_dump_ops_entry octpow_dump_ops_queue_entries[] = { -#define _ENTRY(x, y) _ENTRY_COMMON(queue, POW_IDXPTR_LOAD_RESULT_QUEUE, x, y) - _ENTRY(remote_head, REMOTE_HEAD), - _ENTRY(remote_tail, REMOTE_TAIL) -#undef _ENTRY -}; - -void -octpow_dump_ops(void) -{ - int i; - - /* XXX */ - for (i = 0; i < 2/* XXX */; i++) - octpow_dump_ops_coreid(i); - - /* XXX */ - octpow_dump_ops_index(0); - - for (i = 0; i < 8; i++) - octpow_dump_ops_qos(i); - - for (i = 0; i < 16; i++) - octpow_dump_ops_grp(i); - - for (i = 0; i < 16; i++) - octpow_dump_ops_queue(i); -} - -void -octpow_dump_ops_coreid(int coreid) -{ - octpow_dump_ops_common(octpow_dump_ops_coreid_entries, - __arraycount(octpow_dump_ops_coreid_entries), "coreid", coreid); -} - -void -octpow_dump_ops_index(int index) -{ - octpow_dump_ops_common(octpow_dump_ops_index_entries, - __arraycount(octpow_dump_ops_index_entries), "index", index); -} - -void -octpow_dump_ops_qos(int qos) -{ - octpow_dump_ops_common(octpow_dump_ops_qos_entries, - __arraycount(octpow_dump_ops_qos_entries), "qos", qos); -} - -void -octpow_dump_ops_grp(int grp) -{ - octpow_dump_ops_common(octpow_dump_ops_grp_entries, - __arraycount(octpow_dump_ops_grp_entries), "grp", grp); -} - -void -octpow_dump_ops_queue(int queue) -{ - octpow_dump_ops_common(octpow_dump_ops_queue_entries, - __arraycount(octpow_dump_ops_queue_entries), "queue", queue); -} - -void -octpow_dump_ops_common(const struct octpow_dump_ops_entry *entries, - size_t nentries, const char *by_what, int arg) -{ - const struct octpow_dump_ops_entry *entry; - uint64_t tmp; - char buf[512]; - int i; - - printf("%s=%d\n", by_what, arg); - for (i = 0; i < (int)nentries; i++) { - entry = &entries[i]; - tmp = (*entry->func)(arg); - if (entry->format == NULL) - snprintf(buf, sizeof(buf), "%16" PRIx64, tmp); - else - snprintb(buf, sizeof(buf), entry->format, tmp); - printf("\t%-24s: %s\n", entry->name, buf); - } -} - -#endif - -/* -------------------------------------------------------------------------- */ - -/* ---- test */ - -#ifdef octPOW_TEST -/* - * Standalone test entries; meant to be called from ddb. - */ - -void octpow_test(void); -void octpow_test_dump_wqe(paddr_t); - -static void octpow_test_1(void); - -struct test_wqe { - uint64_t word0; - uint64_t word1; - uint64_t word2; - uint64_t word3; -} __packed; -struct test_wqe test_wqe; - -void -octpow_test(void) -{ - octpow_test_1(); -} - -static void -octpow_test_1(void) -{ - struct test_wqe *wqe = &test_wqe; - int qos, grp, queue, tt; - uint32_t tag; - paddr_t ptr; - - qos = 7; /* XXX */ - grp = queue = 15; /* XXX */ - tt = POW_TAG_TYPE_ORDERED; /* XXX */ - tag = UINT32_C(0x01234567); /* XXX */ - - /* => make sure that the queue is empty */ - - octpow_dump_ops_qos(qos); - octpow_dump_ops_grp(grp); - printf("\n"); - - /* - * Initialize WQE. - * - * word0:next is used by hardware. - * - * word1:qos, word1:grp, word1:tt, word1:tag must match with arguments - * of the following ADDWQ transaction. - */ - - (void)memset(wqe, 0, sizeof(*wqe)); - wqe->word0 = - __BITS64_SET(POW_WQE_WORD0_NEXT, 0); - wqe->word1 = - __BITS64_SET(POW_WQE_WORD1_QOS, qos) | - __BITS64_SET(POW_WQE_WORD1_GRP, grp) | - __BITS64_SET(POW_WQE_WORD1_TT, tt) | - __BITS64_SET(POW_WQE_WORD1_TAG, tag); - - printf("calling ADDWQ\n"); - octpow_ops_addwq(MIPS_KSEG0_TO_PHYS(wqe), qos, grp, tt, tag); - - octpow_dump_ops_qos(qos); - octpow_dump_ops_grp(grp); - printf("\n"); - - /* => make sure that a WQE is added to the queue */ - - printf("calling GET_WORK_LOAD\n"); - ptr = octpow_ops_get_work_load(0); - - octpow_dump_ops_qos(qos); - octpow_dump_ops_grp(grp); - printf("\n"); - - octpow_test_dump_wqe(ptr); - - /* => make sure that the WQE is in-flight (and scheduled) */ - - printf("calling SWTAG(NULL)\n"); - octpow_ops_swtag(POW_TAG_TYPE_NULL, tag); - - octpow_dump_ops_qos(qos); - octpow_dump_ops_grp(grp); - printf("\n"); - - /* => make sure that the WQE is un-scheduled (completed) */ -} - -void -octpow_test_dump_wqe(paddr_t ptr) -{ - uint64_t word0, word1; - char buf[128]; - - printf("wqe\n"); - - word0 = *(uint64_t *)MIPS_PHYS_TO_XKPHYS_CACHED(ptr); - snprintb(buf, sizeof(buf), POW_WQE_WORD0_BITS, word0); - printf("\t%-24s: %s\n", "word0", buf); - - word1 = *(uint64_t *)MIPS_PHYS_TO_XKPHYS_CACHED(ptr + 8); - snprintb(buf, sizeof(buf), POW_WQE_WORD1_BITS, word1); - printf("\t%-24s: %s\n", "word1", buf); -} -#endif Index: src/sys/arch/mips/conf/files.octeon diff -u src/sys/arch/mips/conf/files.octeon:1.7 src/sys/arch/mips/conf/files.octeon:1.8 --- src/sys/arch/mips/conf/files.octeon:1.7 Mon Jun 15 07:48:12 2020 +++ src/sys/arch/mips/conf/files.octeon Mon Jun 22 02:26:20 2020 @@ -1,4 +1,4 @@ -# $NetBSD: files.octeon,v 1.7 2020/06/15 07:48:12 simonb Exp $ +# $NetBSD: files.octeon,v 1.8 2020/06/22 02:26:20 simonb Exp $ file arch/mips/mips/locore_octeon.S file arch/mips/mips/bus_dma.c @@ -13,8 +13,7 @@ file arch/mips/cavium/dev/octeon_ciu.c defparam opt_octeon.h OCTEON_ECLK defparam opt_octeon.h CNMAC_RING_MAX defparam opt_octeon.h CNMAC_RING_MIN -defflag opt_octeon.h CNMAC_DEBUG - CNMAC_FAST_CRC +defflag opt_octeon.h CNMAC_FAST_CRC CNMAC_IPD_RED CNMAC_USENFS OCTEON_USBN_CN31XX_DMA_WORKAROUND