• Mika Westerberg's avatar
    PCI/PM: Mark devices disconnected if upstream PCIe link is down on resume · c8245810
    Mika Westerberg authored
    Mark Blakeney reported that when suspending system with a Thunderbolt
    dock connected and then unplugging the dock before resume (which is
    pretty normal flow with laptops), resuming takes long time.
    
    What happens is that the PCIe link from the root port to the PCIe switch
    inside the Thunderbolt device does not train (as expected, the link is
    unplugged):
    
      pcieport 0000:00:07.2: restoring config space at offset 0x24 (was 0x3bf12001, writing 0x3bf12001)
      pcieport 0000:00:07.0: waiting 100 ms for downstream link
      pcieport 0000:01:00.0: not ready 1023ms after resume; giving up
    
    However, at this point we still try to resume the devices below that
    unplugged link:
    
      pcieport 0000:01:00.0: Unable to change power state from D3cold to D0, device inaccessible
      ...
      pcieport 0000:01:00.0: restoring config space at offset 0x38 (was 0xffffffff, writing 0x0)
      ...
      pcieport 0000:02:02.0: waiting 100 ms for downstream link, after activation
    
    And this is the link from PCIe switch downstream port to the xHCI on the
    dock:
    
      xhci_hcd 0000:03:00.0: not ready 65535ms after resume; giving up
      xhci_hcd 0000:03:00.0: Unable to change power state from D3cold to D0, device inaccessible
      xhci_hcd 0000:03:00.0: restoring config space at offset 0x3c (was 0xffffffff, writing 0x1ff)
    
    This ends up slowing down the resume time considerably. For this reason
    mark these devices as disconnected if the link above them did not train
    properly.
    
    Fixes: e8b90814 ("PCI/PM: Increase wait time after resume")
    Link: https://lore.kernel.org/r/20230918053041.1018876-1-mika.westerberg@linux.intel.comReported-by: default avatarMark Blakeney <mark.blakeney@bullet-systems.net>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217915Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarLukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org	# v6.4+
    c8245810
pci-driver.c 43.3 KB