• Mika Westerberg's avatar
    PCI: pciehp: Disable hotplug interrupt during suspend · eb34da60
    Mika Westerberg authored
    When PCIe hotplug port is transitioned into D3hot, the link to the
    downstream component will go down. If hotplug interrupt generation is
    enabled when that happens, it will trigger immediately, waking up the
    system and bringing the link back up.
    
    To prevent this, disable hotplug interrupt generation when system suspend
    is entered. This does not prevent wakeup from low power states according
    to PCIe 4.0 spec section 6.7.3.4:
    
      Software enables a hot-plug event to generate a wakeup event by
      enabling software notification of the event as described in Section
      6.7.3.1. Note that in order for software to disable interrupt generation
      while keeping wakeup generation enabled, the Hot-Plug Interrupt Enable
      bit must be cleared.
    
    So as long as we have set the slot event mask accordingly, wakeup should
    work even if slot interrupt is disabled. The port should trigger wake and
    then send PME to the root port when the PCIe hierarchy is brought back up.
    
    Limit this to systems using native PME mechanism to make sure older Apple
    systems depending on commit e3354628c376 ("PCI: pciehp: Support interrupts
    sent from D3hot") still continue working.
    Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    eb34da60
pciehp_core.c 8.34 KB