From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: "Derek J. Clark" <derekjohn.clark@gmail.com>
Cc: Hans de Goede <hansg@kernel.org>,
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,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 3/6] platform/x86: lenovo-wmi-other: Add missing CPU tunable attributes
Date: Tue, 24 Feb 2026 10:49:07 +0200 (EET) [thread overview]
Message-ID: <52c0d752-99d0-77a6-04a6-18b193c154ad@linux.intel.com> (raw)
In-Reply-To: <20260224043200.2680384-4-derekjohn.clark@gmail.com>
On Tue, 24 Feb 2026, Derek J. Clark wrote:
> Use an enum for device ID's and CPU attribute feature ID's, add
> missing CPU 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 | 10 ++
> drivers/platform/x86/lenovo/wmi-capdata.h | 5 +-
> drivers/platform/x86/lenovo/wmi-other.c | 98 ++++++++++++++++++-
> 3 files changed, 107 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/wmi/devices/lenovo-wmi-other.rst b/Documentation/wmi/devices/lenovo-wmi-other.rst
> index 01d471156738..f4763ed66cc6 100644
> --- a/Documentation/wmi/devices/lenovo-wmi-other.rst
> +++ b/Documentation/wmi/devices/lenovo-wmi-other.rst
> @@ -68,9 +68,19 @@ Each attribute has the following properties:
> - type
>
> The following firmware-attributes are implemented:
> + - cpu_oc_stat: CPU Overlocking Status
> + - cpu_temp: CPU 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
> + - ppt_pl1_spl_cl: Platform Profile Tracking Cross Loading Sustained Power Limit
> + - ppt_pl1_tau: Exceed Duration for Platform Profile Tracking Sustained Power Limit
> - ppt_pl2_sppt: Platform Profile Tracking Slow Package Power Tracking
> + - ppt_pl2_sppt_cl: Platform Profile Tracking Cross Loading Slow Package Tracking
> - ppt_pl3_fppt: Platform Profile Tracking Fast Package Power Tracking
> + - ppt_pl3_fppt_cl: Platform Profile Tracking Cross Loading Fast Package Power Tracking
> + - ppt_pl4_ipl: Platform Profile Trakcing Instantaneous Power Limit
> + - ppt_pl4_ipl_cl: Platform Profile Tracking Cross Loading Instantaneous Power Limit
>
> LENOVO_FAN_TEST_DATA
> -------------------------
> diff --git a/drivers/platform/x86/lenovo/wmi-capdata.h b/drivers/platform/x86/lenovo/wmi-capdata.h
> index 27202e2dc8a5..aa48f43cbb43 100644
> --- a/drivers/platform/x86/lenovo/wmi-capdata.h
> +++ b/drivers/platform/x86/lenovo/wmi-capdata.h
> @@ -23,7 +23,10 @@
> FIELD_PREP(LWMI_ATTR_MODE_ID_MASK, mode) | \
> FIELD_PREP(LWMI_ATTR_TYPE_ID_MASK, type))
>
> -#define LWMI_DEVICE_ID_FAN 0x04
> +enum lwmi_device_id {
> + LWMI_DEVICE_ID_CPU = 0x01,
> + LWMI_DEVICE_ID_FAN = 0x04,
> +};
>
> struct component_match;
> struct device;
> diff --git a/drivers/platform/x86/lenovo/wmi-other.c b/drivers/platform/x86/lenovo/wmi-other.c
> index f3f12303e379..87aba244da84 100644
> --- a/drivers/platform/x86/lenovo/wmi-other.c
> +++ b/drivers/platform/x86/lenovo/wmi-other.c
> @@ -54,15 +54,21 @@
>
> #define LENOVO_OTHER_MODE_GUID "DC2A8805-3A8C-41BA-A6F7-092E0089CD3B"
>
> -#define LWMI_DEVICE_ID_CPU 0x01
> -
> -#define LWMI_FEATURE_ID_CPU_SPPT 0x01
> -#define LWMI_FEATURE_ID_CPU_SPL 0x02
> -#define LWMI_FEATURE_ID_CPU_FPPT 0x03
> +enum lwmi_feature_id_cpu {
> + LWMI_FEATURE_ID_CPU_SPPT = 0x01,
> + LWMI_FEATURE_ID_CPU_SPL = 0x02,
> + LWMI_FEATURE_ID_CPU_FPPT = 0x03,
> + LWMI_FEATURE_ID_CPU_TEMP = 0x04,
> + LWMI_FEATURE_ID_CPU_APU = 0x05,
> + LWMI_FEATURE_ID_CPU_CL = 0x06,
> + LWMI_FEATURE_ID_CPU_TAU = 0x07,
> + LWMI_FEATURE_ID_CPU_IPL = 0x09,
Please align a groups of values.
> +};
>
> #define LWMI_FEATURE_ID_FAN_RPM 0x03
>
> #define LWMI_TYPE_ID_NONE 0x00
> +#define LWMI_TYPE_ID_CROSSLOAD 0x01
>
> #define LWMI_FEATURE_VALUE_GET 17
> #define LWMI_FEATURE_VALUE_SET 18
> @@ -559,18 +565,72 @@ static struct tunable_attr_01 ppt_pl1_spl = {
> .type_id = LWMI_TYPE_ID_NONE,
> };
>
> +static struct tunable_attr_01 ppt_pl1_spl_cl = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_SPL,
> + .type_id = LWMI_TYPE_ID_CROSSLOAD,
> +};
> +
> static struct tunable_attr_01 ppt_pl2_sppt = {
> .device_id = LWMI_DEVICE_ID_CPU,
> .feature_id = LWMI_FEATURE_ID_CPU_SPPT,
> .type_id = LWMI_TYPE_ID_NONE,
> };
>
> +static struct tunable_attr_01 ppt_pl2_sppt_cl = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_SPPT,
> + .type_id = LWMI_TYPE_ID_CROSSLOAD,
> +};
> +
> static struct tunable_attr_01 ppt_pl3_fppt = {
> .device_id = LWMI_DEVICE_ID_CPU,
> .feature_id = LWMI_FEATURE_ID_CPU_FPPT,
> .type_id = LWMI_TYPE_ID_NONE,
> };
>
> +static struct tunable_attr_01 ppt_pl3_fppt_cl = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_FPPT,
> + .type_id = LWMI_TYPE_ID_CROSSLOAD,
> +};
> +
> +static struct tunable_attr_01 cpu_temp = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_TEMP,
> + .type_id = LWMI_TYPE_ID_NONE,
> +};
> +
> +static struct tunable_attr_01 ppt_pl1_apu_spl = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_APU,
> + .type_id = LWMI_TYPE_ID_NONE,
> +};
> +
> +static struct tunable_attr_01 ppt_cpu_cl = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_CL,
> + .type_id = LWMI_TYPE_ID_NONE,
> +};
> +
> +static struct tunable_attr_01 ppt_pl1_tau = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_TAU,
> + .type_id = LWMI_TYPE_ID_NONE,
> +};
> +
> +static struct tunable_attr_01 ppt_pl4_ipl = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_IPL,
> + .type_id = LWMI_TYPE_ID_NONE,
> +};
> +
> +static struct tunable_attr_01 ppt_pl4_ipl_cl = {
> + .device_id = LWMI_DEVICE_ID_CPU,
> + .feature_id = LWMI_FEATURE_ID_CPU_IPL,
> + .type_id = LWMI_TYPE_ID_CROSSLOAD,
> +};
> +
> struct capdata01_attr_group {
> const struct attribute_group *attr_group;
> struct tunable_attr_01 *tunable_attr;
> @@ -1009,17 +1069,45 @@ static int lwmi_attr_01_is_supported(struct tunable_attr_01 *tunable_attr)
> .name = _fsname, .attrs = _attrname##_attrs \
> }
>
> +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",
> + "Set the CPU cross loading power limit");
> +LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl1_apu_spl, "ppt_pl1_apu_spl",
> + "Set the APU sustained power limit");
> LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl1_spl, "ppt_pl1_spl",
> "Set the CPU sustained power limit");
> +LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl1_spl_cl, "ppt_pl1_spl_cl",
> + "Set the CPU cross loading sustained power limit");
> LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl2_sppt, "ppt_pl2_sppt",
> "Set the CPU slow package power tracking limit");
> +LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl2_sppt_cl, "ppt_pl2_sppt_cl",
> + "Set the CPU cross loading slow package power tracking limit");
> LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl3_fppt, "ppt_pl3_fppt",
> "Set the CPU fast package power tracking limit");
> +LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl3_fppt_cl, "ppt_pl3_fppt_cl",
> + "Set the CPU cross loading fast package power tracking limit");
> +LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl1_tau, "ppt_pl1_tau",
> + "Set the CPU sustained power limit exceed duration");
> +LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl4_ipl, "ppt_pl4_ipl",
> + "Set the CPU instantaneous power limit");
> +LWMI_ATTR_GROUP_TUNABLE_CAP01(ppt_pl4_ipl_cl, "ppt_pl4_ipl_cl",
> + "Set the CPU cross loading instantaneous power limit");
> +
>
> static struct capdata01_attr_group cd01_attr_groups[] = {
> + { &cpu_temp_attr_group, &cpu_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 },
> + { &ppt_pl1_spl_cl_attr_group, &ppt_pl1_spl_cl },
> + { &ppt_pl1_tau_attr_group, &ppt_pl1_tau },
> { &ppt_pl2_sppt_attr_group, &ppt_pl2_sppt },
> + { &ppt_pl2_sppt_cl_attr_group, &ppt_pl2_sppt_cl },
> { &ppt_pl3_fppt_attr_group, &ppt_pl3_fppt },
> + { &ppt_pl3_fppt_cl_attr_group, &ppt_pl3_fppt_cl },
> + { &ppt_pl4_ipl_attr_group, &ppt_pl4_ipl },
> + { &ppt_pl4_ipl_cl_attr_group, &ppt_pl4_ipl_cl },
> {},
> };
>
>
--
i.
next prev parent reply other threads:[~2026-02-24 8:49 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 [this message]
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
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=52c0d752-99d0-77a6-04a6-18b193c154ad@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=W_Armin@gmx.de \
--cc=corbet@lwn.net \
--cc=derekjohn.clark@gmail.com \
--cc=hansg@kernel.org \
--cc=i@rong.moe \
--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