Re: [PATCH v2] PCI: pciehp: Fix hotplug on Catlow Lake with unreliable PME status
From: Lukas Wunner
Date: Tue Feb 17 2026 - 13:22:49 EST
On Tue, Feb 17, 2026 at 09:01:25AM -0800, Kuppuswamy Sathyanarayanan wrote:
> On 2/14/2026 7:11 AM, Lukas Wunner wrote:
> > I've just realized that pcie_disable_interrupt() isn't called from
> > pciehp_suspend() if pme_is_native() is true. Should disabling
^^^^
Sorry, I meant "if pme_is_native() is *false*".
My brain was apparently half asleep when I wrote this.
> > runtime PM cause a power regression, an alternative solution may be
> > to make pcie_disable_interrupt() conditional on a new pme_is_broken()
> > which checks for affected Catlow Lake PCH Root Ports.
> >
> > The pm_runtime_disable() approach is slightly preferred because
> > it keeps pciehp code clean.
>
> I think pcie_disable_interrupt() is called from pciehp_suspend() when
> pme_is_native() is true. Looking at the code:
>
> static void pciehp_disable_interrupt(struct pcie_device *dev)
> {
> /*
> * Disable hotplug interrupt so that it does not trigger
> * immediately when the downstream link goes down.
> */
> if (pme_is_native(dev->port))
> pcie_disable_interrupt(get_service_data(dev));
> }
What I had in mind is something like:
- if (pme_is_native(dev))
+ if (pme_is_native(dev) && !pme_is_broken(dev))
pcie_disable_interrupt(get_service_data(dev));
Again, the pm_runtime_disable() (or pm_runtime_get_sync()) approach
is slightly preferred because it keeps pciehp code clean and confines
the issue to a quirk that only needs to be compiled in on x86.
Thanks,
Lukas