From: "Derek J. Clark" <derekjohn.clark@gmail.com>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Hans de Goede" <hansg@kernel.org>
Cc: Mark Pearson <mpearson-lenovo@squebb.ca>,
Armin Wolf <W_Armin@gmx.de>, Jonathan Corbet <corbet@lwn.net>,
Rong Zhang <i@rong.moe>, Kurt Borja <kuurtb@gmail.com>,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 4/6] platform/x86: lenovo-wmi-other: Add GPU tunable attributes
Date: Mon, 23 Feb 2026 21:29:10 -0800 [thread overview]
Message-ID: <C24F8880-0475-4DD9-A680-66AF57DE1668@gmail.com> (raw)
In-Reply-To: <20260224043200.2680384-5-derekjohn.clark@gmail.com>
On February 23, 2026 8:31:58 PM PST, "Derek J. Clark" <derekjohn.clark@gmail.com> wrote:
>Use an enum for all GPU attribute feature ID's and add GPU attributes.
>
>Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>Signed-off-by: Derek J. Clark <derekjohn.clark@gmail.com>
>---
> .../wmi/devices/lenovo-wmi-other.rst | 11 ++
> drivers/platform/x86/lenovo/wmi-capdata.h | 1 +
> drivers/platform/x86/lenovo/wmi-other.c | 105 ++++++++++++++++++
> 3 files changed, 117 insertions(+)
>
>diff --git a/Documentation/wmi/devices/lenovo-wmi-other.rst b/Documentation/wmi/devices/lenovo-wmi-other.rst
>index f4763ed66cc6..f7564b23bb7f 100644
>--- a/Documentation/wmi/devices/lenovo-wmi-other.rst
>+++ b/Documentation/wmi/devices/lenovo-wmi-other.rst
>@@ -70,6 +70,17 @@ Each attribute has the following properties:
> The following firmware-attributes are implemented:
> - cpu_oc_stat: CPU Overlocking Status
I forgot to remove CPU OC status from the documentation, reminding myself for v4.
> - cpu_temp: CPU Thermal Load Limit
>+ - dgpu_boost_clk: Dedicated GPU Boost Clock
>+ - dgpu_enable: Dedicated GPU Enabled Status
>+ - gpu_didvid: GPU Device Identifier and Vendor Identifier
>+ - gpu_mode: GPU Mode by Power Limit
>+ - gpu_nv_ac_offset: Nvidia GPU AC Total Processing Power Baseline Offset
>+ - gpu_nv_bpl: Nvidia GPU Base Power Limit
>+ - gpu_nv_cpu_boost: Nvidia GPU to CPU Dynamic Boost Limit
>+ - gpu_nv_ctgp: Nvidia GPU Configurable Total Graphics Power
>+ - gpu_nv_ppab: Nvidia GPU Power Performance Aware Boost Limit
>+ - gpu_oc_stat: GPU Overclocking Status
Same for GPU OC Status
- Derek
>+ - gpu_temp: GPU Thermal Load Limit
> - ppt_cpu_cl: CPU Cross Loading Power Limit
> - ppt_pl1_apu_spl: Platform Profile Tracking APU Sustained Power Limit
> - ppt_pl1_spl: Platform Profile Tracking Sustained Power Limit
>diff --git a/drivers/platform/x86/lenovo/wmi-capdata.h b/drivers/platform/x86/lenovo/wmi-capdata.h
>index aa48f43cbb43..b7f9ee7b301a 100644
>--- a/drivers/platform/x86/lenovo/wmi-capdata.h
>+++ b/drivers/platform/x86/lenovo/wmi-capdata.h
>@@ -25,6 +25,7 @@
>
> enum lwmi_device_id {
> LWMI_DEVICE_ID_CPU = 0x01,
>+ LWMI_DEVICE_ID_GPU = 0x02,
> LWMI_DEVICE_ID_FAN = 0x04,
> };
>
>diff --git a/drivers/platform/x86/lenovo/wmi-other.c b/drivers/platform/x86/lenovo/wmi-other.c
>index 87aba244da84..67768f6a50e0 100644
>--- a/drivers/platform/x86/lenovo/wmi-other.c
>+++ b/drivers/platform/x86/lenovo/wmi-other.c
>@@ -65,6 +65,19 @@ enum lwmi_feature_id_cpu {
> LWMI_FEATURE_ID_CPU_IPL = 0x09,
> };
>
>+enum lwmi_feature_id_gpu {
>+ LWMI_FEATURE_ID_GPU_NV_PPAB = 0x01,
>+ LWMI_FEATURE_ID_GPU_NV_CTGP = 0x02,
>+ LWMI_FEATURE_ID_GPU_TEMP = 0x03,
>+ LWMI_FEATURE_ID_GPU_AC_OFFSET = 0x04,
>+ LWMI_FEATURE_ID_DGPU_BOOST_CLK = 0x06,
>+ LWMI_FEATURE_ID_DGPU_EN = 0x07,
>+ LWMI_FEATURE_ID_GPU_MODE = 0x08,
>+ LWMI_FEATURE_ID_DGPU_DIDVID = 0x09,
>+ LWMI_FEATURE_ID_GPU_NV_BPL = 0x0a,
>+ LWMI_FEATURE_ID_GPU_NV_CPU_BOOST = 0x0b,
>+};
>+
> #define LWMI_FEATURE_ID_FAN_RPM 0x03
>
> #define LWMI_TYPE_ID_NONE 0x00
>@@ -631,6 +644,66 @@ static struct tunable_attr_01 ppt_pl4_ipl_cl = {
> .type_id = LWMI_TYPE_ID_CROSSLOAD,
> };
>
>+static struct tunable_attr_01 gpu_nv_ppab = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_GPU_NV_PPAB,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 gpu_nv_ctgp = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_GPU_NV_CTGP,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 gpu_temp = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_GPU_TEMP,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 gpu_nv_ac_offset = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_GPU_AC_OFFSET,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 dgpu_boost_clk = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_DGPU_BOOST_CLK,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 dgpu_enable = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_DGPU_EN,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 gpu_mode = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_GPU_MODE,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 dgpu_didvid = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_DGPU_DIDVID,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 gpu_nv_bpl = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_GPU_NV_BPL,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
>+static struct tunable_attr_01 gpu_nv_cpu_boost = {
>+ .device_id = LWMI_DEVICE_ID_GPU,
>+ .feature_id = LWMI_FEATURE_ID_GPU_NV_CPU_BOOST,
>+ .type_id = LWMI_TYPE_ID_NONE,
>+};
>+
> struct capdata01_attr_group {
> const struct attribute_group *attr_group;
> struct tunable_attr_01 *tunable_attr;
>@@ -1069,6 +1142,7 @@ static int lwmi_attr_01_is_supported(struct tunable_attr_01 *tunable_attr)
> .name = _fsname, .attrs = _attrname##_attrs \
> }
>
>+/* CPU tunable attributes */
> LWMI_ATTR_GROUP_TUNABLE_CAP01(cpu_temp, "cpu_temp",
> "Set the CPU thermal load limit");
> LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_cpu_cl, "ppt_cpu_cl",
>@@ -1094,9 +1168,40 @@ LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl4_ipl, "ppt_pl4_ipl",
> LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl4_ipl_cl, "ppt_pl4_ipl_cl",
> "Set the CPU cross loading instantaneous power limit");
>
>+/* GPU tunable attributes */
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(dgpu_boost_clk, "gpu_boost_clk",
>+ "Set the dedicated GPU boost clock");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(dgpu_didvid, "gpu_didvid",
>+ "Get the GPU device identifier and vendor identifier");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(dgpu_enable, "dgpu_enable",
>+ "Set the dedicated Nvidia GPU enabled status");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(gpu_mode, "gpu_mode",
>+ "Set the GPU mode by power limit");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(gpu_nv_ac_offset, "gpu_nv_ac_offset",
>+ "Set the Nvidia GPU AC total processing power baseline offset");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(gpu_nv_bpl, "gpu_nv_bpl",
>+ "Set the Nvidia GPU base power limit");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(gpu_nv_cpu_boost, "gpu_nv_cpu_boost",
>+ "Set the Nvidia GPU to CPU dynamic boost limit");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(gpu_nv_ctgp, "gpu_nv_ctgp",
>+ "Set the GPU configurable total graphics power");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(gpu_nv_ppab, "gpu_nv_ppab",
>+ "Set the Nvidia GPU power performance aware boost limit");
>+LWMI_ATTR_GROUP_TUNABLE_CAP01(gpu_temp, "gpu_temp",
>+ "Set the GPU thermal load limit");
>
> static struct capdata01_attr_group cd01_attr_groups[] = {
> { &cpu_temp_attr_group, &cpu_temp },
>+ { &dgpu_boost_clk_attr_group, &dgpu_boost_clk },
>+ { &dgpu_didvid_attr_group, &dgpu_didvid },
>+ { &dgpu_enable_attr_group, &dgpu_enable },
>+ { &gpu_mode_attr_group, &gpu_mode },
>+ { &gpu_nv_ac_offset_attr_group, &gpu_nv_ac_offset },
>+ { &gpu_nv_bpl_attr_group, &gpu_nv_bpl },
>+ { &gpu_nv_cpu_boost_attr_group, &gpu_nv_cpu_boost },
>+ { &gpu_nv_ctgp_attr_group, &gpu_nv_ctgp },
>+ { &gpu_nv_ppab_attr_group, &gpu_nv_ppab },
>+ { &gpu_temp_attr_group, &gpu_temp },
> { &ppt_cpu_cl_attr_group, &ppt_cpu_cl },
> { &ppt_pl1_apu_spl_attr_group, &ppt_pl1_apu_spl },
> { &ppt_pl1_spl_attr_group, &ppt_pl1_spl },
next prev parent reply other threads:[~2026-02-24 5:29 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-24 4:31 [PATCH v3 0/6] platform-x86: lenovo-wmi: Add fixes and enhancement Derek J. Clark
2026-02-24 4:31 ` [PATCH v3 1/6] platform/x86: lenovo-wmi-other: Add LWMI_ATTR_ID Macro Derek J. Clark
2026-02-24 8:42 ` Ilpo Järvinen
2026-02-25 17:52 ` Derek J. Clark
2026-02-26 9:18 ` Ilpo Järvinen
2026-02-24 8:43 ` Ilpo Järvinen
2026-02-24 4:31 ` [PATCH v3 2/6] platform/x86: lenovo-wmi-other: Limit adding attributes to supported devices Derek J. Clark
2026-02-24 8:47 ` Ilpo Järvinen
2026-02-25 17:58 ` Derek J. Clark
2026-02-26 9:20 ` Ilpo Järvinen
2026-02-25 17:14 ` Rong Zhang
2026-02-25 18:09 ` Derek J. Clark
2026-02-25 18:33 ` Rong Zhang
2026-02-24 4:31 ` [PATCH v3 3/6] platform/x86: lenovo-wmi-other: Add missing CPU tunable attributes Derek J. Clark
2026-02-24 8:49 ` Ilpo Järvinen
2026-02-24 4:31 ` [PATCH v3 4/6] platform/x86: lenovo-wmi-other: Add GPU " Derek J. Clark
2026-02-24 5:29 ` Derek J. Clark [this message]
2026-02-24 8:49 ` Ilpo Järvinen
2026-02-24 4:31 ` [PATCH v3 5/6] platform-x86: lenovo-wmi-other: Rename LWMI_OM_FW_ATTR_BASE_PATH Derek J. Clark
2026-02-24 8:51 ` Ilpo Järvinen
2026-02-25 18:00 ` Derek J. Clark
2026-02-25 17:25 ` Rong Zhang
2026-02-25 18:11 ` Derek J. Clark
2026-02-24 4:32 ` [PATCH v3 6/6] platform/x86: lenovo-wmi-other: Add WMI battery charge limiting Derek J. Clark
2026-02-24 9:05 ` Ilpo Järvinen
2026-02-25 18:04 ` Derek J. Clark
2026-02-24 9:17 ` Ilpo Järvinen
2026-02-25 17:55 ` Rong Zhang
2026-02-25 18:23 ` Derek J. Clark
2026-02-25 18:44 ` Rong Zhang
2026-02-25 18:02 ` [PATCH v3 0/6] platform-x86: lenovo-wmi: Add fixes and enhancement Rong Zhang
2026-02-25 18:26 ` Derek J. Clark
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=C24F8880-0475-4DD9-A680-66AF57DE1668@gmail.com \
--to=derekjohn.clark@gmail.com \
--cc=W_Armin@gmx.de \
--cc=corbet@lwn.net \
--cc=hansg@kernel.org \
--cc=i@rong.moe \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=kuurtb@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mpearson-lenovo@squebb.ca \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®