From nobody Thu Jan 15 14:51:03 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 4dsQsN3T1wz6P4ZW for ; Thu, 15 Jan 2026 14:51:04 +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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dsQsN0YtSz3JXL for ; Thu, 15 Jan 2026 14:51:04 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768488664; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VIsJ47AAmftuSMVH5xor7+5mm8IPybhe/eTyFwUosHk=; b=U34sfi3pn3rB/JCIcj8IqO3dqU8Wd9EojMPt7oGrxMWreb2hedMu4y5BFeQrUn+htAhzPE 7lGDjovKn7MGz+mGsWtrqU613WRQ3uaEKkFCSEjwTZ0Yw6gjWa/7wfSLw4PvVlapdc7qUH 3C8oe0dkFUmaGDwvVTM44lG1GiDqs+o7DpLf4H55GnpmhK/JYLXuqrPZsK4oeqVDvMWFWQ AXd3ZHPkpmk5+qYwJDdp6qL14m+74c3/BE1FW8id7D9NQWJ/tw8n5yWqNHAIgDk19INwBI J/5NZJlS+0ruBT6/yORKGR1nKco3QX7HO2oco0+ntNIJgKsZkrzIosgQ0VnneQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768488664; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VIsJ47AAmftuSMVH5xor7+5mm8IPybhe/eTyFwUosHk=; b=EMRMTQipLNUrNjSf4oeQhnAcTpoyrL9jEG/L7FIHPqdxkLxtQ/DIxpNSjz0WYkv78UrAYC lB7I0gnvyCn84aF02Zt1c00GFqxP9tDp5amuH3Z7hIjWlizYbzSC+GXLnV4N9FERQSwNOi 5F9SfYGQ4PL279d5XgwVrpHBkyBx049xFuyaifcEd5kSjseGgA6rsbroSuf0uE12sMuJeQ t8Cq3TIuj75gE9S46wlpIoOypLpoGxjtYOLbYGf2FpYcAio7eQK11VHaRtq+t/fPB/oif+ I1HZHjDYHBxGczn5r0gmDxtEuhLXIrvfh8wKCvMboEcb1/klYNpHmZWdAKRkzQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1768488664; a=rsa-sha256; cv=none; b=rR4TySybnKb1uej160+BfKzOTCJKex0OifCsQd/kuQdBX4064vcx5MMDD6YUeCLKxKEnra vYA/OsT6rba954MxUp8GSFOpB/nq1QhRQ66Iaod4NvZnVb4tlwXkMqRuNVO1ULKWcjPLSY zMxEf6V31Xspg2elEsJ1LCPu31VcuNIHb0b4kztq/f2NPH7btWMpXajtHop0qN+7TChQ+E CDuDPYLgbA76oDSzlO62ZFIdIeISMVBuY2SVIIYwDRPWWv5dFB0PPcOPXCRCXig5L8HxcD l/kS+qLIbybFkKCl9UlTvqZmCQBrx+PZm2wYiSofsHoo/cDg50zhdmZtY97bxw== 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 4dsQsM6Zc5zZ5k for ; Thu, 15 Jan 2026 14:51:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 221e2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 15 Jan 2026 14:51:03 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Andrew Turner Subject: git: e79e4c7031a4 - stable/14 - arm64: Add cpu_feat_disabled for disabled features List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: e79e4c7031a444ac4d8466bc9834d2f4c3d31132 Auto-Submitted: auto-generated Date: Thu, 15 Jan 2026 14:51:03 +0000 Message-Id: <6968fed7.221e2.502cbff5@gitrepo.freebsd.org> The branch stable/14 has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=e79e4c7031a444ac4d8466bc9834d2f4c3d31132 commit e79e4c7031a444ac4d8466bc9834d2f4c3d31132 Author: Andrew Turner AuthorDate: 2025-09-19 10:05:46 +0000 Commit: Andrew Turner CommitDate: 2026-01-14 21:14:13 +0000 arm64: Add cpu_feat_disabled for disabled features When a feature is disabled we may need to run a cleanup handler, e.g. to remove a feature from the sanitized ID registers. Add support for this with a new feat_disabled handler. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D52577 (cherry picked from commit 055229eda697445880edd0050d0230a3f1bc85b3) --- sys/arm64/arm64/cpu_feat.c | 10 +++++++--- sys/arm64/include/cpu_feat.h | 5 ++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sys/arm64/arm64/cpu_feat.c b/sys/arm64/arm64/cpu_feat.c index 6aec0fdf8a78..11d42d5f3561 100644 --- a/sys/arm64/arm64/cpu_feat.c +++ b/sys/arm64/arm64/cpu_feat.c @@ -70,18 +70,18 @@ enable_cpu_feat(uint32_t stage) } /* Ignore features that are not present */ if (check_status == FEAT_ALWAYS_DISABLE) - continue; + goto next; snprintf(tunable, sizeof(tunable), "hw.feat.%s", feat->feat_name); if (TUNABLE_BOOL_FETCH(tunable, &val)) { /* Is the feature disabled by the tunable? */ if (!val) - continue; + goto next; /* If enabled by the tunable then enable it */ } else if (check_status == FEAT_DEFAULT_DISABLE) { /* No tunable set and disabled by default */ - continue; + goto next; } /* @@ -123,6 +123,10 @@ enable_cpu_feat(uint32_t stage) if (feat->feat_enable(feat, errata_status, errata_list, errata_count)) feat->feat_enabled = true; + +next: + if (!feat->feat_enabled && feat->feat_disabled != NULL) + feat->feat_disabled(feat); } } diff --git a/sys/arm64/include/cpu_feat.h b/sys/arm64/include/cpu_feat.h index 6a554b6baedf..20c743a7e507 100644 --- a/sys/arm64/include/cpu_feat.h +++ b/sys/arm64/include/cpu_feat.h @@ -80,12 +80,14 @@ typedef bool (cpu_feat_has_errata)(const struct cpu_feat *, u_int, u_int **, u_int *); typedef bool (cpu_feat_enable)(const struct cpu_feat *, cpu_feat_errata, u_int *, u_int); +typedef void (cpu_feat_disabled)(const struct cpu_feat *); struct cpu_feat { const char *feat_name; cpu_feat_check *feat_check; cpu_feat_has_errata *feat_has_errata; cpu_feat_enable *feat_enable; + cpu_feat_disabled *feat_disabled; uint32_t feat_flags; bool feat_enabled; }; @@ -93,12 +95,13 @@ SET_DECLARE(cpu_feat_set, struct cpu_feat); SYSCTL_DECL(_hw_feat); -#define CPU_FEAT(name, descr, check, has_errata, enable, flags) \ +#define CPU_FEAT(name, descr, check, has_errata, enable, disabled, flags) \ static struct cpu_feat name = { \ .feat_name = #name, \ .feat_check = check, \ .feat_has_errata = has_errata, \ .feat_enable = enable, \ + .feat_disabled = disabled, \ .feat_flags = flags, \ .feat_enabled = false, \ }; \