Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2550833yba; Mon, 6 May 2019 07:53:35 -0700 (PDT) X-Google-Smtp-Source: APXvYqw4LnOPgTXt8HVrGjRqZmttTIGtl2SYhHBN48RUCOY9m4mYJ29zNQDl8L3HgV53xUil2DH/ X-Received: by 2002:a05:6a00:cc:: with SMTP id e12mr34042057pfj.207.1557154415210; Mon, 06 May 2019 07:53:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557154415; cv=none; d=google.com; s=arc-20160816; b=EE1wK9sqc4bYu4ejQz3Ly/Z3CU0Jv3A3DTd+2/rPYJEqaRfZ8+RCEm81mmoJ5Pu+gr GAVriV9N52+weW+aHfrM6ZStOrtmII5kxVJu1A6jGin0hONpRpsUywQD+68pncaIGJMJ VJQAwsxW9kq9XWZhW3ja9U+Tu3bYab6YfB7VJEUM2NJd9BJDGV7Gkhy0D5oMZ9oMH6G8 bdCz8VcIWOyXA3Yut9RHqwpBkGVtFIm/uHH/9rnbgszxhn+eTaHZHtwCwGEuqT6lb2oR rFRKAd7rhwcTjx1kj8VRwSnP2VaKsIqj4BWksaNIccXvDIynu03oQgNHqUx6EHX7z/7l XTGg== 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=YOHuoTBUtSYjvUiS9Czjv699vwvH85fdyB5/2d8xTLM=; b=X7bP46NCFarMZX3sfVr6jYR2Rjfzdo8Qug6upc5VUBGZJ1UiV8dGw6H9q/0u0bRNNt x9yFo6ShlPLI8s41+Qc+ynTncR0OetAxKb5I86sQxnPvq57FLbzS4VALKNrLoByuTY1T bYEBViyuX0ZYvIpyq2St1OkOMKy92zrM/C7ez263ESGz4+ANkUAkca62vS7+sDec47jG 0GysTSI21YK0Rh6HUr8lLe7TilVjoRkkxppMw1o0oNs0wcFMlc7N/gT8OBxVd1pcA9qb hzBpv7zSXs2g56B1P5Xf88aIMI5nQM6ZHY2jFLhwo0FI52pEKyhKlzJcOfj8RPb2azv/ DO/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=SISdyqC+; 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 d2si15157674pgh.499.2019.05.06.07.53.19; Mon, 06 May 2019 07:53:35 -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=SISdyqC+; 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 S1729437AbfEFOsT (ORCPT + 99 others); Mon, 6 May 2019 10:48:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:48402 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727845AbfEFOsR (ORCPT ); Mon, 6 May 2019 10:48:17 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 A9533205ED; Mon, 6 May 2019 14:48:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557154096; bh=Yo/FcclupItuUI/duShN/8hCZGvDgKe9Px+JlwS0P3s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SISdyqC+YcTY04f+9TnYrDc859SdLrN8mV1RkiedrjZbhMxSdKM4ZBOf/E+zgRjmr g79Wl4PLCtx+/1Ie7/RLwPeP1Ej5ZoI4oq+1oGanqDI3MwcJ4WNbEsW9X6n2C+naQe LpGpTFEzayYFbEbJhWCA+7+sI2CWBa7pWp7DdKJE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Arvind Sankar , Kai-Heng Feng , Aaron Brown , Jeff Kirsher , Sasha Levin Subject: [PATCH 4.9 34/62] igb: Fix WARN_ONCE on runtime suspend Date: Mon, 6 May 2019 16:33:05 +0200 Message-Id: <20190506143054.022934768@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190506143051.102535767@linuxfoundation.org> References: <20190506143051.102535767@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 [ Upstream commit dabb8338be533c18f50255cf39ff4f66d4dabdbe ] The runtime_suspend device callbacks are not supposed to save configuration state or change the power state. Commit fb29f76cc566 ("igb: Fix an issue that PME is not enabled during runtime suspend") changed the driver to not save configuration state during runtime suspend, however the driver callback still put the device into a low-power state. This causes a warning in the pci pm core and results in pci_pm_runtime_suspend not calling pci_save_state or pci_finish_runtime_suspend. Fix this by not changing the power state either, leaving that to pci pm core, and make the same change for suspend callback as well. Also move a couple of defines into the appropriate header file instead of inline in the .c file. Fixes: fb29f76cc566 ("igb: Fix an issue that PME is not enabled during runtime suspend") Signed-off-by: Arvind Sankar Reviewed-by: Kai-Heng Feng Tested-by: Aaron Brown Signed-off-by: Jeff Kirsher Signed-off-by: Sasha Levin --- .../net/ethernet/intel/igb/e1000_defines.h | 2 + drivers/net/ethernet/intel/igb/igb_main.c | 57 +++---------------- 2 files changed, 10 insertions(+), 49 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h index 2688180a7acd..f948eec7b35f 100644 --- a/drivers/net/ethernet/intel/igb/e1000_defines.h +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h @@ -193,6 +193,8 @@ /* enable link status from external LINK_0 and LINK_1 pins */ #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */ #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */ +#define E1000_CTRL_ADVD3WUC 0x00100000 /* D3 WUC */ +#define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000 /* PHY PM enable */ #define E1000_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */ #define E1000_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */ #define E1000_CTRL_RST 0x04000000 /* Global reset */ diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 82e48e355fb9..7956176c2c73 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -7548,9 +7548,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, struct e1000_hw *hw = &adapter->hw; u32 ctrl, rctl, status; u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol; -#ifdef CONFIG_PM - int retval = 0; -#endif + bool wake; rtnl_lock(); netif_device_detach(netdev); @@ -7563,14 +7561,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, igb_clear_interrupt_scheme(adapter); rtnl_unlock(); -#ifdef CONFIG_PM - if (!runtime) { - retval = pci_save_state(pdev); - if (retval) - return retval; - } -#endif - status = rd32(E1000_STATUS); if (status & E1000_STATUS_LU) wufc &= ~E1000_WUFC_LNKC; @@ -7587,10 +7577,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, } ctrl = rd32(E1000_CTRL); - /* advertise wake from D3Cold */ - #define E1000_CTRL_ADVD3WUC 0x00100000 - /* phy power management enable */ - #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000 ctrl |= E1000_CTRL_ADVD3WUC; wr32(E1000_CTRL, ctrl); @@ -7604,12 +7590,15 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, wr32(E1000_WUFC, 0); } - *enable_wake = wufc || adapter->en_mng_pt; - if (!*enable_wake) + wake = wufc || adapter->en_mng_pt; + if (!wake) igb_power_down_link(adapter); else igb_power_up_link(adapter); + if (enable_wake) + *enable_wake = wake; + /* Release control of h/w to f/w. If f/w is AMT enabled, this * would have already happened in close and is redundant. */ @@ -7624,22 +7613,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, #ifdef CONFIG_PM_SLEEP static int igb_suspend(struct device *dev) { - int retval; - bool wake; - struct pci_dev *pdev = to_pci_dev(dev); - - retval = __igb_shutdown(pdev, &wake, 0); - if (retval) - return retval; - - if (wake) { - pci_prepare_to_sleep(pdev); - } else { - pci_wake_from_d3(pdev, false); - pci_set_power_state(pdev, PCI_D3hot); - } - - return 0; + return __igb_shutdown(to_pci_dev(dev), NULL, 0); } #endif /* CONFIG_PM_SLEEP */ @@ -7707,22 +7681,7 @@ static int igb_runtime_idle(struct device *dev) static int igb_runtime_suspend(struct device *dev) { - struct pci_dev *pdev = to_pci_dev(dev); - int retval; - bool wake; - - retval = __igb_shutdown(pdev, &wake, 1); - if (retval) - return retval; - - if (wake) { - pci_prepare_to_sleep(pdev); - } else { - pci_wake_from_d3(pdev, false); - pci_set_power_state(pdev, PCI_D3hot); - } - - return 0; + return __igb_shutdown(to_pci_dev(dev), NULL, 1); } static int igb_runtime_resume(struct device *dev) -- 2.20.1