lkml.org 
[lkml]   [2021]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 152/300] PCI: PM: Enable PME if it can be signaled from D3cold
    Date
    From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

    [ Upstream commit 0e00392a895c95c6d12d42158236c8862a2f43f2 ]

    PME signaling is only enabled by __pci_enable_wake() if the target
    device can signal PME from the given target power state (to avoid
    pointless reconfiguration of the device), but if the hierarchy above
    the device goes into D3cold, the device itself will end up in D3cold
    too, so if it can signal PME from D3cold, it should be enabled to
    do so in __pci_enable_wake().

    [Note that if the device does not end up in D3cold and it cannot
    signal PME from the original target power state, it will not signal
    PME, so in that case the behavior does not change.]

    Link: https://lore.kernel.org/linux-pm/3149540.aeNJFYEL58@kreacher/
    Fixes: 5bcc2fb4e815 ("PCI PM: Simplify PCI wake-up code")
    Reported-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Reported-by: Utkarsh H Patel <utkarsh.h.patel@intel.com>
    Reported-by: Koba Ko <koba.ko@canonical.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/pci/pci.c | 9 ++++++++-
    1 file changed, 8 insertions(+), 1 deletion(-)

    diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
    index 75cab0142373..a9d0530b7846 100644
    --- a/drivers/pci/pci.c
    +++ b/drivers/pci/pci.c
    @@ -2495,7 +2495,14 @@ static int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable
    if (enable) {
    int error;

    - if (pci_pme_capable(dev, state))
    + /*
    + * Enable PME signaling if the device can signal PME from
    + * D3cold regardless of whether or not it can signal PME from
    + * the current target state, because that will allow it to
    + * signal PME when the hierarchy above it goes into D3cold and
    + * the device itself ends up in D3cold as a result of that.
    + */
    + if (pci_pme_capable(dev, state) || pci_pme_capable(dev, PCI_D3cold))
    pci_pme_active(dev, true);
    else
    ret = 1;
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-09-13 16:05    [W:4.126 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site