Re: [PATCH 0/2] asus-armoury: gate PPT writes on active fan curves

From: Derek J. Clark

Date: Tue May 12 2026 - 11:14:52 EST


On May 10, 2026 11:19:14 PM PDT, Ahmed Yaseen <yaseen@xxxxxxxxx> wrote:
>My first kernel patch series, posted in agreement with Denis Benato (Cc'd).
>
>On 28 ASUS ROG laptop models flagged with requires_fan_curve in the
>asus-armoury DMI power_data table, the BIOS ACPI method SPLX silently
>discards Package Power Tracking (PPT) writes unless the fan mode is
>set to Manual (FANM=4). FANM is set to 4 by the DEFC method when a
>custom fan curve is written. Until then, the WMI DEVS call returns
>success but the firmware ignores the value, so userspace sees no
>effect from writes to ppt_pl1_spl, ppt_pl2_sppt, ppt_pl3_fppt,
>ppt_apu_sppt or ppt_platform_sppt.
>

This very nearly touches on an issue that has been present in the asus_armoury driver for a while, and presents a possible avenue to correct it. When originally adding PPT adjustments it was discussed that doing so should be gated under the "custom" platform profile [1]. This was simple to do for the Lenovo WMI drivers because that interface includes a BIOS custom mode and requires it to be set for PPT settings to take effect. This soft "requirement" was missed when asus_armoury was accepted, and it currently allows PPT settings to override manufacturer intent. Please correct me if I'm wrong, but I believe the fan curves associated in BIOS for low-power, balanced, and performance will not automatically adjust if a user changes the TDP outside of the window. I.e. setting low power and then maximum SPL would leave the fans in a quiet mode.

Since some devices require this bit to be set, it seems like a good opportunity to gate the platform profile under custom, and use custom to set the performance mode and this bit, then allow userspace to set the curve and ppt values.

Adding Mario to CC for his SA/comments on this proposal.

- Derek


1: https://lore.kernel.org/platform-driver-x86/20241206031918.1537-17-mario.limonciello@xxxxxxx/

>The requires_fan_curve flag has existed in the per-model power_data
>entries for some time but was never read. This series wires it up:
>
> Patch 1: Adds the actual gate. Exports
> asus_wmi_custom_fan_curve_is_enabled() from asus-wmi so
> asus-armoury can query fan-curve state across module boundaries,
> and returns -ENODEV with a pr_warn() from the PPT write path on
> affected models when no fan curve is active.
>
> Patch 2: Exposes the same flag to userspace as a read-only sysfs
> attribute (requires_fan_curve) so tools like asusctl and rogcc
> can surface the prerequisite to the user before issuing PPT
> writes. Documented in
> Documentation/ABI/testing/sysfs-class-firmware-attributes.
>
>Testing:
> Verified on G835LW (ROG Strix SCAR 18 2025, requires_fan_curve=true):
> - With no fan curve active, writes to ppt_pl1_spl return -ENODEV
> and the cached value is unchanged.
> - With pwm1_enable=1 on /sys/class/hwmon/.../asus_custom_fan_curve,
> PPT writes succeed and readback matches.
> - The pr_warn fires exactly once per rejected write.
>
> I do not have access to the other 27 affected models. Testers from
> any of these would be appreciated: FX507VI, FX507VV, FX507Z,
> GA402X, GA403UI, GA403UV, GA403WM, GA403WR, GA403WW, GA605W,
> GU605CR, GU605CW, GU605CX, GU605M, G513I, G513QM, G513QY, G513R,
> G614J, G615LR, G634J, G713PV, G733C, G733P, G814J, G834J, G835LR.
>
>Ahmed Yaseen (2):
> platform/x86: asus-armoury: gate PPT writes behind active fan curve
> platform/x86: asus-armoury: expose requires_fan_curve via sysfs
>
> .../testing/sysfs-class-firmware-attributes | 25 +++++++++++++
> drivers/platform/x86/asus-armoury.c | 35 +++++++++++++++++++
> drivers/platform/x86/asus-wmi.c | 28 +++++++++++++++
> include/linux/platform_data/x86/asus-wmi.h | 5 +++
> 4 files changed, 93 insertions(+)
>