From nobody Thu Oct 29 23:37:22 2026 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jG0yC1Mglz6xr70 for ; Thu, 29 Oct 2026 23:37:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jG0yB71jzz4t5J for ; Thu, 29 Oct 2026 23:37:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793317043; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=AN/GDZw1nkshHe8PGpf8dkCbBrvbMCRGD58eDaPGw1g=; b=TrGIJTWk8/ZZfq/s+sZPlXj/CihXuc5dZby/79IwpqYw3u/rmLIatS8Gulsv9VN9x9L8Wu +S66Y8fCCRAAGmhRjnjBixH+jqepZP15kyYt3CG7OE90OLc3AO74lB9f8Boaq3QH5CTetD l9/ies3WIrVibScA/WY7ZC3WvXGwkIB+tW7X+PDeRyKXo1OwBSjZGLwAmZolPKlDuUzVuR LH1/FqTvMoebFiFiYy4SRVaw/IamqcZ6CIODXDsAauMhGK9ejpdDO7CTjLDIaQLyJbNyji ittc+OqWlo4cZ5tRlDrXTZngCR2m/UWBZOqvhN1zAaRJkpZaDuDQiYndaNcQ1w== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793317043; b=j9a6fpbqawuXXkR7OQRmzsVX3ByyYSieHTZ0hSWTM0fKBCuZLNX3TMxe3uPHvtV1mpQ8H3 /tuF3cYKZXML3QCbsEWhc7hYZEEZkG9lDtMJZ5aJwSVTYxNdQqrzExnBx7dzp/aY30RS03 MbB4oKg3d7wEYJDmB+XFp8faPcq+KVvbFqKqZuZqgXyArw5Ext0hmVf75rodg2a+mWoiIc Ap5ING5Mr1QBOdf33iXCxqbjNasB85nJ3AwTYOvaYD8jVI8XlREty5tnXQe075T2UHyJGm Sank90fJ2+fZmMfhEmJ8Dmcu+gnJGgE/w8TFKj/byI1jfTWTo1muFsX0M5b+lw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793317043; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=AN/GDZw1nkshHe8PGpf8dkCbBrvbMCRGD58eDaPGw1g=; b=EDkPc+6Ms2cF1lazP1JK8k5SY1qKg5MMU7brOlf5kf4A/aOBRMcHKSrye4K4IeC288E/Ey y/Mu9ZQFMopStHd2NQeFHIGVtCn5TeouRn+kyqLjncNDDTk6Vt/zq/WwNh0gRgE2CokAFN eCMT7XCRYJ8Zq1jCHaJSxh8xmR1tNcVk7jUTXSMD32xPkcmWo6jYJCXAt+UKNEIt1gNDXe jdjJwulqeUnNn8zNhUZi2cv6Z5Ih3l8nrkvO6b8z0npuhuojp6FWLk9GAAP/pm63LyEm4h paQEC/29Xjyi5IoJXkEEYPR7gF0CyKcypqHpuNtYpNh9hmlWMLoVJNnmuNh59g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jG0yB6hNyz12Cl for ; Thu, 29 Oct 2026 23:37:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3ac55 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 29 Oct 2026 23:37:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Sumit Saxena From: Kevin Bowling Subject: git: 4da5bd0daceb - stable/15 - if_bnxt: add CAGR interrupt coalescing tick-resolution support List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: Commits to the stable branches of the FreeBSD src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 4da5bd0daceb1cfe220bebeabf302aa4253418a9 Auto-Submitted: auto-generated Date: Thu, 29 Oct 2026 23:37:22 +0000 Message-Id: <6ae3d8b2.3ac55.2e48a692@gitrepo.freebsd.org> The branch stable/15 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=4da5bd0daceb1cfe220bebeabf302aa4253418a9 commit 4da5bd0daceb1cfe220bebeabf302aa4253418a9 Author: Sumit Saxena AuthorDate: 2026-07-29 08:36:18 +0000 Commit: Kevin Bowling CommitDate: 2026-10-29 23:25:49 +0000 if_bnxt: add CAGR interrupt coalescing tick-resolution support Add the P7 CAGR (Completion AGgregation Ring) NQ-aggregation timer tick-resolution knob, programmed via a direct GRC-window register write, with a new dev.bnxt..cagr_tick_res read-only tunable. This is independent of the existing per-ring AGGINT_PARAMS coalescing. Reviewed by: gallatin Sponsored by: Broadcom Inc. Differential Revision: https://reviews.freebsd.org/D58598 (cherry picked from commit 2f3a1ebba81266b5f21640f88d73e03415cf13be) --- sys/dev/bnxt/bnxt_en/bnxt.h | 8 ++++++++ sys/dev/bnxt/bnxt_en/bnxt_sysctl.c | 27 +++++++++++++++++++++++++++ sys/dev/bnxt/bnxt_en/if_bnxt.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/sys/dev/bnxt/bnxt_en/bnxt.h b/sys/dev/bnxt/bnxt_en/bnxt.h index 3709e4140928..d31d15295519 100644 --- a/sys/dev/bnxt/bnxt_en/bnxt.h +++ b/sys/dev/bnxt/bnxt_en/bnxt.h @@ -1429,6 +1429,14 @@ struct bnxt_softc { struct bnxt_ptp_cfg *ptp_cfg; bool rx_ts_enabled; + +#define BNXT_CAGR_CQCOAL_OFFSET 0xc00 +#define BNXT_CAGR_NQAGG_MAXTIMER 0x5930000 +#define BNXT_CAGR_TICK_RES_DEFAULT 0x2 +#define BNXT_CAGR_TICK_RES_MIN 0x0 +#define BNXT_CAGR_TICK_RES_MAX 0x4 +#define BNXT_CAGR_TICK_RES_OFFSET 16 + uint32_t cagr_tick_res; }; struct bnxt_filter_info { diff --git a/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c b/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c index 1dd2037b4131..ee8674c8f9c1 100644 --- a/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c +++ b/sys/dev/bnxt/bnxt_en/bnxt_sysctl.c @@ -1648,6 +1648,30 @@ bnxt_set_coal_tx_frames_irq(SYSCTL_HANDLER_ARGS) { return rc; } +static int +bnxt_set_cagr_tick_res(SYSCTL_HANDLER_ARGS) { + struct bnxt_softc *softc = arg1; + int rc; + int val; + + if (softc == NULL) + return EBUSY; + + val = softc->cagr_tick_res; + + rc = sysctl_handle_int(oidp, &val, 0, req); + if (rc || !req->newptr) + return rc; + + if (val < BNXT_CAGR_TICK_RES_MIN || + val > BNXT_CAGR_TICK_RES_MAX) + return EINVAL; + + softc->cagr_tick_res = val; + + return rc; +} + static void simulate_reset(struct bnxt_softc *bp, char *fwcli_string) { @@ -1740,6 +1764,9 @@ bnxt_create_config_sysctls_pre(struct bnxt_softc *softc) CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, softc, 0, bnxt_set_coal_tx_frames_irq, "I", "interrupt coalescing Tx Frames IRQ"); + SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cagr_tick_res", + CTLTYPE_INT | CTLFLAG_RDTUN | CTLFLAG_MPSAFE, softc, 0, + bnxt_set_cagr_tick_res, "I", "CAGR tick resolution"); SYSCTL_ADD_U32(ctx, children, OID_AUTO, "flags", CTLFLAG_RD, &softc->flags, 0, "flags"); SYSCTL_ADD_U64(ctx, children, OID_AUTO, "fw_cap", CTLFLAG_RD, diff --git a/sys/dev/bnxt/bnxt_en/if_bnxt.c b/sys/dev/bnxt/bnxt_en/if_bnxt.c index 50b7e88416ac..03fe0c391868 100644 --- a/sys/dev/bnxt/bnxt_en/if_bnxt.c +++ b/sys/dev/bnxt/bnxt_en/if_bnxt.c @@ -2098,6 +2098,26 @@ static inline void __bnxt_map_fw_health_reg(struct bnxt_softc *bp, u32 reg) BNXT_HWRM_BAR_IDX, reg & BNXT_GRC_BASE_MASK); } +static void +bnxt_set_cqcoal_tick_res(struct bnxt_softc *bp) +{ + u32 val = 0; + u32 cagr_addr = BNXT_GRCPF_REG_WINDOW_BASE_OUT + BNXT_CAGR_CQCOAL_OFFSET; + + if (!BNXT_CHIP_P7(bp)) + return; + + writel_fbsd(bp, BNXT_GRCPF_REG_WINDOW_BASE_OUT, BNXT_HWRM_BAR_IDX, + BNXT_CAGR_NQAGG_MAXTIMER); + val = readl_fbsd(bp, cagr_addr, BNXT_HWRM_BAR_IDX); + + /* Clear out CAGR tick resolution bits(16-19), before writing new value */ + val &= ~(0xf << BNXT_CAGR_TICK_RES_OFFSET); + + writel_fbsd(bp, cagr_addr, BNXT_HWRM_BAR_IDX, + (val | bp->cagr_tick_res << BNXT_CAGR_TICK_RES_OFFSET)); +} + static int bnxt_map_fw_health_regs(struct bnxt_softc *bp) { struct bnxt_fw_health *fw_health = bp->fw_health; @@ -2236,6 +2256,12 @@ static bool bnxt_fw_reset_timeout(struct bnxt_softc *bp) static int bnxt_open(struct bnxt_softc *bp) { int rc = 0; + + /* A function/chip reset drops the CAGR tick-resolution register + * programmed in bnxt_attach_pre(); restore it before we start + * relying on interrupt coalescing again. */ + bnxt_set_cqcoal_tick_res(bp); + if (BNXT_PF(bp)) rc = bnxt_hwrm_nvm_get_dev_info(bp, &bp->nvm_info->mfg_id, &bp->nvm_info->device_id, &bp->nvm_info->sector_size, @@ -2921,6 +2947,10 @@ bnxt_attach_pre(if_ctx_t ctx) HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6 | HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV6 | HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6; + + if (BNXT_CHIP_P7(softc)) + softc->cagr_tick_res = BNXT_CAGR_TICK_RES_DEFAULT; + rc = bnxt_create_config_sysctls_pre(softc); if (rc) goto failed; @@ -2965,6 +2995,8 @@ bnxt_attach_pre(if_ctx_t ctx) snprintf(softc->board_partno, sizeof(softc->board_partno), "%s", part_num); } + bnxt_set_cqcoal_tick_res(softc); + return (rc);