Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Feb 2026 21:57:40 +0000
From:      Navdeep Parhar <np@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 9352d2f6dd55 - main - cxgbe(4): sysctl to disable/enable the TCB cache
Message-ID:  <69851254.47e36.400be12a@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by np:

URL: https://cgit.FreeBSD.org/src/commit/?id=9352d2f6dd55afcf0ac24d2806da7c6febf19589

commit 9352d2f6dd55afcf0ac24d2806da7c6febf19589
Author:     Navdeep Parhar <np@FreeBSD.org>
AuthorDate: 2026-02-05 19:52:51 +0000
Commit:     Navdeep Parhar <np@FreeBSD.org>
CommitDate: 2026-02-05 20:11:58 +0000

    cxgbe(4): sysctl to disable/enable the TCB cache
    
    The TCB cache can be enabled/disabled at any time on the T7 and this
    commit adds a sysctl to do that.  This is for debug only.
    
     # sysctl dev.chnex.0.misc.tcb_cache=0
     # sysctl dev.chnex.0.misc.tcb_cache=1
    
    MFC after:      1 week
    Sponsored by:   Chelsio Communications
---
 sys/dev/cxgbe/t4_main.c | 41 +++++++++++++++++++++++++++++++++++++++++
 sys/dev/cxgbe/t4_sge.c  | 15 ++++++++++-----
 2 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
index 3237c6649713..e35bb9f64951 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -900,6 +900,7 @@ static int sysctl_ulprx_la(SYSCTL_HANDLER_ARGS);
 static int sysctl_wcwr_stats(SYSCTL_HANDLER_ARGS);
 static int sysctl_cpus(SYSCTL_HANDLER_ARGS);
 static int sysctl_reset(SYSCTL_HANDLER_ARGS);
+static int sysctl_tcb_cache(SYSCTL_HANDLER_ARGS);
 #ifdef TCP_OFFLOAD
 static int sysctl_tls(SYSCTL_HANDLER_ARGS);
 static int sysctl_tp_tick(SYSCTL_HANDLER_ARGS);
@@ -8119,6 +8120,12 @@ t4_sysctls(struct adapter *sc)
 		    sysctl_wcwr_stats, "A", "write combined work requests");
 	}
 
+	if (chip_id(sc) >= CHELSIO_T7) {
+		SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "tcb_cache",
+		    CTLTYPE_INT | CTLFLAG_RW, sc, 0, sysctl_tcb_cache, "I",
+		    "1 = enabled (default), 0 = disabled (for debug only)");
+	}
+
 #ifdef KERN_TLS
 	if (is_ktls(sc)) {
 		/*
@@ -12204,6 +12211,40 @@ sysctl_reset(SYSCTL_HANDLER_ARGS)
 	return (0);
 }
 
+static int
+sysctl_tcb_cache(SYSCTL_HANDLER_ARGS)
+{
+	struct adapter *sc = arg1;
+	u_int val, v;
+	int rc;
+
+	mtx_lock(&sc->reg_lock);
+	if (hw_off_limits(sc)) {
+		rc = ENXIO;
+		goto done;
+	}
+	t4_tp_pio_read(sc, &v, 1, A_TP_CMM_CONFIG, 1);
+	mtx_unlock(&sc->reg_lock);
+
+	val = v & F_GLFL ? 0 : 1;
+	rc = sysctl_handle_int(oidp, &val, 0, req);
+	if (rc != 0 || req->newptr == NULL)
+		return (rc);
+	if (val == 0)
+		v |= F_GLFL;
+	else
+		v &= ~F_GLFL;
+
+	mtx_lock(&sc->reg_lock);
+	if (hw_off_limits(sc))
+		rc = ENXIO;
+	else
+		t4_tp_pio_write(sc, &v, 1, A_TP_CMM_CONFIG, 1);
+done:
+	mtx_unlock(&sc->reg_lock);
+	return (rc);
+}
+
 #ifdef TCP_OFFLOAD
 static int
 sysctl_tls(SYSCTL_HANDLER_ARGS)
diff --git a/sys/dev/cxgbe/t4_sge.c b/sys/dev/cxgbe/t4_sge.c
index b6d44792dce4..af18b3019760 100644
--- a/sys/dev/cxgbe/t4_sge.c
+++ b/sys/dev/cxgbe/t4_sge.c
@@ -828,12 +828,17 @@ t4_tweak_chip_settings(struct adapter *sc)
 		t4_set_reg_field(sc, A_SGE_ITP_CONTROL, m, v);
 
 		if (sc->debug_flags & DF_DISABLE_TCB_CACHE) {
-			m = V_RDTHRESHOLD(M_RDTHRESHOLD) | F_WRTHRTHRESHEN |
-			    V_WRTHRTHRESH(M_WRTHRTHRESH);
 			t4_tp_pio_read(sc, &v, 1, A_TP_CMM_CONFIG, 1);
-			v &= ~m;
-			v |= V_RDTHRESHOLD(1) | F_WRTHRTHRESHEN |
-			    V_WRTHRTHRESH(16);
+			if (chip_id(sc) >= CHELSIO_T7) {
+				v |= F_GLFL;
+			} else {
+				m = V_RDTHRESHOLD(M_RDTHRESHOLD) |
+				    F_WRTHRTHRESHEN |
+				    V_WRTHRTHRESH(M_WRTHRTHRESH);
+				v &= ~m;
+				v |= V_RDTHRESHOLD(1) | F_WRTHRTHRESHEN |
+				    V_WRTHRTHRESH(16);
+			}
 			t4_tp_pio_write(sc, &v, 1, A_TP_CMM_CONFIG, 1);
 		}
 	}


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69851254.47e36.400be12a>