Linux Hardware Monitor development
 help / color / mirror / Atom feed
From: Krishna Chomal <krishna.chomal108@gmail.com>
To: Lorenzo Collevecchio <lorenzocollevecchio17@gmail.com>
Cc: platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org,
	 linux-hwmon@vger.kernel.org, W_Armin@gmx.de
Subject: Re: hp-wmi: WHCM AE_AML_OPERAND_TYPE and fan init -22 on HP OmniBook 5 16-ag1xxx (board 8DF4)
Date: Mon, 12 Oct 2026 23:19:09 +0530	[thread overview]
Message-ID: <as0bOFOoaaw-smyB@archlinux> (raw)
In-Reply-To: <CAPvUaSrbWrBuvAi3R02xC8w8M5Yh97pVd3-+FBXLp3mPgG5cUQ@mail.gmail.com>

On Mon, Oct 12, 2026 at 06:04:37PM +0200, Lorenzo Collevecchio wrote:
>Subject: Re: hp-wmi: WHCM AE_AML_OPERAND_TYPE and fan init -22 on HP
>OmniBook 5 16-ag1xxx (board 8DF4)
>
>Hi Krishna,
>
>Thanks for the patch. Results below.
>
>Base and adaptation:
>I used drivers/platform/x86/hp/hp-wmi.c from stable v7.2.9, built out
>of tree against 7.2.9-2-cachyos. Your diff did not apply cleanly: hunk
>1 failed, because my hp_wmi_hwmon_is_visible() uses
>is_victus_s_thermal_profile() and hp_wmi_get_fan_speed_victus_s()
>rather than the helpers in your context lines. Hunks 2 and 3 applied
>with offsets of about -230 lines. So I made these changes by hand:
>  - declared int fan_speed in hp_wmi_hwmon_is_visible()
>  - added your pr_info() and the fan_speed variable in the non-Victus
>hwmon_fan branch
>  - added the fan_count <= 0 early return in hp_wmi_hwmon_init()
>I did NOT add the hwmon_pwm_enable check in is_visible(), since the
>early return in init already prevents hwmon registration. If you want
>me to test against a different tree, tell me which one.
>
>Test: normal boot (hp_bioscfg not blacklisted), then rmmod hp_wmi and
>insmod the patched module. Output of dmesg | grep -i -E
>"hp.wmi|WHCM|WQB|fan", showing the stock boot first and then the
>reload at about 5156 s:
>
>[    6.453093] ACPI Error: Aborting method \_SB.WMID.WHCM ...
>(AE_AML_OPERAND_TYPE)
>[    6.655089] ACPI Error: Aborting method \_SB.WMID.WHCM ...
>(AE_AML_OPERAND_TYPE)
>[    6.857553] ACPI Error: Aborting method \_SB.WMID.WHCM ...
>(AE_AML_OPERAND_TYPE)
>[    6.857581] hp-wmi hp-wmi: Failed to apply initial fan settings: -22
>[    7.262812] hp_wmi: Registered as platform profile handler
>[    7.308567] ACPI Error: Aborting method \_SB.WMID.WQBC ...
>(AE_AML_OPERAND_VALUE)
>[    7.309182] ACPI Error: Aborting method \_SB.WMID.WQBE ...
>(AE_AML_OPERAND_VALUE)
>[ 5156.582212] hp_wmi: loading out-of-tree module taints kernel.
>[ 5156.582224] hp_wmi: module verification failed: signature and/or
>required key missing - tainting kernel
>[ 5157.203181] input: HP WMI hotkeys as /devices/virtual/input/input27
>[ 5157.614765] ACPI Error: Aborting method \_SB.WMID.WHCM ...
>(AE_AML_OPERAND_TYPE)
>[ 5158.026462] hp_wmi: Registered as platform profile handler
>
>What I see with the patched module:
>  - "Failed to apply initial fan settings: -22" is gone.
>  - /sys/devices/platform/hp-wmi/hwmon/ does not exist any more, so
>pwm1_enable is hidden as you expected.
>  - Only one WHCM error is logged after the reload instead of three. I
>do not know which call produces it; I am guessing it is the fan count
>query.
>  - No "channel = ... | fan_speed = ..." lines appear, because no
>hwmon device is registered once fan_count <= 0, so is_visible() never
>runs. If you want to see the fan speed query result, the print would
>have to go somewhere that runs in this case. I can test a modified
>patch.
>  - WQBC/WQBE do not appear in the reload because only hp_wmi was
>reloaded (hp_bioscfg stayed loaded).
>  - The platform profile still registers with quiet balanced performance.
>
>Fan Always On in the BIOS was off during all my tests.
>
>Fan behaviour, in case it is useful: on a cold boot with a 2-core
>stress-ng load, the CPU went from 46 C to 80 C in about 18 seconds
>while acpi_fan fan1_input stayed at 0 RPM (Fan Always On off). I
>stopped the test at 80 C. I can send the full log, and I can retest
>with Fan Always On enabled if you want.
>
>Happy to test further patches.

My fault, sorry. I should have clarified earlier that my patch was
based off of pdx86 tree[1] (master branch). Regarding the patch yes,
by mistake I ended up disabling the whole hwmon device (not what we
want). Let's register the hwmon device first then later handle the fan
logic optionally with the count guards.

Now hwmon should be available but pwm1_enable will be hidden. Also,
fan{1,2}_input is expected to be visible, I am not sure why it isn't
showing up for your device.

(as usual, rest all errors would be same)

diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
index b2773fc1aca4..422d65d5c514 100644
--- a/drivers/platform/x86/hp/hp-wmi.c
+++ b/drivers/platform/x86/hp/hp-wmi.c
@@ -2679,8 +2679,14 @@ static umode_t hp_wmi_hwmon_is_visible(const void *data,
  				       enum hwmon_sensor_types type,
  				       u32 attr, int channel)
  {
+	int fan_count;
+	int fan_speed;
+
  	switch (type) {
  	case hwmon_pwm:
+		fan_count = hp_wmi_get_fan_count_userdefine_trigger();
+		if (attr == hwmon_pwm_enable && fan_count <= 0)
+			return 0;
  		if (attr == hwmon_pwm_input && !hp_wmi_fan_control_supported())
  			return 0;
  		return 0644;
@@ -2689,7 +2695,9 @@ static umode_t hp_wmi_hwmon_is_visible(const void *data,
  			if (hp_wmi_get_active_fan_speed(channel) >= 0)
  				return 0444;
  		} else {
-			if (hp_wmi_get_fan_speed(channel) >= 0)
+			fan_speed = hp_wmi_get_fan_speed(channel);
+			pr_info("channel = %d | fan_speed = %d\n", channel, fan_speed);
+			if (fan_speed >= 0)
  				return 0444;
  		}
  		break;
@@ -2905,6 +2913,7 @@ static int hp_wmi_hwmon_init(void)
  	struct device *dev = &hp_wmi_platform_dev->dev;
  	struct hp_wmi_hwmon_priv *priv;
  	struct device *hwmon;
+	int fan_count;
  	int ret;
  
  	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
@@ -2915,11 +2924,17 @@ static int hp_wmi_hwmon_init(void)
  	if (ret)
  		return ret;
  
+	hwmon = devm_hwmon_device_register_with_info(dev, "hp", priv,
+						     &chip_info, NULL);
+
+	fan_count = hp_wmi_get_fan_count_userdefine_trigger();
+	pr_info("fan_count = %d\n", fan_count);
+	if (fan_count <= 0)
+		return 0;
+
  	ret = hp_wmi_setup_fan_settings(priv);
  	if (ret)
  		return ret;
-	hwmon = devm_hwmon_device_register_with_info(dev, "hp", priv,
-						     &chip_info, NULL);
  
  	if (IS_ERR(hwmon)) {
  		dev_err(dev, "Could not register hp hwmon device\n");

[1]: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git

>Thanks,
>Lorenzo
>
>Il giorno lun 12 ott 2026 alle ore 17:24 Krishna Chomal
><krishna.chomal108@gmail.com> ha scritto:
>>
>> On Mon, Oct 12, 2026 at 10:08:43AM +0200, Lorenzo Collevecchio wrote:
>> >Hi Armin, Krishna,
>> >
>> >Thanks for the quick replies.
>> >
>> >acpidump:
>> >https://gist.github.com/CollevecchioLorenzo/aef5917d9775629d48618bd42cb5f5e2
>> >
>> >I booted 7.2.9-2-cachyos with modprobe.blacklist=hp_bioscfg
>> >(confirmed in /proc/cmdline; hp_bioscfg is not loaded). Counts of
>> >each message in dmesg, before and after:
>> >
>> >  WHCM AE_AML_OPERAND_TYPE:                 3 before, 3 after
>> >  "Failed to apply initial fan settings: -22": 1 before, 1 after
>> >  WQBC / WQBE AE_AML_OPERAND_VALUE:         1/1 before, 0/0 after
>> >
>> >So the WQBC/WQBE errors come from hp_bioscfg, as you suspected. The
>> >WHCM errors and the -22 are not caused by it: they still occur with
>> >hp_bioscfg blacklisted, right before "hp_wmi: Registered as platform
>> >profile handler".
>> >
>> >Windows, as you asked (Krishna):
>> >- The Windows power mode setting exists, but that is standard
>> >  Windows, i didn't check for HP specific.
>> >- Omen Gaming Hub offers a performance mode
>> >  option on this laptop.
>>
>> Interesting, what choices does it offer you? Eco/Balanced/Performance?
>> Or something else?
>>
>> >- The BIOS has a "Fan Always On" setting. I had it turned off
>> >
>> >Happy to test any patch or run further commands.
>>
>> Can you apply the following diff and share the output of:
>> # dmesg | grep "hp_wmi"
>>
>> Expected results:
>> - No "failed to apply initial fan settings: -22" in dmesg
>> - pwm1_enable should be hidden
>>
>> Note:
>> - I have also added a debug print to get fan speed query result. From your
>>    acpidump, it looks like a stub implementation returning all zeros buffer
>>    (0 RPM) which should have made fan{1,2}_input visible but it's interesting
>>    that it isn't visible; the dmesg log should help us gain more insight.
>> - All other errors in dmesg may (will) be same, as this patch isn't
>>    intended to solve them.
>>
>> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
>> index 3ec6047c0f89..ee51790549ed 100644
>> --- a/drivers/platform/x86/hp/hp-wmi.c
>> +++ b/drivers/platform/x86/hp/hp-wmi.c
>> @@ -2705,8 +2705,14 @@ static umode_t hp_wmi_hwmon_is_visible(const void *data,
>>                                        enum hwmon_sensor_types type,
>>                                        u32 attr, int channel)
>>   {
>> +       int fan_count;
>> +       int fan_speed;
>> +
>>         switch (type) {
>>         case hwmon_pwm:
>> +               fan_count = hp_wmi_get_fan_count_userdefine_trigger();
>> +               if (attr == hwmon_pwm_enable && fan_count <= 0)
>> +                       return 0;
>>                 if (attr == hwmon_pwm_input && !hp_wmi_fan_control_supported())
>>                         return 0;
>>                 return 0644;
>> @@ -2715,7 +2721,9 @@ static umode_t hp_wmi_hwmon_is_visible(const void *data,
>>                         if (hp_wmi_get_active_fan_speed(channel) >= 0)
>>                                 return 0444;
>>                 } else {
>> -                       if (hp_wmi_get_fan_speed(channel) >= 0)
>> +                       fan_speed = hp_wmi_get_fan_speed(channel);
>> +                       pr_info("channel = %d | fan_speed = %d\n", channel, fan_speed);
>> +                       if (fan_speed >= 0)
>>                                 return 0444;
>>                 }
>>                 break;
>> @@ -2931,8 +2939,13 @@ static int hp_wmi_hwmon_init(void)
>>         struct device *dev = &hp_wmi_platform_dev->dev;
>>         struct hp_wmi_hwmon_priv *priv;
>>         struct device *hwmon;
>> +       int fan_count;
>>         int ret;
>>
>> +       fan_count = hp_wmi_get_fan_count_userdefine_trigger();
>> +       if (fan_count <= 0)
>> +               return 0;
>> +
>>         priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
>>         if (!priv)
>>                 return -ENOMEM;
>>
>>
>> >Thanks,
>> >Lorenzo
>> >
>> >
>> >
>> >
>> >Il giorno lun 12 ott 2026 alle ore 06:03 Krishna Chomal
>> ><krishna.chomal108@gmail.com> ha scritto:
>> >>
>> >> +Armin Wolf
>> >>
>> >> On Sun, Oct 11, 2026 at 06:03:25PM +0200, Lorenzo Collevecchio wrote:
>> >> >Hello,
>> >> >
>> >> >I am seeing hp-wmi fan interface failures on an HP OmniBook 5
>> >> >16-ag1xxx. This is not a gaming model.
>> >>
>> >> Hi Lorenzo,
>> >>
>> >> Thanks for reporting.
>> >>
>> >> >Hardware:
>> >> >  product_name: HP OmniBook 5 Laptop 16-ag1xxx (16-AG1002SL)
>> >> >  board_name:   8DF4
>> >> >  BIOS:         F.12, 04/10/2026 (no newer firmware listed on LVFS for
>> >> >this machine)
>> >> >  Kernel:       7.2.9-2-cachyos (also tested 6.18.55-2-cachyos-lts;
>> >> >ACPICA 20250807 vs 20260408)
>> >> >
>> >> >Symptoms:
>> >> >1. At boot, \_SB.WMID.WHCM (called via WMAA) fails three times with
>> >> >   "AE_AML_OPERAND_TYPE: Needed [Buffer/String/Package], found
>> >> >[Integer]" while resolving operands for [Index].
>> >>
>> >> This is likely due to hp-bioscfg instead of hp-wmi.
>> >>
>> >> >2. Immediately afterwards: "hp-wmi hp-wmi: Failed to apply initial fan
>> >> >settings: -22".
>> >>
>> >> Ah yes! This is because we are currently enabling fan control for ALL
>> >> devices. If you share your acpidump, I can check if we should use the
>> >> HPWMI_FAN_COUNT_GET_QUERY to decide whether to allow pwm1_enable or not.
>> >>
>> >> >3. Later: "Attempt to CreateField of length zero" in \_SB.WMID.WQBC
>> >> >and WQBE (AE_AML_OPERAND_VALUE).
>> >>
>> >> This is also likely due to hp-bioscfg. Try booting with kernel cmdline
>> >> parameter "modprobe.blacklist=hp_bioscfg" and see if these disappear.
>> >> That will help us narrow down the scope. But in any case, I think Armin
>> >> Wolf will have to help here since I am not familiar with bioscfg anyway.
>> >>
>> >> >4. hp_wmi still registers as a platform profile handler (quiet
>> >> >balanced performance).
>> >>
>> >> This is because 8DF4 is not present in any whitelists, so it takes a
>> >> fallback path and uses legacy WMI queries. Honestly, I am not sure if
>> >> platform profile should be registered for OmniBook devices. Could you
>> >> let me know if Omen Gaming Hub on Windows allows you to switch
>> >> performance modes or there is no option for this?
>> >>
>> >> >5. /sys/devices/platform/hp-wmi/hwmon/*/ contains only pwm1_enable
>> >> >(rw); there is no pwm1 and no fan1_input.
>> >>
>> >> Intended.
>> >>
>> >> * pwm1_enable - As said, this is because we are currently (incorrectly)
>> >>                  enabling fan control for all devices.
>> >> * pwm1 - Absent because manual fan control must be unavailable on this
>> >>           board.
>> >> * fan1_input - Absent because get fan speed query must be failing.
>> >>
>> >> >6. On the LTS kernel the same WHCM error repeats about every 2.2 s
>> >> >while something polls the hp hwmon device (277 times between 551 s and
>> >> >1165 s uptime).
>> >> >7. ACPI thermal: "Invalid critical threshold (-274000)" and "No valid
>> >> >trip points!" for thermal zone TSZ0.
>> >> >
>> >> >Fan behaviour:
>> >> >- acpi_fan (acpi-fan PNP0C0B, "Using Microsoft fan extensions")
>> >> >exposes fan1_input. It sometimes shows about 2400 RPM and sometimes 0
>> >> >RPM.
>> >> >- The fan works normally under Windows on the same machine.
>> >> >- I once saw the CPU around 95 C with the fan apparently stopped on
>> >> >Linux; I have not been able to reproduce it yet and am collecting a
>> >> >temperature/RPM log.
>> >> >
>> >> >I suspect the WMI query path the driver uses for fan settings is not
>> >> >implemented by this firmware, so hp-wmi should probably not attempt it
>> >> >on board 8DF4. I would be glad to test patches or provide acpidump
>> >> >output, WMI GUID listings or any other data.
>> >>
>> >> acpidump would be helpful.
>> >>
>> >> Thanks,
>> >> Krishna
>> >>
>> >> >Thanks,
>> >> >Lorenzo

  reply	other threads:[~2026-10-12 17:49 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-11 16:03 hp-wmi: WHCM AE_AML_OPERAND_TYPE and fan init -22 on HP OmniBook 5 16-ag1xxx (board 8DF4) Lorenzo Collevecchio
2026-10-11 22:45 ` Armin Wolf
2026-10-12  4:03 ` Krishna Chomal
2026-10-12  8:08   ` Lorenzo Collevecchio
2026-10-12 15:24     ` Krishna Chomal
2026-10-12 16:04       ` Lorenzo Collevecchio
2026-10-12 17:49         ` Krishna Chomal [this message]
2026-10-12 19:34           ` Lorenzo Collevecchio
2026-10-13  9:32             ` Lorenzo Collevecchio

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=as0bOFOoaaw-smyB@archlinux \
    --to=krishna.chomal108@gmail.com \
    --cc=W_Armin@gmx.de \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=lorenzocollevecchio17@gmail.com \
    --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