From: "Derek J. Clark" <derekjohn.clark@gmail.com>
To: lkml@antheas.dev
Cc: W_Armin@gmx.de, corbet@lwn.net, hdegoede@redhat.com,
ilpo.jarvinen@linux.intel.com, jdelvare@suse.com,
kuurtb@gmail.com, linux-doc@vger.kernel.org,
linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org,
platform-driver-x86@vger.kernel.org,
"Derek J. Clark" <derekjohn.clark@gmail.com>
Subject: [PATCH 5/6] platform/x86: wmi-msi-platform: Add MSI Claw A8 support
Date: Mon, 3 Aug 2026 15:16:13 -0700 [thread overview]
Message-ID: <20260803221614.59324-6-derekjohn.clark@gmail.com> (raw)
In-Reply-To: <20260803221614.59324-1-derekjohn.clark@gmail.com>
Adds MSI Claw A8 BZ2EM support.
- Adds FPPT (PL3)
- Adds disable toggle during startup for AMDSTAPM flag. In the Windows
DLL this feature is used when setting the device into an AI shift mode
not exposed by this driver.
- Add limits to gen 3 for SPL, SPPT, FPPT.
Signed-off-by: Derek J. Clark <derekjohn.clark@gmail.com>
---
drivers/platform/x86/msi-wmi-platform.c | 82 ++++++++++++++++++++++++-
1 file changed, 79 insertions(+), 3 deletions(-)
diff --git a/drivers/platform/x86/msi-wmi-platform.c b/drivers/platform/x86/msi-wmi-platform.c
index 35cd35fc6446..8d11dad99776 100644
--- a/drivers/platform/x86/msi-wmi-platform.c
+++ b/drivers/platform/x86/msi-wmi-platform.c
@@ -77,11 +77,17 @@
#define MSI_PLATFORM_SHIFT_GREEN (MSI_PLATFORM_SHIFT_ENABLE + 1)
#define MSI_PLATFORM_SHIFT_ECO (MSI_PLATFORM_SHIFT_ENABLE + 2)
#define MSI_PLATFORM_SHIFT_USER (MSI_PLATFORM_SHIFT_ENABLE + 3)
+#define MSI_PLATFORM_SHIFT_MANUAL (MSI_PLATFORM_SHIFT_ENABLE + 6)
/* Get_Data() and Set_Data() Params */
-#define MSI_PLATFORM_PL1_ADDR 0x50
-#define MSI_PLATFORM_PL2_ADDR 0x51
-#define MSI_PLATFORM_BAT_ADDR 0xd7
+#define MSI_PLATFORM_PL1_ADDR 0x50
+#define MSI_PLATFORM_PL2_ADDR 0x51
+#define MSI_PLATFORM_PL3_ADDR 0x52
+#define MSI_PLATFORM_AMDSTAPM_ADDR 0xc5
+#define MSI_PLATFORM_BAT_ADDR 0xd7
+
+#define MSI_PLATFORM_AMDSTAPM_SUPPORTED BIT(7)
+#define MSI_PLATFORM_AMDSTAPM_DISABLE BIT(0)
static bool force;
module_param_unsafe(force, bool, 0);
@@ -124,10 +130,14 @@ struct msi_wmi_platform_quirk {
bool charge_threshold; /* Charge threshold is supported */
bool dual_fans; /* For devices with two hwmon fans */
bool restore_curves; /* Restore factory curves on unload */
+ bool disable_stapm; /* Disable AMD STAPM auto power management on load */
+ u8 custom_shift; /* EC Shift value for PLATFORM_PROFILE_CUSTOM, 0 if unsupported */
int pl1_min; /* Minimum PL1 value */
int pl1_max; /* Maximum PL1 value */
int pl2_min; /* Minimum PL2 value */
int pl2_max; /* Maximum PL2 value */
+ int pl3_min; /* Minimum PL3 value */
+ int pl3_max; /* Maximum PL3 value */
};
struct msi_wmi_platform_factory_curves {
@@ -151,16 +161,19 @@ struct msi_wmi_platform_data {
enum msi_fw_attr_id {
MSI_ATTR_PPT_PL1_SPL,
MSI_ATTR_PPT_PL2_SPPT,
+ MSI_ATTR_PPT_PL3_FPPT,
};
static const char *const msi_fw_attr_name[] = {
[MSI_ATTR_PPT_PL1_SPL] = "ppt_pl1_spl",
[MSI_ATTR_PPT_PL2_SPPT] = "ppt_pl2_sppt",
+ [MSI_ATTR_PPT_PL3_FPPT] = "ppt_pl3_fppt",
};
static const char *const msi_fw_attr_desc[] = {
[MSI_ATTR_PPT_PL1_SPL] = "CPU Steady package limit (PL1/SPL)",
[MSI_ATTR_PPT_PL2_SPPT] = "CPU Boost slow package limit (PL2/SPPT)",
+ [MSI_ATTR_PPT_PL3_FPPT] = "CPU Boost fast package limit (PL3/FPPT)",
};
#define MSI_ATTR_LANGUAGE_CODE "en_US.UTF-8"
@@ -245,6 +258,19 @@ static struct msi_wmi_platform_quirk quirk_gen2 = {
.pl2_min = 9,
.pl2_max = 37
};
+static struct msi_wmi_platform_quirk quirk_gen3 = {
+ .shift_mode = true,
+ .charge_threshold = true,
+ .dual_fans = true,
+ .restore_curves = true,
+ .disable_stapm = true,
+ .pl1_min = 7,
+ .pl1_max = 35,
+ .pl2_min = 9,
+ .pl2_max = 40,
+ .pl3_min = 10,
+ .pl3_max = 48,
+};
static const struct dmi_system_id msi_quirks[] = {
{
@@ -271,6 +297,14 @@ static const struct dmi_system_id msi_quirks[] = {
},
.driver_data = &quirk_gen2,
},
+ {
+ .ident = "MSI Claw A8 BZ2EM",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International Co., Ltd."),
+ DMI_MATCH(DMI_BOARD_NAME, "MS-1T8K"),
+ },
+ .driver_data = &quirk_gen3,
+ },
{ }
};
@@ -862,6 +896,8 @@ static int data_get_addr(struct msi_wmi_platform_data *data,
return MSI_PLATFORM_PL1_ADDR;
case MSI_ATTR_PPT_PL2_SPPT:
return MSI_PLATFORM_PL2_ADDR;
+ case MSI_ATTR_PPT_PL3_FPPT:
+ return MSI_PLATFORM_PL3_ADDR;
default:
pr_warn("Invalid attribute id %d\n", id);
return -EINVAL;
@@ -1150,6 +1186,15 @@ static int msi_wmi_fw_attrs_init(struct msi_wmi_platform_data *data)
return err;
}
+ if (data->quirks->pl3_max) {
+ err = msi_fw_attr_init(data, MSI_ATTR_PPT_PL3_FPPT,
+ &fw_attr_type_int, data->quirks->pl3_min,
+ data->quirks->pl3_max, &data_get_value,
+ &data_set_value);
+ if (err)
+ return err;
+ }
+
return 0;
}
@@ -1421,6 +1466,31 @@ static int msi_wmi_platform_init(struct msi_wmi_platform_data *data)
return 0;
}
+static int msi_wmi_platform_disable_stapm(struct msi_wmi_platform_data *data)
+{
+ u8 buffer[32] = { 0 };
+ int ret;
+
+ buffer[0] = MSI_PLATFORM_AMDSTAPM_ADDR;
+
+ ret = msi_wmi_platform_query(data, MSI_PLATFORM_GET_DATA, buffer, sizeof(buffer));
+ if (ret < 0)
+ return ret;
+
+ /* Only touch it if firmware self-reports STAPM support */
+ if (!(buffer[1] & MSI_PLATFORM_AMDSTAPM_SUPPORTED))
+ return 0;
+
+ buffer[0] = MSI_PLATFORM_AMDSTAPM_ADDR;
+ buffer[1] |= MSI_PLATFORM_AMDSTAPM_DISABLE;
+
+ ret = msi_wmi_platform_query(data, MSI_PLATFORM_SET_DATA, buffer, sizeof(buffer));
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
static int msi_wmi_platform_profile_setup(struct msi_wmi_platform_data *data)
{
if (!data->quirks->shift_mode)
@@ -1460,6 +1530,12 @@ static int msi_wmi_platform_probe(struct wmi_device *wdev, const void *context)
if (ret < 0)
return ret;
+ if (data->quirks->disable_stapm) {
+ ret = msi_wmi_platform_disable_stapm(data);
+ if (ret < 0)
+ return ret;
+ }
+
ret = msi_wmi_platform_ec_init(data);
if (ret < 0)
return ret;
--
2.55.0
next prev parent reply other threads:[~2026-08-03 22:16 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-11 20:44 [PATCH v1 00/10] platform/x86: msi-wmi-platform: Add fan curves/platform profile/tdp/battery limiting Antheas Kapenekakis
2025-05-11 20:44 ` [PATCH v1 01/10] platform/x86: msi-wmi-platform: Use input buffer for returning result Antheas Kapenekakis
2025-05-11 23:31 ` Kurt Borja
2025-05-13 19:42 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 02/10] platform/x86: msi-wmi-platform: Add unlocked msi_wmi_platform_query Antheas Kapenekakis
2025-05-12 19:21 ` Kurt Borja
2025-05-12 20:51 ` Antheas Kapenekakis
2025-05-12 21:23 ` Kurt Borja
2025-05-12 21:51 ` Antheas Kapenekakis
2025-05-13 19:45 ` Armin Wolf
2025-05-13 19:47 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 03/10] platform/x86: msi-wmi-platform: Add quirk system Antheas Kapenekakis
2025-05-11 23:32 ` Kurt Borja
2025-05-13 20:43 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 04/10] platform/x86: msi-wmi-platform: Add support for fan control Antheas Kapenekakis
2025-05-11 23:32 ` Kurt Borja
2025-05-13 20:58 ` Armin Wolf
2025-05-19 1:35 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 05/10] platform/x86: msi-wmi-platform: Add platform profile through shift mode Antheas Kapenekakis
2025-05-11 23:33 ` Kurt Borja
2025-05-12 21:59 ` Antheas Kapenekakis
2025-05-19 1:51 ` Armin Wolf
2025-05-19 1:58 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 06/10] platform/x86: msi-wmi-platform: Add PL1/PL2 support via firmware attributes Antheas Kapenekakis
2025-05-11 23:34 ` Kurt Borja
2025-05-12 10:22 ` Antheas Kapenekakis
2025-05-19 2:08 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 07/10] platform/x86: msi-wmi-platform: Add charge_threshold support Antheas Kapenekakis
2025-05-11 23:34 ` Kurt Borja
2025-05-19 2:32 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 08/10] platform/x86: msi-wmi-platform: Drop excess fans in dual fan devices Antheas Kapenekakis
2025-05-11 23:35 ` Kurt Borja
2025-05-11 20:44 ` [PATCH v1 09/10] platform/x86: msi-wmi-platform: Update header text Antheas Kapenekakis
2025-05-19 2:33 ` Armin Wolf
2025-05-11 20:44 ` [PATCH v1 10/10] platform/x86: msi-wmi-platform: Restore fan curves on PWM disable and unload Antheas Kapenekakis
2025-05-12 19:16 ` Kurt Borja
2025-05-12 20:50 ` Antheas Kapenekakis
2025-05-11 23:30 ` [PATCH v1 00/10] platform/x86: msi-wmi-platform: Add fan curves/platform profile/tdp/battery limiting Kurt Borja
2025-05-12 10:16 ` Antheas Kapenekakis
2025-05-12 19:05 ` Kurt Borja
2025-05-19 2:37 ` Armin Wolf
2025-05-30 20:50 ` Antheas Kapenekakis
2025-05-30 21:15 ` Armin Wolf
2025-05-30 21:28 ` Antheas Kapenekakis
2025-05-30 22:00 ` Armin Wolf
2026-05-08 18:41 ` Derek J. Clark
2026-05-09 17:25 ` Antheas Kapenekakis
2026-08-03 22:16 ` [PATCH 0/6] " Derek J. Clark
2026-08-03 22:16 ` [PATCH 1/6] platform/x86: msi-wmi-platform: Move guard out of switch in platform_write() Derek J. Clark
2026-08-03 22:16 ` [PATCH 2/6] platform/x86: msi-wmi-platform: fix: Remove unused err Derek J. Clark
2026-08-03 22:16 ` [PATCH 3/6] platform/x86: msi-wmi-platform: terminate msi_quirks DMI table Derek J. Clark
2026-08-03 22:16 ` [PATCH 4/6] platform/x86: msi-wmi-platform: Clean up devices Derek J. Clark
2026-08-03 22:16 ` Derek J. Clark [this message]
2026-08-03 22:16 ` [PATCH 6/6] platform-x86: msi-wmi-platform: Add Gen 4 device 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=20260803221614.59324-6-derekjohn.clark@gmail.com \
--to=derekjohn.clark@gmail.com \
--cc=W_Armin@gmx.de \
--cc=corbet@lwn.net \
--cc=hdegoede@redhat.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jdelvare@suse.com \
--cc=kuurtb@gmail.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lkml@antheas.dev \
--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