From: Hans de Goede <hansg@kernel.org>
To: Mika Westerberg <mika.westerberg@linux.intel.com>,
Francesco Lauritano <francesco.lauritano1@protonmail.com>
Cc: Mario Limonciello <superm1@kernel.org>,
"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
"open list:GPIO ACPI SUPPORT" <linux-gpio@vger.kernel.org>,
"platform-driver-x86@vger.kernel.org"
<platform-driver-x86@vger.kernel.org>,
"westeri@kernel.org" <westeri@kernel.org>,
Benjamin Tissoires <bentiss@kernel.org>
Subject: Re: [BUG] 36-second boot delay due to by acpi_gpio_handle_deferred_request_irqs on ASUS ROG Strix G16 (2025)
Date: Thu, 18 Dec 2025 11:33:14 +0100 [thread overview]
Message-ID: <b57b44c3-ea96-4189-8b70-71bf4a80d29b@kernel.org> (raw)
In-Reply-To: <20251218063954.GT2275908@black.igk.intel.com>
Hi,
On 18-Dec-25 07:39, Mika Westerberg wrote:
> On Wed, Dec 17, 2025 at 07:19:56PM +0000, Francesco Lauritano wrote:
>> On Wednesday, December 17th, 2025 at 7:01 PM, Mario Limonciello <superm1@kernel.org> wrote:
>>
>>> On 12/17/25 10:57 AM, Francesco Lauritano wrote:
>>>
>>>> On Wednesday, December 17th, 2025 at 4:12 PM, Francesco Lauritano francesco.lauritano1@protonmail.com wrote:
>>>>
>>>>> The _AEI defines 5 GPIO interrupts. Narrowed it down to two:
>>>>>
>>>>> gpiolib_acpi.ignore_interrupt=AMDI0030:00@21,AMDI0030:00@24
>>>>>
>>>>> This fixes the delay. Pins 0x15 and 0x18 both call: \_SB.PCI0.SBRG.HNC0()
>>>>
>>>> Traced it further. HNC0(pin, 0) takes the Else branch and calls:
>>>> ATKM(0xC0)
>>>> ADTM(Zero)
>>>>
>>>> ADTM calls NOD2(), which is the actual culprit:
>>>>
>>>> While ((Arg0 != RDNT))
>>>> {
>>>> If ((Local0 >= 0x0F)) { Break }
>>>> Notify (^^GPP0.PEGP, Arg0)
>>>> Local0++
>>>> Sleep (Local0 * 0x64)
>>>> }
>>>>
>>>> It notifies the dGPU and polls RDNT, sleeping 100, 200, ... 1500ms per iteration.
>>>> Max 15 loops = ~12s per pin. GPU doesn't respond at boot so it maxes out.
>>>>
>>>> Two pins, ~12s each, ~24-36s total.
>>>>
>>>> Francesco
>>>
>>>
>>> Any idea why isn't the dGPU responding? I would have expected
>>> https://git.kernel.org/torvalds/c/4d4c10f763d78 sets up policy that it's
>>> in D0.
>>>
>>> Is the dGPU turned off in BIOS or through some reverse engineered
>>> tool/API or something?
>>
>> dmesg without the workaround:
>> [ 1.005184] pci 0000:01:00.0: PME# supported from D0 D3hot
>> [ 1.288811] pci 0000:01:00.0: vgaarb: VGA device added
>> [ 38.250139] nvidia: loading out-of-tree module taints kernel.
>> [ 38.369358] nvidia 0000:01:00.0: enabling device (0000 -> 0003)
>> [ 39.744421] NVRM: GPS ACPI DSM called before _acpiDsmSupportedFuncCacheInit
>>
>> GPU is in D0 from 1.0s. nvidia loads at 38.2s after the GPIO hang completes.
>>
>> No weird tools/APIs besides userspace utils (asusctl/supergfxctl).
>>
>> No changes to BIOS factory defaults other than disabling Fast Boot.
>> dGPU is active, Display Mode is Dynamic (hybrid).
>>
>> Traced RDNT - it's set by GPS function 19 in the ACPI tables:
>> Case (0x13)
>> {
>> Debug = "GPS fun 19"
>> \_SB.PCI0.SBRG.RDNT = (Local1 + 0xD1)
>> }
>>
>> As far as I can understand GPIO initcall blocks at late_initcall_sync, preventing nvidia
>> from loading in time to respond. Based on the timing, GPU is awake but nothing can
>> register a handler while kernel is stuck at NOD2 polling loop.
>
> I wonder if you could try with the nouveau driver so that it's built-in to
> the kernel proper? Then it should be ready at the time these events
> trigger.
That is not really a workable solution though.
I think either we need to DMI quirk the 2 models with this issue;
Or perhaps it is time to rethink the whole running of edge handlers
on boot thing.
Based on the existing DMI quirks, which fix some much more serious
breakage (breaking HDMI out port DCC, causing a USB-A port to not
get 5V out) I would say it is safe to say that Windows does not do
this.
As for the original reasons mentioned in the commit message
introducing this:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ca876c7483b6
The BYT tabled ID pin handling has been sowewhat controversial. Some
people actually liked that many BYT BIOSes leave the USB data pins in
host mode even when a charger is connected as this allows using
a USB-otg-charging HUB charging and being in host mode at the same time.
That just leaves the original LID handling on microsoft surface 3
tablets case as somewhat of a problem.
But we can just pick an initial LID state of LID not closed there,
booting up with the LID closed is unusual and if done, the user
likely does *not* want to suspend right away which would happen
when reporting the LID as closed.
I still have a Surface 3 and I can check if that is the default and
if not this could be fixed with a quirk in the ACPI LID handling code.
TL;DR: I think this is a case where we can fix things by ripping
out a whole bunch of code + quirks and stop running edge event
handlers on boot.
Regards,
Hans
next prev parent reply other threads:[~2025-12-18 10:33 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <2kSCn4XaoXsXJ3EUR0syTdmip8Z1cBuUr0Br4sFVnwnsA8q4GlhiHOmsJkeBxvxYoLnetp4r44wIPXw42yTAFl-BtMROnIwR-NkckKgA5EY=@protonmail.com>
2025-12-17 10:06 ` [BUG] 36-second boot delay due to by acpi_gpio_handle_deferred_request_irqs on ASUS ROG Strix G16 (2025) Francesco Lauritano
2025-12-17 14:23 ` Mario Limonciello
2025-12-17 15:12 ` Francesco Lauritano
2025-12-17 16:57 ` Francesco Lauritano
2025-12-17 18:01 ` Mario Limonciello
2025-12-17 19:19 ` Francesco Lauritano
2025-12-18 6:39 ` Mika Westerberg
2025-12-18 10:33 ` Hans de Goede [this message]
2025-12-18 10:38 ` Mika Westerberg
2026-04-22 7:51 ` Marco Scardovi
2026-04-22 9:07 ` Mika Westerberg
2026-04-22 9:45 ` Marco Scardovi
2026-04-22 9:55 ` Mika Westerberg
2026-04-22 12:08 ` Marco Scardovi
2026-04-23 4:42 ` Mika Westerberg
2026-04-23 5:15 ` Mario Limonciello
2026-04-23 17:46 ` Marco Scardovi
2026-04-24 20:02 ` Armin Wolf
2026-04-25 15:15 ` Mario Limonciello
2026-04-25 20:41 ` Armin Wolf
2026-04-27 4:57 ` Mika Westerberg
2026-04-27 22:09 ` Armin Wolf
2026-04-28 7:59 ` Mika Westerberg
2026-04-28 20:50 ` Armin Wolf
2026-04-27 11:46 ` Hans de Goede
2026-04-27 11:46 ` Hans de Goede
2026-04-27 12:28 ` Mika Westerberg
2026-04-27 12:41 ` Marco Scardovi
2026-04-27 15:30 ` Hans de Goede
2026-04-27 16:10 ` Marco Scardovi
2026-04-27 16:14 ` Marco Scardovi
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=b57b44c3-ea96-4189-8b70-71bf4a80d29b@kernel.org \
--to=hansg@kernel.org \
--cc=bentiss@kernel.org \
--cc=francesco.lauritano1@protonmail.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=superm1@kernel.org \
--cc=westeri@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