From nobody Wed Feb 11 20:44:05 2026 X-Original-To: dev-commits-src-main@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 4fB9QF2N6Dz6SBnP for ; Wed, 11 Feb 2026 20:44:05 +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 4fB9QF0WCWz3PdS for ; Wed, 11 Feb 2026 20:44:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770842645; 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=PznTY2yrpTrhpFJsH3BqDqg2GcxmIv6j4SSJ9bEEFeM=; b=F1nX1ZB2FCMvThWoSoYDkr1bB4ggh6ROgcBSB0KoQn5N7J3biuRycfsveN8XAQ3M8zHSON Ce7Y9tCEqX6LYUg+xPuu2Z3WALzWLFCgBhcJN46/mqfd3O3ErFG1KEC5hYLr8QzHyMssWI bwoX8M9tkHQGfvpf2V8sZGRHt2V89CzxL+cLWoVTSr+7MakS0MMcryWyR/a+Svoxz6bquX EAzexpTJFE3zhyosCgaI2T9r6nNylzB0KFK+ghHeTJZQuvga0qEVSsl+aUizK7QpOldq18 L+vS2TG4HyvAsQdSnL2HLEQo37ro+dwMAts19NKbt3pPWJBDs3awJYJASgYfHA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770842645; a=rsa-sha256; cv=none; b=kYqKARmWThypuAcpxgm+P9QlU03cr5fkXVghxLMbNZAvdiC56QliPUHyNbUNvD1gx9Y/4A FqLy023wDEP5aNhuvzKnPM9XCEGtwX7t/D/2L0rXstLQXSa5IqzH7ri3q5Him2a9nO/41u MEmEA1L5sAmYZns5VpSpwHXhmo4+GsyZhWtIUna0FWeRfLDcP4WKiKr+VHNWv8jdefC4YY NgK+oedF5zflTRYJGRpaie9BJXqk/BnbSfHA/DA3xauccCWaSqmXuu3rJycaMfR+eJBLMp tZAwYAMu93s0cCaw0pjatKXApgUXhvQy5M0LZX9e+B5WyXVWLC2p8Kg61cjmuA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770842645; 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=PznTY2yrpTrhpFJsH3BqDqg2GcxmIv6j4SSJ9bEEFeM=; b=aiqj2vWgtxB3Luk0zHa4obU3iIAaEYjOYzhAIRTH5WDGmsx7KvWtUxIMwABkLIJOUZkLgc N6el8hoIHqV9f0gimE3Y+ReKIc87sOFWbj8KS6c0DcmnwtyPJOU9VVvL55J2O39Z+3+5dK DHPMU6BoX+A9PfQZ+KZAtaQNv5VI1nQJVLTL/sGmNFIAPthq4i8s46NisDXfSKAIs5AR5t d7qJSdlLglWCAorU+ttJRDILwyrZzCpM47bqyQfOIF79a082bdBFcQ8R2iueq+0APNnd6Q R3mYVXsVeEfmixvvhp6Qo2vE/3hhHRguDsZDPm13GGrINeClvXDDN59Vi0Mgqg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fB9QF05ZDz14ZT for ; Wed, 11 Feb 2026 20:44:05 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4696e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 11 Feb 2026 20:44:05 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 7689e68506a9 - main - hwpstate_amd(4): Add knobs to get/set all fields of CPPC_REQUEST List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7689e68506a900de4ba79924d781f092bb9d0335 Auto-Submitted: auto-generated Date: Wed, 11 Feb 2026 20:44:05 +0000 Message-Id: <698cea15.4696e.1774e156@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=7689e68506a900de4ba79924d781f092bb9d0335 commit 7689e68506a900de4ba79924d781f092bb9d0335 Author: Olivier Certner AuthorDate: 2026-01-27 12:39:40 +0000 Commit: Olivier Certner CommitDate: 2026-02-11 20:43:21 +0000 hwpstate_amd(4): Add knobs to get/set all fields of CPPC_REQUEST This will allow experimentations and finer-grained tuning to the full extent allowed by the hardware, which is especially important given that the spec leaves to hardware implementors an important leeway in interpreting CPPC's numeric parameters, causing the same settings to have different effects on different CPU models. PR: 292615 Reviewed by: aokblast (older version) Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55010 --- sys/x86/cpufreq/hwpstate_amd.c | 54 ++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/sys/x86/cpufreq/hwpstate_amd.c b/sys/x86/cpufreq/hwpstate_amd.c index c35fe0719d74..3a5652a8361f 100644 --- a/sys/x86/cpufreq/hwpstate_amd.c +++ b/sys/x86/cpufreq/hwpstate_amd.c @@ -424,10 +424,9 @@ set_cppc_request(device_t hwp_dev, uint64_t request, uint64_t mask) } static int -sysctl_epp_handler(SYSCTL_HANDLER_ARGS) +sysctl_cppc_request_field_handler(SYSCTL_HANDLER_ARGS) { - const u_int max_epp = - BITS_VALUE(AMD_CPPC_REQUEST_EPP_BITS, (uint64_t)-1); + const u_int max = BITS_VALUE(arg2, (uint64_t)-1); const device_t dev = arg1; struct hwpstate_softc *const sc = device_get_softc(dev); u_int val; @@ -436,17 +435,16 @@ sysctl_epp_handler(SYSCTL_HANDLER_ARGS) /* Sysctl knob does not exist if PSTATE_CPPC is not set. */ check_cppc_enabled(sc, __func__); - val = BITS_VALUE(AMD_CPPC_REQUEST_EPP_BITS, sc->cppc.request); + val = BITS_VALUE(arg2, sc->cppc.request); error = sysctl_handle_int(oidp, &val, 0, req); if (error != 0 || req->newptr == NULL) return (error); - if (val > max_epp) + if (val > max) return (EINVAL); - error = set_cppc_request(dev, - BITS_WITH_VALUE(AMD_CPPC_REQUEST_EPP_BITS, val), - BITS_WITH_VALUE(AMD_CPPC_REQUEST_EPP_BITS, -1)); + error = set_cppc_request(dev, BITS_WITH_VALUE(arg2, val), + BITS_WITH_VALUE(arg2, -1)); return (error); } @@ -916,10 +914,42 @@ hwpstate_attach(device_t dev) SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "epp", CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, dev, 0, - sysctl_epp_handler, "IU", - "Efficiency/Performance Preference " - "(range from 0, most performant, through 255, most efficient)"); + "epp", CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, + dev, AMD_CPPC_REQUEST_EPP_BITS, + sysctl_cppc_request_field_handler, "IU", + "Efficiency/Performance Preference (from 0, " + "most performant, to 255, most efficient)"); + + SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, + "minimum_performance", + CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, + dev, AMD_CPPC_REQUEST_MIN_PERF_BITS, + sysctl_cppc_request_field_handler, "IU", + "Minimum allowed performance level (from 0 to 255; " + "should be smaller than 'maximum_performance'; " + "effective range limited by CPU)"); + + SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, + "maximum_performance", + CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, + dev, AMD_CPPC_REQUEST_MAX_PERF_BITS, + sysctl_cppc_request_field_handler, "IU", + "Maximum allowed performance level (from 0 to 255; " + "should be larger than 'minimum_performance'; " + "effective range limited by CPU)"); + + SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, + "desired_performance", + CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, + dev, AMD_CPPC_REQUEST_DES_PERF_BITS, + sysctl_cppc_request_field_handler, "IU", + "Desired performance level (from 0 to 255, " + "0 enables autonomous mode, otherwise value should be " + "between 'minimum_performance' and 'maximum_performance' " + "inclusive)"); } return (cpufreq_register(dev)); }