From nobody Fri Dec 19 20:33:52 2025 Received: from fout2-smtp.messagingengine.com (fout2-smtp.messagingengine.com [103.168.172.145]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 603A3DF71; Tue, 6 Aug 2024 02:08:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.145 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722910089; cv=none; b=R6QN38yB29KQRxm6qqDmCzaRcntyXPVeAkFlN1ZzAdzL7rPUoS51ViYKJNlc+ay5WYT8tCniU5o/NgmokRID5VXEoM3El/Ss/kEKzk4OZC96WWUjgDVLpSHxVVgRar+1OXSSVMHoeqxrT71P8QHtkd4k9aXmz7rWLXtexlJ/fYg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722910089; c=relaxed/simple; bh=uIB7/4OHAyBmfrbfmDDv3Vz80yUdMDj/O/p26M7mm3c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qr+VOclbPgHt74KeHNB5l5oSvRLpm7Kvl9V0nOHx5Ww/wXW5vFj9dC6+putAJ8mMO9zWGFPSKo0t1GuBDbV5UlFywkpUoGhqTwkWPXAZ7tYMz0HyIUMLGN30IuI8hVdL0GNO0E9zO4vbWdT8UCOgObG+SzXPuCe7URyyxNj6z8k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ljones.dev; spf=none smtp.mailfrom=ljones.dev; dkim=pass (2048-bit key) header.d=ljones.dev header.i=@ljones.dev header.b=arwVxI6I; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=NgwEacaz; arc=none smtp.client-ip=103.168.172.145 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ljones.dev Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ljones.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ljones.dev header.i=@ljones.dev header.b="arwVxI6I"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="NgwEacaz" Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailfout.nyi.internal (Postfix) with ESMTP id 78A89138FC29; Mon, 5 Aug 2024 22:08:06 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Mon, 05 Aug 2024 22:08:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ljones.dev; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1722910086; x= 1722996486; bh=mGAnkWQ+s4jKoLerEH+XWqyzB+onfTH+kswNnPYw2NI=; b=a rwVxI6IAr5pGosyeZ0mtmpXd3PC+Xi7inR9DhEJN80LbpM+6EWXuTs6L89kxDuHc YTeF11rTH9f+4DWrzig9NhQ3hVAVSS+TtLRbNJSiI9h1Reanf2jtKDeowJ6ObuxL YW+sT8GtQCA3EccPq5eu5AZ16V58vlO47i68AtUirqaszghErWjgsVlO9P+V2otB 87d2KGkKqyDM69JHUX8f8/alU97pbOknmK62iHbXdDKxpr/Z0l+ZUn5ijErL/zcu 8gh9UKFJPB/1k0ubJ7IVKPRCNcq734xq886uF9TxYn3lHUGqnwAzupjPtTEZ8ms1 VZxf0oQoD5R0VPZ+kkxrw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1722910086; x= 1722996486; bh=mGAnkWQ+s4jKoLerEH+XWqyzB+onfTH+kswNnPYw2NI=; b=N gwEacazxcsomefO2b0McFUlpY3qKPN8WMILvDKLVjbz/pTYk5N07nD3C05pRZBC/ 5o8MGTDV4Sbo9fAJDCeHd3nEKPWj5KImnGBsJDlgRs6pKrMaioFh8duCqV8qr+7F wIcsai3DOwOI2nB90Nf5Y0ozuiPlzg7hftQUTjvmfmZBM9cpcJXZ4hXMNWRF9a3a SX+gxg7CHjOFk/1JdnolqnbKp00WR5il4zbBxV0KNh15QPQxpD2l1zppwHwzLyUb OqQYVZXMbgFWpuQGxEcJJCAtauJ5U4YbIFtXnGqu4OMSWifbJJdVIImiwKcuY/hU +R7J4mdgCYft4HGzCR9JA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrkeejgdehiecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurhephffvvefufffkofgjfhgggfestdekre dtredttdenucfhrhhomhepfdfnuhhkvgcuffdrucflohhnvghsfdcuoehluhhkvgeslhhj ohhnvghsrdguvghvqeenucggtffrrghtthgvrhhnpefgteefudfgteduueehteejhfeugf fgleeltedvveethfeuueejfedvgeelveehgfenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehluhhkvgeslhhjohhnvghsrdguvghvpdhnsggprh gtphhtthhopedt X-ME-Proxy: Feedback-ID: i5ec1447f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 5 Aug 2024 22:08:03 -0400 (EDT) From: "Luke D. Jones" To: platform-driver-x86@vger.kernel.org Cc: linux-kernel@vger.kernel.org, ilpo.jarvinen@linux.intel.com, hdegoede@redhat.com, corentin.chary@gmail.com, "Luke D. Jones" Subject: [PATCH v2 3/6] platform/x86: asus-armoury: add dgpu tgp control Date: Tue, 6 Aug 2024 14:07:44 +1200 Message-ID: <20240806020747.365042-4-luke@ljones.dev> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240806020747.365042-1-luke@ljones.dev> References: <20240806020747.365042-1-luke@ljones.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement the dgpu TGP control under the asus-armoury module using the fw_attributes class. Signed-off-by: Luke D. Jones --- drivers/platform/x86/asus-armoury.c | 20 ++++++++++++++++++++ drivers/platform/x86/asus-armoury.h | 17 +++++++++++++++++ include/linux/platform_data/x86/asus-wmi.h | 3 +++ 3 files changed, 40 insertions(+) diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asu= s-armoury.c index bb049ead00f9..31dbdacd8978 100644 --- a/drivers/platform/x86/asus-armoury.c +++ b/drivers/platform/x86/asus-armoury.c @@ -50,6 +50,9 @@ #define NVIDIA_BOOST_MAX 25 #define NVIDIA_TEMP_MIN 75 #define NVIDIA_TEMP_MAX 87 +#define NVIDIA_POWER_MIN 0 +#define NVIDIA_POWER_MAX 70 +#define NVIDIA_POWER_DEFAULT 70 =20 /* Tunables provided by ASUS for gaming laptops */ struct rog_tunables { @@ -76,6 +79,11 @@ struct rog_tunables { u32 nv_temp_min; u32 nv_temp_max; u32 nv_temp_target; + + u32 dgpu_tgp_default; + u32 dgpu_tgp_min; + u32 dgpu_tgp_max; + u32 dgpu_tgp; }; =20 static const struct class *fw_attr_class; @@ -474,6 +482,11 @@ ATTR_GROUP_ROG_TUNABLE(nv_dynamic_boost, "nv_dynamic_b= oost", ASUS_WMI_DEVID_NV_D ATTR_GROUP_ROG_TUNABLE(nv_temp_target, "nv_temp_target", ASUS_WMI_DEVID_NV= _THERM_TARGET, nv_temp_default, nv_boost_min, nv_temp_max, 1, "Set the Nvidia max thermal limit"); +ATTR_GROUP_INT_VALUE_ONLY_RO(dgpu_base_tgp, "dgpu_base_tgp", ASUS_WMI_DEVI= D_DGPU_BASE_TGP, + "Read the base TGP value"); +ATTR_GROUP_ROG_TUNABLE(dgpu_tgp, "dgpu_tgp", ASUS_WMI_DEVID_DGPU_SET_TGP, = dgpu_tgp_default, + dgpu_tgp_min, dgpu_tgp_max, 1, + "Set the additional TGP on top of the base TGP"); =20 ATTR_GROUP_ENUM_INT_RO(charge_mode, "charge_mode", ASUS_WMI_DEVID_CHARGE_M= ODE, "0;1;2", "Show the current mode of charging"); @@ -501,6 +514,8 @@ static const struct asus_attr_group armoury_attr_groups= [] =3D { { &ppt_fppt_attr_group, ASUS_WMI_DEVID_PPT_FPPT }, { &nv_dynamic_boost_attr_group, ASUS_WMI_DEVID_NV_DYN_BOOST }, { &nv_temp_target_attr_group, ASUS_WMI_DEVID_NV_THERM_TARGET }, + { &dgpu_base_tgp_attr_group, ASUS_WMI_DEVID_DGPU_BASE_TGP }, + { &dgpu_tgp_attr_group, ASUS_WMI_DEVID_DGPU_SET_TGP }, =20 { &charge_mode_attr_group, ASUS_WMI_DEVID_CHARGE_MODE }, { &boot_sound_attr_group, ASUS_WMI_DEVID_BOOT_SOUND }, @@ -660,6 +675,11 @@ static void init_rog_tunables(struct rog_tunables *rog) rog->nv_temp_max =3D NVIDIA_TEMP_MIN; rog->nv_temp_max =3D NVIDIA_TEMP_MAX; rog->nv_temp_target =3D NVIDIA_TEMP_MIN; + + rog->dgpu_tgp_default =3D NVIDIA_POWER_DEFAULT; + rog->dgpu_tgp_min =3D NVIDIA_POWER_MIN; + rog->dgpu_tgp_max =3D NVIDIA_POWER_MAX; + rog->dgpu_tgp =3D NVIDIA_POWER_MAX; } =20 static int __init asus_fw_init(void) diff --git a/drivers/platform/x86/asus-armoury.h b/drivers/platform/x86/asu= s-armoury.h index 146170f91e69..96d991383b8a 100644 --- a/drivers/platform/x86/asus-armoury.h +++ b/drivers/platform/x86/asus-armoury.h @@ -83,6 +83,19 @@ static ssize_t enum_type_show(struct kobject *kobj, stru= ct kobj_attribute *attr, static struct kobj_attribute attr_##_attrname##_##_prop =3D = \ __ASUS_ATTR_RO(_attrname, _prop) =20 +/* Requires current_value show&|store */ +#define __ATTR_GROUP_INT_VALUE_ONLY(_attrname, _fsname, _dispname) = \ + __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); = \ + static struct kobj_attribute attr_##_attrname##_type =3D = \ + __ASUS_ATTR_RO_AS(type, int_type_show); = \ + static struct attribute *_attrname##_attrs[] =3D { = \ + &attr_##_attrname##_current_value.attr, &attr_##_attrname##_display_name= .attr, \ + &attr_##_attrname##_type.attr, NULL = \ + }; = \ + static const struct attribute_group _attrname##_attr_group =3D { = \ + .name =3D _fsname, .attrs =3D _attrname##_attrs = \ + } + /* Boolean style enumeration, base macro. Requires adding show/store */ #define __ATTR_GROUP_ENUM(_attrname, _fsname, _possible, _dispname) = \ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); = \ @@ -97,6 +110,10 @@ static ssize_t enum_type_show(struct kobject *kobj, str= uct kobj_attribute *attr, .name =3D _fsname, .attrs =3D _attrname##_attrs = \ } =20 +#define ATTR_GROUP_INT_VALUE_ONLY_RO(_attrname, _fsname, _wmi, _dispname) \ + __ATTR_CURRENT_INT_RO(_attrname, _wmi); \ + __ATTR_GROUP_INT_VALUE_ONLY(_attrname, _fsname, _dispname) + #define ATTR_GROUP_BOOL_RO(_attrname, _fsname, _wmi, _dispname) \ __ATTR_CURRENT_INT_RO(_attrname, _wmi); \ __ATTR_GROUP_ENUM(_attrname, _fsname, "0;1", _dispname) diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/pla= tform_data/x86/asus-wmi.h index c164e656ae0b..3ce0c63be4c1 100644 --- a/include/linux/platform_data/x86/asus-wmi.h +++ b/include/linux/platform_data/x86/asus-wmi.h @@ -133,6 +133,9 @@ /* dgpu on/off */ #define ASUS_WMI_DEVID_DGPU 0x00090020 =20 +#define ASUS_WMI_DEVID_DGPU_BASE_TGP 0x00120099 +#define ASUS_WMI_DEVID_DGPU_SET_TGP 0x00120098 + /* gpu mux switch, 0 =3D dGPU, 1 =3D Optimus */ #define ASUS_WMI_DEVID_GPU_MUX 0x00090016 #define ASUS_WMI_DEVID_GPU_MUX_VIVO 0x00090026 --=20 2.45.2