Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp2681249ybg; Mon, 28 Oct 2019 00:08:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqwNSBHii72dTUJiL6JUjCpKxG+rBV2Gy8sewiKu1cD/i/WvjAQkl3RhIyQtZYHh653NyewO X-Received: by 2002:a17:906:1cce:: with SMTP id i14mr14948529ejh.296.1572246523854; Mon, 28 Oct 2019 00:08:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572246523; cv=none; d=google.com; s=arc-20160816; b=hNs9/3Zx8wXTzdbyBN3hXYQ7LIfa9Ox5BrllQSpEhx4jBH8rJ4yAkCbb2gCm9R/lZl kkmuNPp+fVKP1B9fNEJTE3H3ifvL2bW85y8x2e8KFDVKMeverbUcc2dwN5ESulYokSOm bNiXbwrjM8k9RciXTJC3zANbVIUHQUbT48VuW7+w36TwB5DK4LT8YBNos4cVFOYm9869 JRckGHIv+cckVamAYH/qOuYGrOncHDV+YIp7Ee5UjFOqwCacGGVxn9+rHkup1HeJLwq2 ynUwE178l0Ibu1eVlqvRDiXidcM3NsLNREiQRJUxT+m2AGrghKu9Rz1iQWVPb0SQFEzX xfCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=otsDRFix6bRq1I3vFbc4jWVazgh33RxEFBbxpUaxdzM=; b=Iy3Mj+b0AxFze6ECol2xeUcaFH5AIZ/Jx5AUTcy0rRurqkWCdop5n0hT/Y6y8QqVTO oQ+APiIpjwsCiv4zDNBP8gS9X6g6dPNMfg50SGEw3IH+wxYDciizxlFlu4WicZH86QTT cC8D+fr4XiasqgiKOjniGTzAt30eR1o1J1vk4JnzVZuYXe3xpNxdP6tg3woRb5L+izP6 k7kAnNUF3wMOruX7IP/SQE2DeZPPL9Xddd4BlPlkboXSzUvcMT4DeHEuJsCGSBjxDH8p 0WM9n/kZCnXFhKOl+l3e9j4MtCAPRavtaumCTQ1XbQv7JT8MlRAWZP8NFReR5lwJJaOq NZxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=cRgsACJe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c7si5775734ejm.375.2019.10.28.00.07.46; Mon, 28 Oct 2019 00:08:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=cRgsACJe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730884AbfJ0VQn (ORCPT + 99 others); Sun, 27 Oct 2019 17:16:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:36286 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730868AbfJ0VQj (ORCPT ); Sun, 27 Oct 2019 17:16:39 -0400 Received: from localhost (100.50.158.77.rev.sfr.net [77.158.50.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 872C921726; Sun, 27 Oct 2019 21:16:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572210998; bh=ErKEsRv1h3UfSN4mtR+TcNlFCFKAYck6UOOahrbSuWs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cRgsACJexsp6VOKrNnpJSGM7hdEbskqLX+aohUn6qQY1f3KZ+RmxdcSJ8I7oKHu8g 5LjWcEwh00p/2Y1jlI6kDGr9rkUOPh8/rDyYTAsrSB0Q/UGVknc6m1SsVUPs343gDj flK3sfG0Mz2QfHwszwYAZnXfpnu1LPOu766dqAHo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Daniel Drake , "Rafael J. Wysocki" , Bjorn Helgaas Subject: [PATCH 4.19 91/93] PCI: PM: Fix pci_power_up() Date: Sun, 27 Oct 2019 22:01:43 +0100 Message-Id: <20191027203317.816432489@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191027203251.029297948@linuxfoundation.org> References: <20191027203251.029297948@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rafael J. Wysocki commit 45144d42f299455911cc29366656c7324a3a7c97 upstream. There is an arbitrary difference between the system resume and runtime resume code paths for PCI devices regarding the delay to apply when switching the devices from D3cold to D0. Namely, pci_restore_standard_config() used in the runtime resume code path calls pci_set_power_state() which in turn invokes __pci_start_power_transition() to power up the device through the platform firmware and that function applies the transition delay (as per PCI Express Base Specification Revision 2.0, Section 6.6.1). However, pci_pm_default_resume_early() used in the system resume code path calls pci_power_up() which doesn't apply the delay at all and that causes issues to occur during resume from suspend-to-idle on some systems where the delay is required. Since there is no reason for that difference to exist, modify pci_power_up() to follow pci_set_power_state() more closely and invoke __pci_start_power_transition() from there to call the platform firmware to power up the device (in case that's necessary). Fixes: db288c9c5f9d ("PCI / PM: restore the original behavior of pci_set_power_state()") Reported-by: Daniel Drake Tested-by: Daniel Drake Link: https://lore.kernel.org/linux-pm/CAD8Lp44TYxrMgPLkHCqF9hv6smEurMXvmmvmtyFhZ6Q4SE+dig@mail.gmail.com/T/#m21be74af263c6a34f36e0fc5c77c5449d9406925 Signed-off-by: Rafael J. Wysocki Acked-by: Bjorn Helgaas Cc: 3.10+ # 3.10+ Signed-off-by: Greg Kroah-Hartman --- drivers/pci/pci.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -926,19 +926,6 @@ void pci_update_current_state(struct pci } /** - * pci_power_up - Put the given device into D0 forcibly - * @dev: PCI device to power up - */ -void pci_power_up(struct pci_dev *dev) -{ - if (platform_pci_power_manageable(dev)) - platform_pci_set_power_state(dev, PCI_D0); - - pci_raw_set_power_state(dev, PCI_D0); - pci_update_current_state(dev, PCI_D0); -} - -/** * pci_platform_power_transition - Use platform to change device power state * @dev: PCI device to handle. * @state: State to put the device into. @@ -1117,6 +1104,17 @@ int pci_set_power_state(struct pci_dev * EXPORT_SYMBOL(pci_set_power_state); /** + * pci_power_up - Put the given device into D0 forcibly + * @dev: PCI device to power up + */ +void pci_power_up(struct pci_dev *dev) +{ + __pci_start_power_transition(dev, PCI_D0); + pci_raw_set_power_state(dev, PCI_D0); + pci_update_current_state(dev, PCI_D0); +} + +/** * pci_choose_state - Choose the power state of a PCI device * @dev: PCI device to be suspended * @state: target sleep state for the whole system. This is the value