Comment 12 for bug 1980829

Revision history for this message
AceLan Kao (acelankao) wrote :

The final discuss and version are here

https://bugzilla.kernel.org/show_bug.cgi?id=216877
https://patchwork.kernel<email address hidden>/

And koba has backported the old version of that commit to oem kernel
commit 16e5386dabd18bd9c507867b0df6c414783af4a8
Author: Mika Westerberg <email address hidden>
Date: Mon Oct 2 10:00:44 2023 +0300

    UBUNTU: SAUCE: PCI/ASPM: Add back L1 PM Substate save and restore

    BugLink: https://bugs.launchpad.net/bugs/2042500

    Commit a7152be79b62 ("Revert "PCI/ASPM: Save L1 PM Substates Capability
    for suspend/resume"") reverted saving and restoring of ASPM L1 Substates
    due to a regression that caused resume from suspend to fail on certain
    systems. However, we never added this capability back and this is now
    causing systems fail to enter low power CPU states, drawing more power
    from the battery.

    The original revert mentioned that we restore L1 PM substate configuration
    even though ASPM L1 may already be enabled. This is due the fact that
    the pci_restore_aspm_l1ss_state() was called before pci_restore_pcie_state().

    Try to enable this functionality again following PCIe r6.0.1, sec 5.5.4
    more closely by:

      1) Do not restore ASPM configuration in pci_restore_pcie_state() but
         do that after PCIe capability is restored in pci_restore_aspm_state()
         following PCIe r6.0, sec 5.5.4.

      2) ASPM is first enabled on the upstream component and then downstream
         (this is already forced by the parent-child ordering of Linux
         Device Power Management framework).

      3) Program ASPM L1 PM substate configuration before L1 enables.

      4) Program ASPM L1 PM substate enables last after rest of the fields
         in the capability are programmed.

      5) Add denylist that skips restoring on the ASUS and TUXEDO systems
         where these regressions happened, just in case. For the TUXEDO case
         we only skip restore if the BIOS is involved in system suspend
         (that's forcing "mem_sleep=deep" in the command line). This is to
         avoid possible power regression when the default suspend to idle is
         used, and at the same time make sure the devices continue working
         after resume when the BIOS is involved.

    Reported-by: Koba Ko <email address hidden>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217321
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=216782
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=216877
    Cc: Tasev Nikola <email address hidden>
    Cc: Mark Enriquez <email address hidden>
    Cc: Thomas Witt <email address hidden>
    Cc: Werner Sembach <email address hidden>
    Tested-by: Kai-Heng Feng <email address hidden>
    Signed-off-by: Mika Westerberg <email address hidden>
    Reviewed-by: Ilpo Järvinen <email address hidden>
    (backported from https://<email address hidden>/)
    Signed-off-by: Koba Ko <email address hidden>
    Signed-off-by: Timo Aaltonen <email address hidden>