All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Denis Benato <benato.denis96@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	platform-driver-x86@vger.kernel.org,
	 Hans de Goede <hdegoede@redhat.com>,
	 "Limonciello, Mario" <mario.limonciello@amd.com>,
	 "Luke D . Jones" <luke@ljones.dev>,
	Alok Tiwari <alok.a.tiwari@oracle.com>,
	 Derek John Clark <derekjohn.clark@gmail.com>,
	 Mateusz Schyboll <dragonn@op.pl>,
	porfet828@gmail.com
Subject: Re: [PATCH v14 4/9] platform/x86: asus-armoury: add apu-mem control support
Date: Fri, 17 Oct 2025 15:16:35 +0300 (EEST)	[thread overview]
Message-ID: <61c69499-fb69-0642-915d-e3072d2dbd21@linux.intel.com> (raw)
In-Reply-To: <20251015014736.1402045-5-benato.denis96@gmail.com>

On Wed, 15 Oct 2025, Denis Benato wrote:

> From: "Luke D. Jones" <luke@ljones.dev>
> 
> Implement the APU memory size control under the asus-armoury module using
> the fw_attributes class.
> 
> This allows the APU allocated memory size to be adjusted depending on
> the users priority. A reboot is required after change.
> 
> Signed-off-by: Luke D. Jones <luke@ljones.dev>
> Signed-off-by: Denis Benato <benato.denis96@gmail.com>
> ---
>  drivers/platform/x86/asus-armoury.c        | 81 ++++++++++++++++++++++
>  include/linux/platform_data/x86/asus-wmi.h |  2 +
>  2 files changed, 83 insertions(+)
> 
> diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
> index 68ce2c159ae1..3b49a27e397d 100644
> --- a/drivers/platform/x86/asus-armoury.c
> +++ b/drivers/platform/x86/asus-armoury.c
> @@ -394,6 +394,86 @@ static ssize_t egpu_enable_current_value_store(struct kobject *kobj, struct kobj
>  WMI_SHOW_INT(egpu_enable_current_value, "%d\n", ASUS_WMI_DEVID_EGPU);
>  ATTR_GROUP_BOOL_CUSTOM(egpu_enable, "egpu_enable", "Enable the eGPU (also disables dGPU)");
>  
> +/* Device memory available to APU */
> +
> +/* Values map for APU memory: some looks out of order but are actually correct */
> +static u32 apu_mem_map[] = {
> +	[0] = 0x000, /* called "AUTO" on the BIOS, is the minimum available */
> +	[1] = 0x102,
> +	[2] = 0x103,
> +	[3] = 0x104,
> +	[4] = 0x105,
> +	[5] = 0x107,
> +	[6] = 0x108,
> +	[7] = 0x109,
> +	[8] = 0x106,

Is BIT(8) actually telling non-AUTO here? I mean, it's not set for the 
AUTO case. If it has this special meaning, maybe that should be left out 
of this array and handled by the show/store functions as it seems 
different for the auto depending on which way the information is being 
passed.

> +};
> +
> +static ssize_t apu_mem_current_value_show(struct kobject *kobj, struct kobj_attribute *attr,
> +					  char *buf)
> +{
> +	int err;
> +	u32 mem;
> +
> +	err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_APU_MEM, &mem);
> +	if (err)
> +		return err;
> +
> +	if ((mem & ASUS_WMI_DSTS_PRESENCE_BIT) == 0)
> +		return -ENODEV;
> +
> +	mem &= ~ASUS_WMI_DSTS_PRESENCE_BIT;
> +
> +	/* After 0x000 is set, a read will return 0x100 */
> +	if (mem == 0x100)
> +		return sysfs_emit(buf, "0\n");
> +
> +	for (unsigned int i = 0; i < ARRAY_SIZE(apu_mem_map); i++) {
> +		if (apu_mem_map[i] == mem)
> +			return sysfs_emit(buf, "%u\n", i);
> +	}
> +
> +	pr_warn("Unrecognised value for APU mem 0x%08x\n", mem);
> +	return sysfs_emit(buf, "%u\n", mem);

??

Should this return -EIO or something like that instead. It definitely 
looks wrong to first log it as %x and then output to sysfs as %u.

> +}
> +
> +static ssize_t apu_mem_current_value_store(struct kobject *kobj, struct kobj_attribute *attr,
> +					   const char *buf, size_t count)
> +{
> +	int result, err;
> +	u32 requested, mem;
> +
> +	result = kstrtou32(buf, 10, &requested);
> +	if (result)
> +		return result;
> +
> +	if (requested >= ARRAY_SIZE(apu_mem_map))
> +		return -EINVAL;
> +
> +	mem = apu_mem_map[requested];
> +
> +	err = asus_wmi_set_devstate(ASUS_WMI_DEVID_APU_MEM, mem, &result);
> +	if (err) {
> +		pr_warn("Failed to set apu_mem: %d\n", err);
> +		return err;
> +	}
> +
> +	pr_info("APU memory changed to %uGB, reboot required\n", requested+1);

requested + 1

Please mention GB up where the array is.

> +	sysfs_notify(kobj, NULL, attr->attr.name);
> +
> +	asus_set_reboot_and_signal_event();
> +
> +	return count;
> +}
> +
> +static ssize_t apu_mem_possible_values_show(struct kobject *kobj, struct kobj_attribute *attr,
> +					    char *buf)
> +{
> +	BUILD_BUG_ON(ARRAY_SIZE(apu_mem_map) != 9);
> +	return sysfs_emit(buf, "0;1;2;3;4;5;6;7;8\n");

You could make this future proof with a for loop and sysfs_emit_at() and 
drop the BUILD_BUG_ON(). Maybe all these multi-valued show functions could 
share a helper which does that.

> +}
> +ATTR_GROUP_ENUM_CUSTOM(apu_mem, "apu_mem", "Set available system RAM (in GB) for the APU to use");
> +
>  /* Simple attribute creation */
>  ATTR_GROUP_ENUM_INT_RO(charge_mode, "charge_mode", ASUS_WMI_DEVID_CHARGE_MODE, "0;1;2",
>  		       "Show the current mode of charging");
> @@ -414,6 +494,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 },
> +	{ &apu_mem_attr_group, ASUS_WMI_DEVID_APU_MEM },
>  
>  	{ &charge_mode_attr_group, ASUS_WMI_DEVID_CHARGE_MODE },
>  	{ &boot_sound_attr_group, ASUS_WMI_DEVID_BOOT_SOUND },
> diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
> index 10acd5d52e38..a4f6bab93a6f 100644
> --- a/include/linux/platform_data/x86/asus-wmi.h
> +++ b/include/linux/platform_data/x86/asus-wmi.h
> @@ -137,6 +137,8 @@
>  /* dgpu on/off */
>  #define ASUS_WMI_DEVID_DGPU		0x00090020
>  
> +#define ASUS_WMI_DEVID_APU_MEM		0x000600C1
> +
>  /* gpu mux switch, 0 = dGPU, 1 = Optimus */
>  #define ASUS_WMI_DEVID_GPU_MUX		0x00090016
>  #define ASUS_WMI_DEVID_GPU_MUX_VIVO	0x00090026
> 

-- 
 i.


  reply	other threads:[~2025-10-17 12:16 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-15  1:47 [PATCH v14 0/9] platform/x86: Add asus-armoury driver Denis Benato
2025-10-15  1:47 ` [PATCH v14 1/9] platform/x86: asus-wmi: export symbols used for read/write WMI Denis Benato
2025-10-15 13:03   ` Ilpo Järvinen
2025-10-15  1:47 ` [PATCH v14 2/9] platform/x86: asus-armoury: move existing tunings to asus-armoury module Denis Benato
2025-10-15 13:56   ` Ilpo Järvinen
2025-10-16  1:28     ` Denis Benato
2025-10-15  1:47 ` [PATCH v14 3/9] platform/x86: asus-armoury: add panel_hd_mode attribute Denis Benato
2025-10-15  1:47 ` [PATCH v14 4/9] platform/x86: asus-armoury: add apu-mem control support Denis Benato
2025-10-17 12:16   ` Ilpo Järvinen [this message]
2025-10-18  1:23     ` Denis Benato
2025-10-15  1:47 ` [PATCH v14 5/9] platform/x86: asus-armoury: add core count control Denis Benato
2025-10-15 14:11   ` Ilpo Järvinen
2025-10-17 12:48   ` Ilpo Järvinen
2025-10-18  1:43     ` Denis Benato
2025-10-20 17:15       ` Ilpo Järvinen
2025-10-20 17:37         ` Denis Benato
2025-10-20 18:45           ` Mario Limonciello (AMD) (kernel.org)
2025-10-19 16:53     ` Denis Benato
2025-10-15  1:47 ` [PATCH v14 6/9] platform/x86: asus-armoury: add screen auto-brightness toggle Denis Benato
2025-10-15  1:47 ` [PATCH v14 7/9] platform/x86: asus-wmi: deprecate bios features Denis Benato
2025-10-17 12:54   ` Ilpo Järvinen
2025-10-15  1:47 ` [PATCH v14 8/9] platform/x86: asus-wmi: rename ASUS_WMI_DEVID_PPT_FPPT Denis Benato
2025-10-17 12:59   ` Ilpo Järvinen
2025-10-15  1:47 ` [PATCH v14 9/9] platform/x86: asus-armoury: add ppt_* and nv_* tuning knobs Denis Benato
2025-10-17 13:09   ` Ilpo Järvinen
2025-10-15  5:13 ` [PATCH v14 0/9] platform/x86: Add asus-armoury driver Mario Limonciello
2025-10-15  9:38   ` Ilpo Järvinen
2025-10-15 12:00     ` Denis Benato
2025-10-15 12:06       ` Ilpo Järvinen
2025-10-15 12:27         ` Denis Benato
  -- strict thread matches above, loose matches on Subject: below --
2025-10-22  9:18 [PATCH v14 4/9] platform/x86: asus-armoury: add apu-mem control support kernel test robot

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=61c69499-fb69-0642-915d-e3072d2dbd21@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=alok.a.tiwari@oracle.com \
    --cc=benato.denis96@gmail.com \
    --cc=derekjohn.clark@gmail.com \
    --cc=dragonn@op.pl \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luke@ljones.dev \
    --cc=mario.limonciello@amd.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=porfet828@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.