mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Armin Wolf <W_Armin@gmx.de>
To: Chris Taraszka <chris@miget.com>
Cc: "Hans de Goede" <hansg@kernel.org>,
	"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
	platform-driver-x86@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	"Mingyou Chen" <qby140326@gmail.com>,
	stable@vger.kernel.org
Subject: Re: [PATCH] platform/x86: bitland-mifs-wmi: Don't abort suspend when platform profile access fails
Date: Sun, 13 Sep 2026 22:47:07 +0200	[thread overview]
Message-ID: <173a48cf-5f13-4b8c-ae5a-a294c2a12616@gmx.de> (raw)
In-Reply-To: <CAAcRvKOppipCzBsGeodOb4gpeG7hgL3TnP+a+GdETvHmGnTRNg@mail.gmail.com>

Am 12.09.26 um 20:16 schrieb Chris Taraszka:

> Hi,
>
> gzip attached (~702K rather than 3.6M)
>
> Xiaomi Book Pro 14 (sys_vendor XIAOMI), BIOS XMAPT4B0P0909
> /sys/firmware/acpi/platform_profile_choices: low-power balanced 
> performance
>
Thanks, it seems that the root cause for all of this is that your device uses different
values for communicating the desired platform profile to the underlying ACPI firmware.
I strongly suspect that the platform profile mechanism will currently not work on your device
at all.

Some other users have already posted patch to work around this by implementing a DMI whitelist,
you can find those patches in the archives. I currently have a patch series pending that fixes
an issue inside the underlying WMI interface, after that i can take care of this problem.

For now i suggest that you blacklist the driver until the DMI whitelist has been integrated.

Thanks,
Armin Wolf

> On Fri, Sep 11, 2026 at 10:45 PM Armin Wolf <W_Armin@gmx.de> wrote:
>
>     Am 11.09.26 um 20:21 schrieb Chris Taraszka:
>
>     > On a Xiaomi Book Pro 14 (BIOS XMAPT4B0P0909),
>     bitland_mifs_wmi_suspend()
>     > intermittently fails to read the platform profile and returns
>     -EINVAL to
>     > the PM core, which aborts the entire system suspend:
>     >
>     >    bitland-mifs-wmi B60BFB48-...-4: PM: dpm_run_callback():
>     >      bitland_mifs_wmi_suspend [bitland_mifs_wmi] returns -22
>     >    bitland-mifs-wmi B60BFB48-...-4: PM: failed to suspend: error -22
>     >    PM: Some devices failed to suspend, or early wake event detected
>     >
>     > The WMI method call itself succeeds. The WMI core reports its own
>     > failures as -EIO, -ENOMSG, -ENODATA or -EPROTO, so the -EINVAL
>     comes from
>     > laptop_profile_get() when the SystemPerMode value returned by the
>     > firmware is not one of the four documented modes.
>     >
>     > How often this happens depends on firmware state. On a v7.2.2
>     boot the
>     > query failed persistently on battery: /sys/power/suspend_stats
>     reported
>     > 4628 failures against 2 successes, both of those on AC. Because
>     logind
>     > re-issues the suspend while the lid stays closed, the machine looped
>     > awake and drained half the battery over one 8h42m lid-closed
>     period at
>     > ~7-8 W. On v7.3-rc2, whose driver, WMI core and platform_profile
>     code are
>     > unchanged from v7.2, the query has so far failed only right
>     after boot,
>     > when power-profiles-daemon first reads the profile.
>     >
>     > Commit d3666875c75e ("platform/x86: bitland-mifs-wmi: Fix NULL
>     pointer
>     > dereference during suspend/resume") added a !data->pp_dev guard, but
>     > that only covers the event device. On the control device pp_dev is
>     > valid, so the guard does not apply and the error is returned
>     verbatim.
>     >
>     > Saving the platform profile is best-effort. Failing to read it
>     should
>     > not keep the system awake, so warn and continue instead, in line
>     with
>     > that commit skipping profile operations rather than failing the
>     > transition. Do the same on resume: laptop_profile_set() returns
>     > -EOPNOTSUPP for the performance and full-speed modes without DC
>     power
>     > (see Documentation/wmi/devices/bitland-mifs-wmi.rst), so a
>     profile saved
>     > on DC power cannot be restored after unplugging during suspend,
>     which
>     > would otherwise mark the resume as failed.
>
>     Hi,
>
>     i think the root cause for this is that your device uses a
>     different set of platform profiles.
>     Can you share the output of "acpidump"?
>
>     Thanks,
>     Armin Wolf
>
>     > Fixes: dc1ec4fa86b2 ("platform/x86: bitland-mifs-wmi: Add new
>     Bitland MIFS WMI driver")
>     > Cc: stable@vger.kernel.org
>     > Signed-off-by: Chris Taraszka <chris@miget.com>
>     > ---
>     > Tested on the same machine with v7.3-rc2 plus this patch: 11 s2idle
>     > suspend cycles, including lid-closed suspends on battery of
>     7h42m, 4.9h
>     > and 75.8h, and repeated pm_test=devices cycles on battery all
>     completed
>     > without errors. The failing firmware state could not be
>     reproduced on
>     > demand on v7.3-rc2, so the new warnings have not been observed
>     firing
>     > during a suspend; the failures described above were recorded on
>     v7.2.2
>     > without this patch.
>     >
>     >   drivers/platform/x86/bitland-mifs-wmi.c | 17 +++++++++++++----
>     >   1 file changed, 13 insertions(+), 4 deletions(-)
>     >
>     > diff --git a/drivers/platform/x86/bitland-mifs-wmi.c
>     b/drivers/platform/x86/bitland-mifs-wmi.c
>     > index 3a37318..788ef14 100644
>     > --- a/drivers/platform/x86/bitland-mifs-wmi.c
>     > +++ b/drivers/platform/x86/bitland-mifs-wmi.c
>     > @@ -305,22 +305,31 @@ static int bitland_mifs_wmi_suspend(struct
>     device *dev)
>     >               return 0;
>     >
>     >       ret = laptop_profile_get(data->pp_dev, &profile);
>     > -     if (ret == 0)
>     > -             data->saved_profile = profile;
>     > +     if (ret) {
>     > +             dev_warn(dev, "Failed to save platform profile:
>     %d\n", ret);
>     > +             return 0;
>     > +     }
>     >
>     > -     return ret;
>     > +     data->saved_profile = profile;
>     > +
>     > +     return 0;
>     >   }
>     >
>     >   static int bitland_mifs_wmi_resume(struct device *dev)
>     >   {
>     >       struct bitland_mifs_wmi_data *data = dev_get_drvdata(dev);
>     > +     int ret;
>     >
>     >       /* Skip event device */
>     >       if (!data->pp_dev)
>     >               return 0;
>     >
>     >       dev_dbg(dev, "Resuming, restoring profile %d\n",
>     data->saved_profile);
>     > -     return laptop_profile_set(dev, data->saved_profile);
>     > +     ret = laptop_profile_set(dev, data->saved_profile);
>     > +     if (ret)
>     > +             dev_warn(dev, "Failed to restore platform profile:
>     %d\n", ret);
>     > +
>     > +     return 0;
>     >   }
>     >
>     >   static DEFINE_SIMPLE_DEV_PM_OPS(bitland_mifs_wmi_pm_ops,
>

      reply	other threads:[~2026-09-13 20:47 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-11 18:21 Chris Taraszka
2026-09-11 20:44 ` Armin Wolf
2026-09-12 18:16   ` Chris Taraszka
2026-09-13 20:47     ` Armin Wolf [this message]

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=173a48cf-5f13-4b8c-ae5a-a294c2a12616@gmx.de \
    --to=w_armin@gmx.de \
    --cc=chris@miget.com \
    --cc=hansg@kernel.org \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=qby140326@gmail.com \
    --cc=stable@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

all inboxes | Powered by JetHome®