Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2981627pxv; Mon, 12 Jul 2021 06:40:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyFaPb1UZKxbmUT9xYj6kvuvFL6Q2Z2YRUtnDWkzyM+egj/SDNgi1p7I/gh4z7Mugcsr1iF X-Received: by 2002:a05:6402:128d:: with SMTP id w13mr15284431edv.1.1626097204152; Mon, 12 Jul 2021 06:40:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626097204; cv=none; d=google.com; s=arc-20160816; b=TAhhff6RH+cDBYplOE7CjPnaUHBhNJZ3xmtt18vgzpVCj3rHOEJlW6fw3mWSQCLBpD Mi/UL760hZQnZ621K7s/YrmiH0+WLC0Cho7noyf+05fsQJ4ZKvofbdrgqD+uUAHUAlOS 3TmiCvwbDvZh8IapFH0Whc7RcumatBEF3DVdHpIPSvT/uV1/Snvaho+hMGvfP7UWzGxs 24PEsJSayaj7xGProTqmUWHnAs31ymwJ0bGPjpnZKmP/9/pDW6FbD8m2wGUhSK6DDNLW 8jS9AbfGLlJ7n2hscXQpVHkPFbNaBDoWyF+7SkV5EbBRCXq/a8gUL7AMGmJEhf7+bsW7 mc3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LGxqAkOoOm8w+lN//0OhPBiSVWFP77FniFSghw2+jBI=; b=LgY5UnD51UhEfxl5xsyaieNu2q9Ql11PD/BP2ihRM0Tzf4d8ghnUeqW8CXhpUg+PAx 4g3e8x3pX1tTG7l8gCIvSRzBO1tGubq7jF9z0DOiHytz/rpqox58BhmBzanFjPyBG8jr iaSirE9kzZa7tW5BNroGQBDcHBdK0td1rAjb9jdKW5+i/vwsbI7SwEF2Y2+IPk6wyP23 UMxudlS1WO8fFJj8hmmNfWGuN3QPSLRhzat3gkfm0YGb4FeusPsee2VDDdwGblFGY/vo t6cTr1hDDv7GAyILIBl0CAzV2VEiFosWzAmcPauSOtrze2rcl0iwR0Tgr2+ms0dYBfpK yRAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=WfL2fbky; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id eb8si19286998edb.608.2021.07.12.06.39.41; Mon, 12 Jul 2021 06:40:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=WfL2fbky; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234435AbhGLNiH (ORCPT + 99 others); Mon, 12 Jul 2021 09:38:07 -0400 Received: from smtp-relay-canonical-0.canonical.com ([185.125.188.120]:53818 "EHLO smtp-relay-canonical-0.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234538AbhGLNiH (ORCPT ); Mon, 12 Jul 2021 09:38:07 -0400 Received: from localhost (1.general.khfeng.us.vpn [10.172.68.174]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPSA id 537044061A; Mon, 12 Jul 2021 13:35:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1626096917; bh=LGxqAkOoOm8w+lN//0OhPBiSVWFP77FniFSghw2+jBI=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=WfL2fbkya76HeKTJFQj5gPuZN/mcJPgwf6A8Gi6FcwKhiP6snnQcuSs5NVfQGn4JD DWUaFe53uuwHYTsaDZsUI+ttrmNFtqTO5PNWx7tM3bh2P/VJdaGG8feKh05cO5dQT4 YZXGHD9ItRJRRzsngbZOhdJfFQF3vlgmB6VOqpfh0ZttxBUaXW6o0JPfBWeRGczP3M v4TgPMO+OsUfs8CHiar8j3KXcH+D0w90GsFzVrIdBW8GirCjzxBV2IP6zJ2CMywJwl O2/7JFTrijYirOw4yDzkdqD6yMiAS8IXBQGMulCkB0UBSY/vDFNv9qrBXzr3FxXQQj YHJF8qAgijL4Q== From: Kai-Heng Feng To: jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com Cc: acelan.kao@canonical.com, Kai-Heng Feng , "David S. Miller" , Jakub Kicinski , intel-wired-lan@lists.osuosl.org (moderated list:INTEL ETHERNET DRIVERS), netdev@vger.kernel.org (open list:NETWORKING DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 3/3] e1000e: Serialize TGP e1000e PM ops Date: Mon, 12 Jul 2021 21:34:59 +0800 Message-Id: <20210712133500.1126371-3-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210712133500.1126371-1-kai.heng.feng@canonical.com> References: <20210712133500.1126371-1-kai.heng.feng@canonical.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On TGL systems, PCI_COMMAND may randomly flip to 0 on system resume. This is devastating to drivers that use pci_set_master(), like NVMe and xHCI, to enable DMA in their resume routine, as pci_set_master() can inadvertently disable PCI_COMMAND_IO and PCI_COMMAND_MEMORY, making resources inaccessible. The issue is reproducible on all kernel releases, but the situation is exacerbated by commit 6cecf02e77ab ("Revert "e1000e: disable s0ix entry and exit flows for ME systems""). Seems like ME can do many things to other PCI devices until it's finally out of ULP polling. So ensure e1000e PM ops are serialized by enforcing suspend/resume order to workaround the issue. Of course this will make system suspend and resume a bit slower, but we probably need to settle on this workaround until ME is fully supported. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=212039 Signed-off-by: Kai-Heng Feng --- drivers/net/ethernet/intel/e1000e/netdev.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index e63445a8ce12..0244d3dd90a3 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -7319,7 +7319,8 @@ static const struct net_device_ops e1000e_netdev_ops = { static void e1000e_create_device_links(struct pci_dev *pdev) { - struct pci_dev *tgp_mei_me; + struct pci_bus *bus = pdev->bus; + struct pci_dev *tgp_mei_me, *p; /* Find TGP mei_me devices and make e1000e power depend on mei_me */ tgp_mei_me = pci_get_device(PCI_VENDOR_ID_INTEL, 0xa0e0, NULL); @@ -7335,6 +7336,17 @@ static void e1000e_create_device_links(struct pci_dev *pdev) pci_info(pdev, "System and runtime PM depends on %s\n", pci_name(tgp_mei_me)); + /* Find other devices in the SoC and make them depend on e1000e */ + list_for_each_entry(p, &bus->devices, bus_list) { + if (&p->dev == &pdev->dev || &p->dev == &tgp_mei_me->dev) + continue; + + if (device_link_add(&p->dev, &pdev->dev, + DL_FLAG_AUTOREMOVE_SUPPLIER)) + pci_info(p, "System PM depends on %s\n", + pci_name(pdev)); + } + pci_dev_put(tgp_mei_me); } -- 2.31.1