mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/3] platform/x86: asus-armoury: Add dgpu_power_state and check in dgpu_disable
@ 2026-08-05 18:28 Marco Scardovi
  2026-08-05 18:28 ` [PATCH 1/3] platform/x86: asus-wmi: Add ASUS_WMI_DEVID_DGPU_POWER_STATE define Marco Scardovi
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Marco Scardovi @ 2026-08-05 18:28 UTC (permalink / raw)
  To: Corentin Chary, Luke D . Jones, Denis Benato, Hans de Goede,
	Ilpo Järvinen
  Cc: platform-driver-x86, linux-kernel, Marco Scardovi

This patch series adds support for WMI device ID 0x00120097
(ASUS_WMI_DEVID_DGPU_POWER_STATE) to query the power state level of the
discrete GPU (dGPU) on ASUS ROG laptops, and uses it to prevent disabling
the dGPU while it is in active use.

--- Background & How it Works ---

Modern ASUS ROG firmware provides WMI device ID 0x00120097 in the ACPI DSTS
evaluation method:

If ((IIA0 == 0x00120097))
{
  Return (0x00010000)
}

When queried, DSTS returns:
  - Bit 16 (0x00010000): Presence bit (set when supported by ACPI).
  - Bit 0  (0x00000001): Power state status:
      * 0: D3 cold (off / suspended)
      * 1: D0 (active / powered on)

--- Patch Series Summary ---

- Patch 1/3: Defines ASUS_WMI_DEVID_DGPU_POWER_STATE (0x00120097) in
  include/linux/platform_data/x86/asus-wmi.h.
- Patch 2/3: Registers the read-only sysfs attribute 'dgpu_power_state' in
  drivers/platform/x86/asus-armoury.c under firmware_attributes class.
- Patch 3/3: Consolidates dgpu_disable checks under a single 'if (disable)'
  block and returns -EBUSY if an attempt is made to disable the dGPU while active.

--- Testing ---

Verified on ASUS ROG G614PR hardware:
- Reading 'current_value' returns 0 when the dGPU is suspended in D3 cold,
  and 1 when active in D0.
- Attempting to disable the dGPU while in use returns -EBUSY.

Suggested-by: Denis Benato <denis.benato@linux.dev>
Signed-off-by: Marco Scardovi <scardracs@disroot.org>

Marco Scardovi (3):
  platform/x86: asus-wmi: Add ASUS_WMI_DEVID_DGPU_POWER_STATE define
  platform/x86: asus-armoury: Add dgpu_power_state attribute
  platform/x86: asus-armoury: Prevent disabling dGPU when in use

 drivers/platform/x86/asus-armoury.c        | 29 ++++++++++++++++------
 include/linux/platform_data/x86/asus-wmi.h |  3 ++-
 2 files changed, 24 insertions(+), 8 deletions(-)

-- 
2.55.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/3] platform/x86: asus-wmi: Add ASUS_WMI_DEVID_DGPU_POWER_STATE define
  2026-08-05 18:28 [PATCH 0/3] platform/x86: asus-armoury: Add dgpu_power_state and check in dgpu_disable Marco Scardovi
@ 2026-08-05 18:28 ` Marco Scardovi
  2026-08-05 18:28 ` [PATCH 2/3] platform/x86: asus-armoury: Add dgpu_power_state attribute Marco Scardovi
  2026-08-05 18:28 ` [PATCH 3/3] platform/x86: asus-armoury: Prevent disabling dGPU when in use Marco Scardovi
  2 siblings, 0 replies; 4+ messages in thread
From: Marco Scardovi @ 2026-08-05 18:28 UTC (permalink / raw)
  To: Corentin Chary, Luke D . Jones, Denis Benato, Hans de Goede,
	Ilpo Järvinen
  Cc: platform-driver-x86, linux-kernel, Marco Scardovi

Add WMI device ID 0x00120097 (ASUS_WMI_DEVID_DGPU_POWER_STATE) to the
asus-wmi platform header. This device ID is used on ASUS ROG laptops to
query the discrete GPU (dGPU) power state level.

Suggested-by: Denis Benato <denis.benato@linux.dev>
Signed-off-by: Marco Scardovi <scardracs@disroot.org>
---
 include/linux/platform_data/x86/asus-wmi.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
index b5ed8c83ace1..289be6ac7335 100644
--- a/include/linux/platform_data/x86/asus-wmi.h
+++ b/include/linux/platform_data/x86/asus-wmi.h
@@ -140,8 +140,9 @@
 
 #define ASUS_WMI_DEVID_APU_MEM		0x000600C1
 
-#define ASUS_WMI_DEVID_DGPU_BASE_TGP	0x00120099
+#define ASUS_WMI_DEVID_DGPU_POWER_STATE	0x00120097
 #define ASUS_WMI_DEVID_DGPU_SET_TGP	0x00120098
+#define ASUS_WMI_DEVID_DGPU_BASE_TGP	0x00120099
 
 /* gpu mux switch, 0 = dGPU, 1 = Optimus */
 #define ASUS_WMI_DEVID_GPU_MUX		0x00090016
-- 
2.55.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/3] platform/x86: asus-armoury: Add dgpu_power_state attribute
  2026-08-05 18:28 [PATCH 0/3] platform/x86: asus-armoury: Add dgpu_power_state and check in dgpu_disable Marco Scardovi
  2026-08-05 18:28 ` [PATCH 1/3] platform/x86: asus-wmi: Add ASUS_WMI_DEVID_DGPU_POWER_STATE define Marco Scardovi
@ 2026-08-05 18:28 ` Marco Scardovi
  2026-08-05 18:28 ` [PATCH 3/3] platform/x86: asus-armoury: Prevent disabling dGPU when in use Marco Scardovi
  2 siblings, 0 replies; 4+ messages in thread
From: Marco Scardovi @ 2026-08-05 18:28 UTC (permalink / raw)
  To: Corentin Chary, Luke D . Jones, Denis Benato, Hans de Goede,
	Ilpo Järvinen
  Cc: platform-driver-x86, linux-kernel, Marco Scardovi

Add support for WMI device ID 0x00120097 (ASUS_WMI_DEVID_DGPU_POWER_STATE)
in the asus-armoury driver. This exposes a read-only sysfs attribute
'dgpu_power_state' under the firmware_attributes class to query the
discrete GPU power state (0: D3 cold, 1: D0 active).

Suggested-by: Denis Benato <denis.benato@linux.dev>
Signed-off-by: Marco Scardovi <scardracs@disroot.org>
---
 drivers/platform/x86/asus-armoury.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
index 93d9665717af..f745924af8a8 100644
--- a/drivers/platform/x86/asus-armoury.c
+++ b/drivers/platform/x86/asus-armoury.c
@@ -786,6 +786,8 @@ ASUS_ATTR_GROUP_BOOL_RW(screen_auto_brightness, "screen_auto_brightness",
 			"Set the panel brightness to Off<0> or On<1>");
 ASUS_ATTR_GROUP_BOOL_RO(egpu_connected, "egpu_connected", ASUS_WMI_DEVID_EGPU_CONNECTED,
 			"Show the eGPU connection status");
+ASUS_ATTR_GROUP_BOOL_RO(dgpu_power_state, "dgpu_power_state", ASUS_WMI_DEVID_DGPU_POWER_STATE,
+			"Show the dGPU power state (0: D3 cold, 1: D0 active)");
 ASUS_ATTR_GROUP_ROG_TUNABLE(ppt_pl1_spl, ATTR_PPT_PL1_SPL, ASUS_WMI_DEVID_PPT_PL1_SPL,
 			    "Set the CPU slow package limit");
 ASUS_ATTR_GROUP_ROG_TUNABLE(ppt_pl2_sppt, ATTR_PPT_PL2_SPPT, ASUS_WMI_DEVID_PPT_PL2_SPPT,
@@ -810,6 +812,7 @@ static const struct asus_attr_group armoury_attr_groups[] = {
 	{ &egpu_connected_attr_group, ASUS_WMI_DEVID_EGPU_CONNECTED },
 	{ &egpu_enable_attr_group, ASUS_WMI_DEVID_EGPU },
 	{ &dgpu_disable_attr_group, ASUS_WMI_DEVID_DGPU },
+	{ &dgpu_power_state_attr_group, ASUS_WMI_DEVID_DGPU_POWER_STATE },
 	{ &apu_mem_attr_group, ASUS_WMI_DEVID_APU_MEM },
 
 	{ &ppt_pl1_spl_attr_group, ASUS_WMI_DEVID_PPT_PL1_SPL },
-- 
2.55.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 3/3] platform/x86: asus-armoury: Prevent disabling dGPU when in use
  2026-08-05 18:28 [PATCH 0/3] platform/x86: asus-armoury: Add dgpu_power_state and check in dgpu_disable Marco Scardovi
  2026-08-05 18:28 ` [PATCH 1/3] platform/x86: asus-wmi: Add ASUS_WMI_DEVID_DGPU_POWER_STATE define Marco Scardovi
  2026-08-05 18:28 ` [PATCH 2/3] platform/x86: asus-armoury: Add dgpu_power_state attribute Marco Scardovi
@ 2026-08-05 18:28 ` Marco Scardovi
  2 siblings, 0 replies; 4+ messages in thread
From: Marco Scardovi @ 2026-08-05 18:28 UTC (permalink / raw)
  To: Corentin Chary, Luke D . Jones, Denis Benato, Hans de Goede,
	Ilpo Järvinen
  Cc: platform-driver-x86, linux-kernel, Marco Scardovi

Check ASUS_WMI_DEVID_DGPU_POWER_STATE before attempting to disable the
discrete GPU in dgpu_disable_current_value_store(). Return -EBUSY if the
dGPU is currently active and in use.

Fixes: f99eb098090e ("platform/x86: asus-armoury: move existing tunings to asus-armoury module")
Suggested-by: Denis Benato <denis.benato@linux.dev>
Signed-off-by: Marco Scardovi <scardracs@disroot.org>
---
 drivers/platform/x86/asus-armoury.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
index f745924af8a8..2d5ca75bc727 100644
--- a/drivers/platform/x86/asus-armoury.c
+++ b/drivers/platform/x86/asus-armoury.c
@@ -515,13 +515,25 @@ static ssize_t dgpu_disable_current_value_store(struct kobject *kobj,
 	if (err)
 		return err;
 
-	if (asus_armoury.gpu_mux_dev_id) {
-		err = armoury_get_devstate(NULL, &result, asus_armoury.gpu_mux_dev_id);
-		if (err)
-			return err;
-		if (!result && disable) {
-			pr_warn("Cannot disable dGPU when the MUX is in dGPU mode\n");
-			return -EBUSY;
+	if (disable) {
+		if (asus_armoury.gpu_mux_dev_id) {
+			err = armoury_get_devstate(NULL, &result, asus_armoury.gpu_mux_dev_id);
+			if (err)
+				return err;
+			if (!result) {
+				pr_warn("Cannot disable dGPU when the MUX is in dGPU mode\n");
+				return -EBUSY;
+			}
+		}
+
+		if (armoury_has_devstate(ASUS_WMI_DEVID_DGPU_POWER_STATE)) {
+			err = armoury_get_devstate(NULL, &result, ASUS_WMI_DEVID_DGPU_POWER_STATE);
+			if (err)
+				return err;
+			if (result) {
+				pr_warn("Cannot disable dGPU when it is in use\n");
+				return -EBUSY;
+			}
 		}
 	}
 
-- 
2.55.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-08-05 18:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-05 18:28 [PATCH 0/3] platform/x86: asus-armoury: Add dgpu_power_state and check in dgpu_disable Marco Scardovi
2026-08-05 18:28 ` [PATCH 1/3] platform/x86: asus-wmi: Add ASUS_WMI_DEVID_DGPU_POWER_STATE define Marco Scardovi
2026-08-05 18:28 ` [PATCH 2/3] platform/x86: asus-armoury: Add dgpu_power_state attribute Marco Scardovi
2026-08-05 18:28 ` [PATCH 3/3] platform/x86: asus-armoury: Prevent disabling dGPU when in use Marco Scardovi

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®