From: "Derek J. Clark" <derekjohn.clark@gmail.com>
To: "Rong Zhang" <i@rong.moe>,
"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>,
Kurt Borja <kuurtb@gmail.com>,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v9 12/16] platform/x86: lenovo-wmi-other: Add GPU tunable attributes
Date: Sat, 11 Apr 2026 09:50:10 -0700 [thread overview]
Message-ID: <77DCB409-FD0A-4A73-BAA0-1AADDF5AB25D@gmail.com> (raw)
In-Reply-To: <8bc493ef82f143191239c43487313904a7082289.camel@rong.moe>
On April 11, 2026 9:40:58 AM PDT, Rong Zhang <i@rong.moe> wrote:
>Hi Derek,
>
>On Sat, 2026-04-11 at 16:23 +0000, Derek J. Clark wrote:
>> Use an enum for all GPU attribute feature ID's and add GPU attributes.
>>
>> Reviewed-by: Rong Zhang <i@rong.moe>
>> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>> Signed-off-by: Derek J. Clark <derekjohn.clark@gmail.com>
>> ---
>> v9:
>> - Rename gpu_didvid -> dgpu_didvid in documentation to match actual
>> attribute name.
>> v7:
>> - Fix typo in dgpu_boost_clk attribute string.
>> v4:
>> - Align CPU feature enum values.
>> - Remove gpu_oc_stat from Documentation.
>> v3:
>> - Remove gpu_oc_stat.
>> ---
>> .../wmi/devices/lenovo-wmi-other.rst | 10 ++
>> drivers/platform/x86/lenovo/wmi-capdata.h | 1 +
>> drivers/platform/x86/lenovo/wmi-other.c | 105 ++++++++++++++++++
>> 3 files changed, 116 insertions(+)
>>
>> diff --git a/Documentation/wmi/devices/lenovo-wmi-other.rst b/Documentation/wmi/devices/lenovo-wmi-other.rst
>> index 189dd4d31926..011054d64eac 100644
>> --- a/Documentation/wmi/devices/lenovo-wmi-other.rst
>> +++ b/Documentation/wmi/devices/lenovo-wmi-other.rst
>> @@ -69,6 +69,16 @@ Each attribute has the following properties:
>>
>> The following firmware-attributes are implemented:
>> - cpu_temp: CPU Thermal Load Limit
>> + - dgpu_boost_clk: Dedicated GPU Boost Clock
>> + - dgpu_didvid: Dedicated GPU Device Identifier and Vendor Identifier
>
>Thanks for correcting the typo in the documentation. However...
>
>> + - dgpu_enable: Dedicated GPU Enabled Status
>> + - 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_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 f2d45cd7a188..891b12ca1db6 100644
>> --- a/drivers/platform/x86/lenovo/wmi-capdata.h
>> +++ b/drivers/platform/x86/lenovo/wmi-capdata.h
>> @@ -20,6 +20,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 adf4300415f8..8abfea8c308a 100644
>> --- a/drivers/platform/x86/lenovo/wmi-other.c
>> +++ b/drivers/platform/x86/lenovo/wmi-other.c
>> @@ -61,6 +61,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_CROSSLOAD 0x01
>> @@ -624,6 +637,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;
>> @@ -959,6 +1032,7 @@ static bool 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",
>> @@ -984,9 +1058,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, "dgpu_boost_clk",
>> + "Set the dedicated GPU boost clock");
>> +LWMI_ATTR_GROUP_TUNABLE_CAP01(dgpu_didvid, "gpu_didvid",
>
>...here the _fsname is still mismatched.
>
-_-
Damnit
I'll fix it in the next version, this time tomorrow if there are no other comments.
>Thanks,
>Rong
>
>> + "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-04-11 16:50 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-11 16:23 [PATCH v9 00/16] platform-x86: lenovo-wmi: Add fixes and enhancement Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 01/16] platform/x86: lenovo-wmi-helpers: Fix memory leak in lwmi_dev_evaluate_int() Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 02/16] platform/x86: lenovo-wmi-other: Balance IDA id allocation and free Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 03/16] platform/x86: lenovo-wmi-other: Balance component bind and unbind Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 04/16] platform/x86: lenovo-wmi-other: Zero initialize WMI arguments Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 05/16] platform/x86: lenovo-wmi-other: Fix tunable_attr_01 struct members Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 06/16] platform/x86: lenovo-wmi-other: Limit adding attributes to supported devices Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 07/16] platform/x86: lenovo: Decouple lenovo-wmi-gamezone and lenovo-wmi-other Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 08/16] platform/x86: lenovo-wmi-helpers: Move gamezone enums to wmi-helpers Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 09/16] platform/x86: lenovo-wmi-other: Move LWMI_FAN_DIV Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 10/16] platform/x86: lenovo-wmi-other: Add lwmi_attr_id() function Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 11/16] platform/x86: lenovo-wmi-other: Add missing CPU tunable attributes Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 12/16] platform/x86: lenovo-wmi-other: Add GPU " Derek J. Clark
2026-04-11 16:40 ` Rong Zhang
2026-04-11 16:50 ` Derek J. Clark [this message]
2026-04-11 16:23 ` [PATCH v9 13/16] platform/x86: lenovo-wmi-other: Rename LWMI_OM_FW_ATTR_BASE_PATH Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 14/16] platform/x86: lenovo-wmi-other: Add WMI battery charge limiting Derek J. Clark
2026-04-24 12:50 ` Nícolas F. R. A. Prado
2026-04-24 14:13 ` Rong Zhang
2026-05-11 18:48 ` Hans de Goede
2026-05-11 19:48 ` Derek J. Clark
2026-05-11 20:10 ` Rong Zhang
2026-05-12 9:40 ` Hans de Goede
2026-04-11 16:23 ` [PATCH v9 15/16] platform/x86: lenovo-wmi-helpers: Add helper for creating per-device debugfs dir Derek J. Clark
2026-04-11 16:23 ` [PATCH v9 16/16] platform/x86: lenovo-wmi-capdata: Add debugfs file for dumping capdata 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=77DCB409-FD0A-4A73-BAA0-1AADDF5AB25D@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®