From patchwork Thu Jul 13 12:44:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119849 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1802433vqm; Thu, 13 Jul 2023 05:56:33 -0700 (PDT) X-Google-Smtp-Source: APBJJlH5T/MvVjIIWI8fiNHa+zbYpDcv8VyfTTrZc0mALn/xNGYKZkdb5N7DMXSRrypcBThI6yo5 X-Received: by 2002:a05:6870:b312:b0:1b7:f7d6:283e with SMTP id a18-20020a056870b31200b001b7f7d6283emr1731299oao.39.1689252993193; Thu, 13 Jul 2023 05:56:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689252993; cv=none; d=google.com; s=arc-20160816; b=nARCdHabAzaa76JwGzwZ9equ+XjeevoBrx/kVEF56BDJ/bNebmSdJz+PCMxQEC1u8t AuvGHjflzVBx1CWclBpHoVOfyunYDSmpDzT/xnxPNx+Tq/PzhZTYM2pAtr6u7S6yJCEu Outj2/BsU6T9U1tEffvLlqUMA42yhMBnZ9kl8dtdiuYIu2jGZvj6PSZM+eShP2Y8TF7r QFDPoIb6GBHmosKcuhZ1q83qL9WSqPyW5Mduy0Y1OoYbuixgufZCM/gJJD0EOCE7eTga I4gInl9j6yspW1XFkr+vvgxH4MGaIMJDQ5B0UkQBQ2eeC08D5Jvimxyd9IVTLVEQS9zk 2ZrQ== 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=p3ZAwjcdMhekcslVjQHfB+bF0Kxskg1M8mAPbinzfKA=; fh=toTQDFbxlGP/dHsaqXwixhAqE3j4OmLWjbvbKVF/RMA=; b=r4TGSMIa5gZZZi0GwspxdiF4py6gjz7j+r9NphLp5cd3q8PoL2nPfmWMHUpwmyXjsr xr278ZYvmCbStFjJUyrGp9Nwzi25Pje9gj8lXmAknElnL6NGSYOIntUilx+bsup8UX+R 06Pyf905heKtntrkjaLWiAaHou/zlWQDcyRY2Rh797o0V63A8YUYgMw2aR76CepK1kbP 3tVuxoO8MN/dtV75WLoFzsMTfZWRyE9rw1SOZmhrMgytoju0K0pVCTlIqWMC/AXdiHmy 1m/9iFXzVONXif1CixbBLqY3VmbqSb6qJCZ0RUJg3RuxViT0D0/x4kXEmRRfp7pdfOYQ jJJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=k+OQIxay; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i17-20020a17090ad35100b002676a1d3249si82203pjx.143.2023.07.13.05.56.20; Thu, 13 Jul 2023 05:56:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=k+OQIxay; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234310AbjGMMpi (ORCPT + 99 others); Thu, 13 Jul 2023 08:45:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234093AbjGMMpg (ORCPT ); Thu, 13 Jul 2023 08:45:36 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A19226AF; Thu, 13 Jul 2023 05:45:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252332; x=1720788332; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jZAmi7i2DsRxp8XcsCtYleiHASBL2jOVHHwz4RQm2Wc=; b=k+OQIxaytX04VSvJXU7XrZAQqVYIPC+V9Iwy9zuKMv7+M5EiAQH807XM mQqT5QI8ub75equdWJP6h1EZcqmKl2ig5iEluAI53mYWQyK3Mv/DRSQT+ R3fvY0MdwQ4oHJh66oYozkMxwqJcJbYJwlug3Msph8jhh0sB/E4qk7EzA Aj19Rmf9yLJf6+iTZxn/IxE4uHTexzEPepj1GZoaqDd43Yhxh6j/MCL8Z hWo+SAJBxPCnIsA86I9kdye2fiD4/PzHVJpTPVbvtOOEALWj0HKvRI6DF MORbnAOaFqGrBPPcydXBA+eShlO9sjO7Av55SGVGzlqcKedl7rrk6Sjlg Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796760" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796760" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144387" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144387" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:18 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , "Rafael J. Wysocki" , Jesse Barnes , Yijing Wang , Jiang Liu , Shaohua Li , Greg Kroah-Hartman , Dean Luick , Mike Marciniszyn , Ira Weiny , Ashutosh Dixit , Doug Ledford , Ricky Wu , Rui Feng , Micky Ching , Lee Jones , Samuel Ortiz , Wei WANG , Daniel Bristot de Oliveira , "David S. Miller" , Michael Chan , Matt Carlson , Francois Romieu , Luiz Augusto von Dentz , Sven Peter , Bruce Allan , Jeff Kirsher , Auke Kok , Jeff Garzik , Vasanthakumar Thiagarajan , "John W. Linville" , Stanislaw Gruszka , Lorenzo Bianconi , Kalle Valo , Felix Fietkau , linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , stable@vger.kernel.org Subject: [PATCH v4 01/11] PCI: Add locking to RMW PCI Express Capability Register accessors Date: Thu, 13 Jul 2023 15:44:55 +0300 Message-Id: <20230713124505.94866-2-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310146759368911 X-GMAIL-MSGID: 1771310146759368911 Many places in the kernel write the Link Control and Root Control PCI Express Capability Registers without proper concurrency control and this could result in losing the changes one of the writers intended to make. Add pcie_cap_lock spinlock into the struct pci_dev and use it to protect bit changes made in the RMW capability accessors. Protect only a selected set of registers by differentiating the RMW accessor internally to locked/unlocked variants using a wrapper which has the same signature as pcie_capability_clear_and_set_word(). As the Capability Register (pos) given to the wrapper is always a constant, the compiler should be able to simplify all the dead-code away. So far only the Link Control Register (ASPM, hotplug, link retraining, various drivers) and the Root Control Register (AER & PME) seem to require RMW locking. Fixes: c7f486567c1d ("PCI PM: PCIe PME root port service driver") Fixes: f12eb72a268b ("PCI/ASPM: Use PCI Express Capability accessors") Fixes: 7d715a6c1ae5 ("PCI: add PCI Express ASPM support") Fixes: affa48de8417 ("staging/rdma/hfi1: Add support for enabling/disabling PCIe ASPM") Fixes: 849a9366cba9 ("misc: rtsx: Add support new chip rts5228 mmc: rtsx: Add support MMC_CAP2_NO_MMC") Fixes: 3d1e7aa80d1c ("misc: rtsx: Use pcie_capability_clear_and_set_word() for PCI_EXP_LNKCTL") Fixes: c0e5f4e73a71 ("misc: rtsx: Add support for RTS5261") Fixes: 3df4fce739e2 ("misc: rtsx: separate aspm mode into MODE_REG and MODE_CFG") Fixes: 121e9c6b5c4c ("misc: rtsx: modify and fix init_hw function") Fixes: 19f3bd548f27 ("mfd: rtsx: Remove LCTLR defination") Fixes: 773ccdfd9cc6 ("mfd: rtsx: Read vendor setting from config space") Fixes: 8275b77a1513 ("mfd: rts5249: Add support for RTS5250S power saving") Fixes: 5da4e04ae480 ("misc: rtsx: Add support for RTS5260") Fixes: 0f49bfbd0f2e ("tg3: Use PCI Express Capability accessors") Fixes: 5e7dfd0fb94a ("tg3: Prevent corruption at 10 / 100Mbps w CLKREQ") Fixes: b726e493e8dc ("r8169: sync existing 8168 device hardware start sequences with vendor driver") Fixes: e6de30d63eb1 ("r8169: more 8168dp support.") Fixes: 8a06127602de ("Bluetooth: hci_bcm4377: Add new driver for BCM4377 PCIe boards") Fixes: 6f461f6c7c96 ("e1000e: enable/disable ASPM L0s and L1 and ERT according to hardware errata") Fixes: 1eae4eb2a1c7 ("e1000e: Disable L1 ASPM power savings for 82573 mobile variants") Fixes: 8060e169e02f ("ath9k: Enable extended synch for AR9485 to fix L0s recovery issue") Fixes: 69ce674bfa69 ("ath9k: do btcoex ASPM disabling at initialization time") Fixes: f37f05503575 ("mt76: mt76x2e: disable pcie_aspm by default") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Reviewed-by: Rafael J. Wysocki Cc: stable@vger.kernel.org --- drivers/pci/access.c | 20 +++++++++++++++++--- drivers/pci/probe.c | 1 + include/linux/pci.h | 34 ++++++++++++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/drivers/pci/access.c b/drivers/pci/access.c index 3c230ca3de58..0b2e90d2f04f 100644 --- a/drivers/pci/access.c +++ b/drivers/pci/access.c @@ -497,8 +497,8 @@ int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val) } EXPORT_SYMBOL(pcie_capability_write_dword); -int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos, - u16 clear, u16 set) +int pcie_capability_clear_and_set_word_unlocked(struct pci_dev *dev, int pos, + u16 clear, u16 set) { int ret; u16 val; @@ -512,7 +512,21 @@ int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos, return ret; } -EXPORT_SYMBOL(pcie_capability_clear_and_set_word); +EXPORT_SYMBOL(pcie_capability_clear_and_set_word_unlocked); + +int pcie_capability_clear_and_set_word_locked(struct pci_dev *dev, int pos, + u16 clear, u16 set) +{ + unsigned long flags; + int ret; + + spin_lock_irqsave(&dev->pcie_cap_lock, flags); + ret = pcie_capability_clear_and_set_word_unlocked(dev, pos, clear, set); + spin_unlock_irqrestore(&dev->pcie_cap_lock, flags); + + return ret; +} +EXPORT_SYMBOL(pcie_capability_clear_and_set_word_locked); int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos, u32 clear, u32 set) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 8bac3ce02609..f1587fb0ba71 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2324,6 +2324,7 @@ struct pci_dev *pci_alloc_dev(struct pci_bus *bus) .end = -1, }; + spin_lock_init(&dev->pcie_cap_lock); #ifdef CONFIG_PCI_MSI raw_spin_lock_init(&dev->msi_lock); #endif diff --git a/include/linux/pci.h b/include/linux/pci.h index c69a2cc1f412..7ee498cd1f37 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -467,6 +467,7 @@ struct pci_dev { pci_dev_flags_t dev_flags; atomic_t enable_cnt; /* pci_enable_device has been called */ + spinlock_t pcie_cap_lock; /* Protects RMW ops in capability accessors */ u32 saved_config_space[16]; /* Config space saved at suspend time */ struct hlist_head saved_cap_space; int rom_attr_enabled; /* Display of ROM attribute enabled? */ @@ -1217,11 +1218,40 @@ int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val); int pcie_capability_read_dword(struct pci_dev *dev, int pos, u32 *val); int pcie_capability_write_word(struct pci_dev *dev, int pos, u16 val); int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val); -int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos, - u16 clear, u16 set); +int pcie_capability_clear_and_set_word_unlocked(struct pci_dev *dev, int pos, + u16 clear, u16 set); +int pcie_capability_clear_and_set_word_locked(struct pci_dev *dev, int pos, + u16 clear, u16 set); int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos, u32 clear, u32 set); +/** + * pcie_capability_clear_and_set_word - RMW accessor for PCI Express Capability Registers + * @dev: PCI device structure of the PCI Express device + * @pos: PCI Express Capability Register + * @clear: Clear bitmask + * @set: Set bitmask + * + * Perform a Read-Modify-Write (RMW) operation using @clear and @set + * bitmasks on PCI Express Capability Register at @pos. Certain PCI Express + * Capability Registers are accessed concurrently in RMW fashion, hence + * require locking which is handled transparently to the caller. + */ +static inline int pcie_capability_clear_and_set_word(struct pci_dev *dev, + int pos, + u16 clear, u16 set) +{ + switch (pos) { + case PCI_EXP_LNKCTL: + case PCI_EXP_RTCTL: + return pcie_capability_clear_and_set_word_locked(dev, pos, + clear, set); + default: + return pcie_capability_clear_and_set_word_unlocked(dev, pos, + clear, set); + } +} + static inline int pcie_capability_set_word(struct pci_dev *dev, int pos, u16 set) { From patchwork Thu Jul 13 12:44:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119857 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1803457vqm; Thu, 13 Jul 2023 05:58:52 -0700 (PDT) X-Google-Smtp-Source: APBJJlFPEIHv1eyKQ2p7n9bqI0Cy61xTVIEAwPAD3YqpACoJgOly8jANnxtEfjq6gUJvv1+LzF3R X-Received: by 2002:a17:90a:cc03:b0:263:ba18:3bcc with SMTP id b3-20020a17090acc0300b00263ba183bccmr682409pju.46.1689253131798; Thu, 13 Jul 2023 05:58:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253131; cv=none; d=google.com; s=arc-20160816; b=hHRZOLMgE8mL8hmPlcbvM9XDBzSo8t/NOv42tsjJIY+v4KA8L9nA++C4JcxztO5zxt X4wudI9JrUZm1ko+5uXcRtNd9y/Fgdh2fNIOxsI8mpMnzTPhuvf7yxV4IbGHIi2OnJAo 12d3mFCyTRnYaOIZBzU8pomN18o69fk7lHtzRN31K1m/fj48ir3JOiAN9QzkP8UXVioO WoRAKGlnSl3XH6FvT82hD+T3UrQZcie3r97/FkBQ4ImA/7xO3//Pks1jmQhywtGQwqSY XyLedJq5lpMLKhjAd+MCos06SbpqN595trIAoRcbtPYuTkDSox83HlgjaTW3hGnptKeK jS8Q== 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=7vC2gLsqw4ZVczATEn/TH2VSaFwYpcTfhgh6Dzndk5k=; fh=5pMyFaDlK5GhH4mb+Iu/cuxIN6lG7l/h4KuIkLNWkTo=; b=y6m2cb+tgUns/H+V7JXWcw8rdarOkoABTymcppfByapu6taUlYqd8zmFfyOAaH0FEz z5ZcDEVRBWAXk5APw2s6oFQOz09q3PSrgan4LPJCZ2SvxcvysPpXCG9W6/vZpfyGkWCS QJDpef1gVmy4DyX6D9ICjMmTSD+B4GDCyQQqkviC8gnzGJMBVJv9Uk0liDLSpBfMfs9T ypbwapezakj4YI8rlIVGQ0cvOgR02M46Iz21f9/NEmX4fi2T0zF7lVGiPVbBtniIOLWx AfHCf2TXM4JeJT2a5WL3YYLU4B1cO6QYUKaBdCzasqsbThf/UissQ84ox6jC/4We77GP dVcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="WwG/V6em"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x4-20020a17090aca0400b00263c7cadb62si12748450pjt.38.2023.07.13.05.58.39; Thu, 13 Jul 2023 05:58:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="WwG/V6em"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234074AbjGMMpr (ORCPT + 99 others); Thu, 13 Jul 2023 08:45:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234370AbjGMMpo (ORCPT ); Thu, 13 Jul 2023 08:45:44 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D6D826A0; Thu, 13 Jul 2023 05:45:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252339; x=1720788339; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=w9fmnbavpFPn2k6FB22LLTiMoKztUNTZBdmD34m58vg=; b=WwG/V6emJCh39Z63eFxqFFMQ2GXsAMKJBOdLspWd0AOI34JzLOkWxs7N /0QcCwp9Z5uQmlYIOqUyIT3ulLI/tRDBWr5sbbVTlTeuhZiM6dm1VyWFO Ll0dY8tTrRVh8Zx5dsJkwv3ZQ5j/DIvnjf7Ogi7MoABzq6lCYlHIbuPSZ TD0MmjOIs0r0gghfkcPzIDlieLSsT+pEDjcsNYaUCEMi3kusUdIAg337P s+9crGe/Q6jvTeCPp58QBEbsCcFsk5CMCG4vI2i3jJ+g8s33hYjtERqyg gTVnheD43xPjyhZBwkxD56cFskMbVfZkz9GJKiGDvnfVN51udSXrkIMYg g==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796797" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796797" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144396" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144396" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:33 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , =?utf-8?q?Stefan_M=C3=A4tje?= , Andy Shevchenko , Shaohua Li , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Dean Luick , =?utf-8?q?Jonas_Dre=C3=9Fl?= =?utf-8?q?er?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , stable@vger.kernel.org Subject: [PATCH v4 02/11] PCI: Make link retraining use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:44:56 +0300 Message-Id: <20230713124505.94866-3-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310292240015113 X-GMAIL-MSGID: 1771310292240015113 Don't assume that the device is fully under the control of PCI core. Use RMW capability accessors in link retraining which do proper locking to avoid losing concurrent updates to the register values. Fixes: 4ec73791a64b ("PCI: Work around Pericom PCIe-to-PCI bridge Retrain Link erratum") Fixes: 7d715a6c1ae5 ("PCI: add PCI Express ASPM support") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Acked-by: Rafael J. Wysocki Cc: stable@vger.kernel.org --- pci/enumeration branch moves the link retraining code into PCI core and also conflicts with a link retraining fix in pci/aspm. The changelog (and patch splitting) takes the move into account by not referring to ASPM while the change itself is not based on pci/enumeration (as per Bjorn's preference). --- drivers/pci/pci.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 60230da957e0..f7315b13bb82 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4927,7 +4927,6 @@ static int pcie_wait_for_link_status(struct pci_dev *pdev, int pcie_retrain_link(struct pci_dev *pdev, bool use_lt) { int rc; - u16 lnkctl; /* * Ensure the updated LNKCTL parameters are used during link @@ -4939,17 +4938,14 @@ int pcie_retrain_link(struct pci_dev *pdev, bool use_lt) if (rc) return rc; - pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &lnkctl); - lnkctl |= PCI_EXP_LNKCTL_RL; - pcie_capability_write_word(pdev, PCI_EXP_LNKCTL, lnkctl); + pcie_capability_set_word(pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_RL); if (pdev->clear_retrain_link) { /* * Due to an erratum in some devices the Retrain Link bit * needs to be cleared again manually to allow the link * training to succeed. */ - lnkctl &= ~PCI_EXP_LNKCTL_RL; - pcie_capability_write_word(pdev, PCI_EXP_LNKCTL, lnkctl); + pcie_capability_clear_word(pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_RL); } return pcie_wait_for_link_status(pdev, use_lt, !use_lt); From patchwork Thu Jul 13 12:44:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119860 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1804619vqm; Thu, 13 Jul 2023 06:00:46 -0700 (PDT) X-Google-Smtp-Source: APBJJlED6HIFY3+8LVPmP3V4E8WDRO7GdFgTK0Vb3CbU3Jed1WNeLB/9WIhR7Q5A2Yuxe25r3yJx X-Received: by 2002:a92:60c:0:b0:345:cf3f:2fd with SMTP id x12-20020a92060c000000b00345cf3f02fdmr1546067ilg.13.1689253246177; Thu, 13 Jul 2023 06:00:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253246; cv=none; d=google.com; s=arc-20160816; b=NbjPzOYWXnlO6FslN+42+CkBAzqCsc4GIyHbzfklfOFyucpt1Usy4maGYnH21E0Sh3 /zny0W2OwvdGNQPAMOj99tzjAQ/SD4hf224DI19u0UKARoyAE61Amv3yDSuWtK23/fvx qmWkGdZcMNs5ZabUDbETDz47wc82og16VEqgjY9sIhB8pAAIGUKcspFt5gp9DkGoNfhF cBYoKfIRCErnf/B9Av+Ro/E6RXeKK7wK1dkEpNvqCrn1zM3D9NqzeuuwLpEMJmnH7rQ0 B2UBa7YpYAoJA0fcsDjXPcVyuncImKiFycwAOo7RNxY9ccp02Mkn/gk3RzMeauJdRdlG RmAg== 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=smwaJzhTi7B3QggAvtZ+wXBzGRpLQ3KL5+IukVd1Cao=; fh=Oh12CUlWM6q26IWhJj7iQeO77lZpEATE49xwZ++0rl0=; b=KgeQWAZpvjODiaWkM2D52QVM+11/+3WghGxand5/k99LX/7GGZFKmlSMG9w9+dDxIT DpYehKeVmuhoZx6qw29x/Hnr+CmDjfXyn2BVg0cQN+huDSg5aNjXnErVB7DzX6u5XTxE WpNdlQu+3g1QpOYa2WThNzeAJEV4U+8v8lfuVKHcBEOn+ViVI9WZnP2aVo9juJ+i0Vq2 YaBzEzM9GoVrY/74G4qmP6B/supVfHxBn3L6hmNRTYIlMMHHZJm60JXL3fHiir9pj6Ux V3AAoO/m0XKTq+hu2/93MuEOXMr3EWFdCWrfOlN65XGNn1DR+nyLxGkMLUbFdvg8bDyI 7g8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=m+6h248c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i4-20020a633c44000000b00553361ff1a9si4829749pgn.746.2023.07.13.06.00.31; Thu, 13 Jul 2023 06:00:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=m+6h248c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234380AbjGMMpw (ORCPT + 99 others); Thu, 13 Jul 2023 08:45:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234506AbjGMMpr (ORCPT ); Thu, 13 Jul 2023 08:45:47 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E8928213C; Thu, 13 Jul 2023 05:45:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252346; x=1720788346; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6XrYSLnRiRdBPpgn0CFb5orJiB6ktHC50J1M1HARYbo=; b=m+6h248cNwKj1OvN7NaU3rKCTyH896M5AAvpRqQzMZ56oSQxWaxDBGFM yccl+13U8z0ZmRJf9G87GEH4eM9AcJUOqADR9su1G8waB9nbkIg/GpNwA 3xwbgOSX/DvBdD7mtrP833TMyxKzN/IAMiX8ZTZs/7jz42VFBl5ieMVVt lvhyBQG+jyomTPIggGhJOpQfQ6lkm8ErmxIYogqXFLg36d3b8+xB9P0Zt vRbdrYRZbL8swgZOyyTqcE5CHtj6HW4MaSCp06yyp35MTTQvrpi1+zIHk 6805kyBB32k1hdrhEoeK6gY7qLuldHtSbZEDTa1jTwQaLm0l1VdTLY3BS g==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796825" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796825" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144406" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144406" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:40 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Jesse Barnes , Yinghai Lu , linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , stable@vger.kernel.org Subject: [PATCH v4 03/11] PCI: pciehp: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:44:57 +0300 Message-Id: <20230713124505.94866-4-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310411874378573 X-GMAIL-MSGID: 1771310411874378573 As hotplug is not the only driver touching LNKCTL, use the RMW capability accessor which handles concurrent changes correctly. Fixes: 7f822999e12a ("PCI: pciehp: Add Disable/enable link functions") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Acked-by: Rafael J. Wysocki Cc: stable@vger.kernel.org --- drivers/pci/hotplug/pciehp_hpc.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 8711325605f0..e9ec77d8d44a 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c @@ -332,17 +332,11 @@ int pciehp_check_link_status(struct controller *ctrl) static int __pciehp_link_set(struct controller *ctrl, bool enable) { struct pci_dev *pdev = ctrl_dev(ctrl); - u16 lnk_ctrl; - pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &lnk_ctrl); + pcie_capability_clear_and_set_word(pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_LD, + !enable ? PCI_EXP_LNKCTL_LD : 0); - if (enable) - lnk_ctrl &= ~PCI_EXP_LNKCTL_LD; - else - lnk_ctrl |= PCI_EXP_LNKCTL_LD; - - pcie_capability_write_word(pdev, PCI_EXP_LNKCTL, lnk_ctrl); - ctrl_dbg(ctrl, "%s: lnk_ctrl = %x\n", __func__, lnk_ctrl); return 0; } From patchwork Thu Jul 13 12:44:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119852 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1803012vqm; Thu, 13 Jul 2023 05:57:51 -0700 (PDT) X-Google-Smtp-Source: APBJJlHx3rhmft+tr9VK6Gzs9kYsiL3HywCThHbUoTN53rIV/mXNikXvdIVZK7HKC69kQ3xWEgwS X-Received: by 2002:a92:c081:0:b0:347:6d5f:ab2f with SMTP id h1-20020a92c081000000b003476d5fab2fmr1329853ile.6.1689253070637; Thu, 13 Jul 2023 05:57:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253070; cv=none; d=google.com; s=arc-20160816; b=jsLk9GRiDm6iUC7Z+Ez9Q4X8SUNudRnJRJPoU37gVa0AVMxVVMfBnsbbGNmE8W3B1v VO67BY0Z1CjODBljQe8yzgT4bhGd1VI5ieAkoI1AGoKx+8QNU0mEwJ0+/usb4XrPVDKd OLs6iB7LCR7H6uHG8+hJUD7jHUsrksJKH1fFpcCWJjjEJ5cjT7zc/lEVnQi6xVZmFwg1 YC2ZL9MQwe3wGppn0F4jOnTV2GitajLamh0QzdHT2ssUtIQ9B0e+kJ+/VRvvEG9sqZj1 0blCIAVV+5PQ07Prry0fsV2arCNfXssOirfHZ8ZgDFeZN+QoPro0YVVd0QylpsGsP+cb 7g3A== 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=4cWrVm+jRiMdi3FvLLR+E54cNQBIbYjlmP/56FYVTG0=; fh=HXiHZfA0xDDhmUvPAHAsMqmHkk1Eofb/LiYFvxrh4Fw=; b=kRmz+94nNq9labtMligDnZBeQDecZobfGQhnV7sR4d5qTFLlmD6Xr7WSR2mFf9q3mB eWbAa7s62P+fcZJu+KCBupbske0kPCg5KJ2clOFVhKZo//zKB+EmpHZIFJljlLazGwPV gyU+hx1sPIsW7wXwd97XqZrHf3GhjquCnPvD2Zuj0LHgsgVwdLk7PWhjhlTLkC+xV9tv hBkdel3ULUf6eYHV7p7pFFrjfobcv9/Z47/U5UgpO0VIib0sMXV1MuK3JHe0mznJRf75 yJ+fIxcPc57jRJSaVGGV01XtxW6Wqz03lsMWYVxqr1cu49Fe0KXHxBOWHl7UgDv4rMeR IwFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=mproLPtD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d3-20020a17090ab30300b00263c48abf8asi12524191pjr.31.2023.07.13.05.57.37; Thu, 13 Jul 2023 05:57:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=mproLPtD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234347AbjGMMqC (ORCPT + 99 others); Thu, 13 Jul 2023 08:46:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234797AbjGMMp6 (ORCPT ); Thu, 13 Jul 2023 08:45:58 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1BC92698; Thu, 13 Jul 2023 05:45:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252353; x=1720788353; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VbWjooAKdAMxvMHk6ia791hLWwyb/8RqjapPxtyf+Bo=; b=mproLPtDQElZ4J7wzYcGpvVf/qRlCHpZSCPAz9hQZO21hSBtOCmzRkIw cyKXt3hhvrdhSSbCXc0WY1aIVw+YZhcmIszdPjy1G2FwP+2a4L3vwWyiE vAM62uTp5rmdS6lhzIpuFqikXUZnUwfTV9EfeF4WOZdCuf36aVXNimwTK s3w3QcKcCz8R+aRurWzF3VVlGPUkRTNNS3hMcyRr4cOlw7KwYsKeOVsg+ PimVKfP2zqQrOnWEdNGABk3NiyqT73hYIt6kly7ayDF49jbghilG1wjDn EQvAZ5UVyoZWJje7G9/ODtbexykxP9N+SJQmws4kYdJd+OdeFdq5crXv9 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796851" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796851" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144415" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144415" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:46 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Jesse Barnes , Matthew Garrett , Shaohua Li , Thomas Renninger , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , stable@vger.kernel.org Subject: [PATCH v4 04/11] PCI/ASPM: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:44:58 +0300 Message-Id: <20230713124505.94866-5-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310227670698424 X-GMAIL-MSGID: 1771310227670698424 Don't assume that the device is fully under the control of ASPM and use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register values. If configuration fails in pcie_aspm_configure_common_clock(), the function attempts to restore the old PCI_EXP_LNKCTL_CCC settings. Store only the old PCI_EXP_LNKCTL_CCC bit for the relevant devices rather than the content of the whole LNKCTL registers. It aligns better with how pcie_lnkctl_clear_and_set() expects its parameter and makes the code more obvious to understand. Fixes: 2a42d9dba784 ("PCIe: ASPM: Break out of endless loop waiting for PCI config bits to switch") Fixes: 7d715a6c1ae5 ("PCI: add PCI Express ASPM support") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Acked-by: Rafael J. Wysocki Cc: stable@vger.kernel.org --- drivers/pci/pcie/aspm.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index 3dafba0b5f41..207c247cba02 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c @@ -199,7 +199,7 @@ static void pcie_clkpm_cap_init(struct pcie_link_state *link, int blacklist) static void pcie_aspm_configure_common_clock(struct pcie_link_state *link) { int same_clock = 1; - u16 reg16, parent_reg, child_reg[8]; + u16 reg16, parent_old_ccc, child_old_ccc[8]; struct pci_dev *child, *parent = link->pdev; struct pci_bus *linkbus = parent->subordinate; /* @@ -221,6 +221,7 @@ static void pcie_aspm_configure_common_clock(struct pcie_link_state *link) /* Port might be already in common clock mode */ pcie_capability_read_word(parent, PCI_EXP_LNKCTL, ®16); + parent_old_ccc = reg16 & PCI_EXP_LNKCTL_CCC; if (same_clock && (reg16 & PCI_EXP_LNKCTL_CCC)) { bool consistent = true; @@ -240,31 +241,27 @@ static void pcie_aspm_configure_common_clock(struct pcie_link_state *link) /* Configure downstream component, all functions */ list_for_each_entry(child, &linkbus->devices, bus_list) { pcie_capability_read_word(child, PCI_EXP_LNKCTL, ®16); - child_reg[PCI_FUNC(child->devfn)] = reg16; - if (same_clock) - reg16 |= PCI_EXP_LNKCTL_CCC; - else - reg16 &= ~PCI_EXP_LNKCTL_CCC; - pcie_capability_write_word(child, PCI_EXP_LNKCTL, reg16); + child_old_ccc[PCI_FUNC(child->devfn)] = reg16 & PCI_EXP_LNKCTL_CCC; + pcie_capability_clear_and_set_word(child, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_CCC, + same_clock ? PCI_EXP_LNKCTL_CCC : 0); } /* Configure upstream component */ - pcie_capability_read_word(parent, PCI_EXP_LNKCTL, ®16); - parent_reg = reg16; - if (same_clock) - reg16 |= PCI_EXP_LNKCTL_CCC; - else - reg16 &= ~PCI_EXP_LNKCTL_CCC; - pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16); + pcie_capability_clear_and_set_word(parent, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_CCC, + same_clock ? PCI_EXP_LNKCTL_CCC : 0); if (pcie_retrain_link(link->pdev, true)) { /* Training failed. Restore common clock configurations */ pci_err(parent, "ASPM: Could not configure common clock\n"); list_for_each_entry(child, &linkbus->devices, bus_list) - pcie_capability_write_word(child, PCI_EXP_LNKCTL, - child_reg[PCI_FUNC(child->devfn)]); - pcie_capability_write_word(parent, PCI_EXP_LNKCTL, parent_reg); + pcie_capability_clear_and_set_word(child, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_CCC, + child_old_ccc[PCI_FUNC(child->devfn)]); + pcie_capability_clear_and_set_word(parent, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_CCC, parent_old_ccc); } } From patchwork Thu Jul 13 12:44:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119859 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1804564vqm; Thu, 13 Jul 2023 06:00:43 -0700 (PDT) X-Google-Smtp-Source: APBJJlEaj6UoCVTKZ0Ws3D6IDde9APBNL14LSq7iytXH9B68BTavqWr89X22pS4N7jM/n/sMUM/o X-Received: by 2002:a17:90b:1196:b0:263:fbe5:2125 with SMTP id gk22-20020a17090b119600b00263fbe52125mr734646pjb.15.1689253243032; Thu, 13 Jul 2023 06:00:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253243; cv=none; d=google.com; s=arc-20160816; b=u2e3aC7PVJlXPEVTsrVyGnT5DP8NhuGnYfTiQcAcl/PcrIPxIv63sawu/prcQEA/Ad F2j8+CHkNRHK6KKXnHoykop9tG+ZUB5gPj4flL4I600EvoMcMg11KidsjeGpFx0TTOTJ hvsSmDwqU703J+UTyfH/EvIxz/Ru/er+ddLPxo0+KKpU4c1NU0XHVBQbZXspeERja308 oQlYP/19BkYXCYYyw+n1i4Bs7xTmHqO1DWUA2VU5gJcc2W2gjL+zyUzgJDvlwcF+Ft7T mqX3pCAFU70dUzJtyA6fQf7eF9TRVWUV4MZWbrqrd0OhST6a7zIGa6KRSZPmCV3u8+WT PeWA== 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=DJCk9H8NjlHLWjxYTr3X/X32otaC5i9kj8oaZNrgx2k=; fh=ZuXnDey3ioPDAHbbsx5VspvgW6MuwaoJosQKxTnoHxQ=; b=Tk6eXSA5cSE/aNa1bxNAfD8BOVPOiW8/uk5GuTsN0dVkNZlcLTO1SuiCbzadoIZQbh hFWgK4JM+HyAuVuTK16+8hCGr9RXxcfkcVoOfQFM2ZL5lJQPNOwZu3sgCUUU8PfuHPMp MqimkfoAU3OW7+IhnUmqIIeRXctrhaSPRFLnvcFR0RUc+mbWrvVFKyhc2eUFQF/gBSPU LohHT7VZ3GZVyqSM5Xmz9VdIpLrDDOmaSpEiKJqEEu6KMBUS9wwoqJZKr5CZL4GZJhPt qb+8QJcvfVwasuPzYdKI6db2Os7BZn83Llt4Wr3zUWwhfwUtXgdWMDfcQXRX1L38minr CnJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ckgmwTyT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o16-20020a170902d4d000b001b86c526fd8si5305482plg.448.2023.07.13.06.00.29; Thu, 13 Jul 2023 06:00:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ckgmwTyT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234789AbjGMMqL (ORCPT + 99 others); Thu, 13 Jul 2023 08:46:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234791AbjGMMqG (ORCPT ); Thu, 13 Jul 2023 08:46:06 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6B7826BB; Thu, 13 Jul 2023 05:45:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252359; x=1720788359; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VhhcnDHF/FdV7G9a+KgzNDWuFlTB09j2SuCsCihoI0k=; b=ckgmwTyTCnQfmw7cUbsgwXteMvuZr01lIJHxR0G0d4g+8HTes3PHWczg wBq6Tq6meS/kzTD69og+2yKtk4MPLCZl6OhAj6j9ZNCikLAb1KP+xPziT mkSh3UZ5yLpws7SlCcZ9y9dZo9L6cnUmH0Ym2u2A9JmQQdW/Mg1rFpxnz v/anKlsEiQV/ahcgbhP+eRe16APUBgW/PbovNOYmhtLvC/pthMNgX5tgs iNsj1J3gbTmPOYeuIJlOa3X2M+V5MYBKYigVcl5znKvOlq14S+SfmYIF0 HQwi9U+SeyHqJa2wUEyowkgv34W+U4QLv5Dmaj3WY8IE0TRzIHdzrG8av g==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796880" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796880" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144427" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144427" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:45:53 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , "Pan, Xinhui" , David Airlie , Daniel Vetter , Jammy Zhou , Ken Wang , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , stable@vger.kernel.org Subject: [PATCH v4 05/11] drm/amdgpu: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:44:59 +0300 Message-Id: <20230713124505.94866-6-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310408628135349 X-GMAIL-MSGID: 1771310408628135349 Don't assume that only the driver would be accessing LNKCTL. ASPM policy changes can trigger write to LNKCTL outside of driver's control. And in the case of upstream bridge, the driver does not even own the device it's changing the registers for. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. Fixes: a2e73f56fa62 ("drm/amdgpu: Add support for CIK parts") Fixes: 62a37553414a ("drm/amdgpu: add si implementation v10") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Cc: stable@vger.kernel.org --- drivers/gpu/drm/amd/amdgpu/cik.c | 36 +++++++++----------------------- drivers/gpu/drm/amd/amdgpu/si.c | 36 +++++++++----------------------- 2 files changed, 20 insertions(+), 52 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index 5641cf05d856..e63abdf52b6c 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c @@ -1574,17 +1574,8 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &bridge_cfg); - pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL, - &gpu_cfg); - - tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); - - tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL, - tmp16); + pcie_capability_set_word(root, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); + pcie_capability_set_word(adev->pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); tmp = RREG32_PCIE(ixPCIE_LC_STATUS1); max_lw = (tmp & PCIE_LC_STATUS1__LC_DETECTED_LINK_WIDTH_MASK) >> @@ -1637,21 +1628,14 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) msleep(100); /* linkctl */ - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(root, PCI_EXP_LNKCTL, - tmp16); - - pcie_capability_read_word(adev->pdev, - PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(adev->pdev, - PCI_EXP_LNKCTL, - tmp16); + pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + bridge_cfg & + PCI_EXP_LNKCTL_HAWD); + pcie_capability_clear_and_set_word(adev->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + gpu_cfg & + PCI_EXP_LNKCTL_HAWD); /* linkctl2 */ pcie_capability_read_word(root, PCI_EXP_LNKCTL2, diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c index f64b87b11b1b..4b81f29e5fd5 100644 --- a/drivers/gpu/drm/amd/amdgpu/si.c +++ b/drivers/gpu/drm/amd/amdgpu/si.c @@ -2276,17 +2276,8 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &bridge_cfg); - pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL, - &gpu_cfg); - - tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); - - tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL, - tmp16); + pcie_capability_set_word(root, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); + pcie_capability_set_word(adev->pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); tmp = RREG32_PCIE(PCIE_LC_STATUS1); max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; @@ -2331,21 +2322,14 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) mdelay(100); - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(root, PCI_EXP_LNKCTL, - tmp16); - - pcie_capability_read_word(adev->pdev, - PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(adev->pdev, - PCI_EXP_LNKCTL, - tmp16); + pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + bridge_cfg & + PCI_EXP_LNKCTL_HAWD); + pcie_capability_clear_and_set_word(adev->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + gpu_cfg & + PCI_EXP_LNKCTL_HAWD); pcie_capability_read_word(root, PCI_EXP_LNKCTL2, &tmp16); From patchwork Thu Jul 13 12:45:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119848 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1802119vqm; Thu, 13 Jul 2023 05:55:54 -0700 (PDT) X-Google-Smtp-Source: APBJJlFQ6H7HkaRe8NaDuYIbbJFiYamkY/rLAOhi4383z1BbAa7BGR6KyUGEdi1VJTS0lRwDXZ6m X-Received: by 2002:a17:90b:3606:b0:250:8f09:75f2 with SMTP id ml6-20020a17090b360600b002508f0975f2mr688806pjb.22.1689252953962; Thu, 13 Jul 2023 05:55:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689252953; cv=none; d=google.com; s=arc-20160816; b=bQsK65V9Kwo0ARWrcFufYyRxiliy3tpDDXj91yFwj0L2o0Lxgct1qoBLJdz5mZstsh qg250xyxIKm3cbZaJ9kSpOw1wq4qS2UcXOFY7K0OKeED1IGb2VrTI/AR1bOvGS5E5XgD EsYFUOkesH1jiSFhJYZ2noLMgghF2KrpzOFJTV4A3yBILqBzEJHG0Z1D4z9LQBrWeYxA GUbZtxszxAqJvC+Zcb/xLDh5N2REQP4lQSg7P+hyKyvOjExpIJGXmUzlcPGq3HRApBkT hMokc1oJ/5Xo2xhdGVdpuLxju+QNUCk0mpA3QUYKbc3NDC6y+1PsF30gWGbp6hvN/TTK /8fg== 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=dFji1MWCUxcjxXi60dGRISy3Bi+X6Bwf5WbJOKRpeLw=; fh=yAYMZ9IASoilVHuVDJHHzvMyDCccSZTbL2GfjKjFCZQ=; b=KyU/bAI+GKNoppftQL3GZl/3KjCB0HKzqCxV+Gs3xuQfb397/bWXkuYboE87VOIa6g pwP/5RYf/JEfP9UJjrRyKixuQYaexuVdnHiKzez/o6VMUICm1bDQq4anXn7vgGneUMRV 4HkDxFfvfyIZh8ki/WBKpyp12hFc6JOp4EIIrk9FO5BRHFSkgrIYgTaQQEgJwA0AImDk //Dbhi5Xccc5oVnaXniN1QzEhQkC+zbC/hZIs9sOknbbgrArbgl982R57vBe3dJvj3nD W7b5jVw5L2JLpDrVRjIpWCqbFapwRrsl+pl2x/8UyaZzpesOJxKQctn5Fsb+j6jAWwaR B9MA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ETjHWH1F; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mp12-20020a17090b190c00b0025de453ee4csi5154185pjb.168.2023.07.13.05.55.40; Thu, 13 Jul 2023 05:55:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ETjHWH1F; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233557AbjGMMqb (ORCPT + 99 others); Thu, 13 Jul 2023 08:46:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56492 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234795AbjGMMq0 (ORCPT ); Thu, 13 Jul 2023 08:46:26 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0DF242D64; Thu, 13 Jul 2023 05:46:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252367; x=1720788367; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0Dt11mJGY3uST81NgKzX3Wy33nGbeSvB9w1sz8eDsQc=; b=ETjHWH1F+DV6xbK1HYk05RwpovV3i595UkSTtr8LvawPsxOW49lb1BVl PVxisY5E1gl+PGRLagQFaLqecSgu2+ecp+Hjf2ieJbMwNkEY3Bn0vbUMk xwk9l5b4mBFGKhD77srXwjgdvqz8FzsVwVn3A0ZP38oJ5XMxmbHMxr9Mh YRTUh53++Ff2FgkToF8NiTTeM/QLaryFalUZpqAAPYviqHDvDyUS7ZJiQ bM6tfiGQHMrrs67QKuAE1nUGXx3HEUblFfFWo5R+/TDV6qYth45Bbt438 kTIlb0QrOP1mtp+o0+YvagFcTU4ZV1rtBEMJyMNQovLuiLJPkoFYUav4d Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796907" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796907" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:06 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144444" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144444" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:00 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , "Pan, Xinhui" , David Airlie , Daniel Vetter , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , stable@vger.kernel.org Subject: [PATCH v4 06/11] drm/radeon: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:45:00 +0300 Message-Id: <20230713124505.94866-7-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310105547497254 X-GMAIL-MSGID: 1771310105547497254 Don't assume that only the driver would be accessing LNKCTL. ASPM policy changes can trigger write to LNKCTL outside of driver's control. And in the case of upstream bridge, the driver does not even own the device it's changing the registers for. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. Fixes: 8a7cd27679d0 ("drm/radeon/cik: add support for pcie gen1/2/3 switching") Fixes: b9d305dfb66c ("drm/radeon: implement pcie gen2/3 support for SI") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Cc: stable@vger.kernel.org --- drivers/gpu/drm/radeon/cik.c | 36 ++++++++++------------------------- drivers/gpu/drm/radeon/si.c | 37 ++++++++++-------------------------- 2 files changed, 20 insertions(+), 53 deletions(-) diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 5819737c21c6..a6f3c811ceb8 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c @@ -9534,17 +9534,8 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &bridge_cfg); - pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL, - &gpu_cfg); - - tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); - - tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL, - tmp16); + pcie_capability_set_word(root, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); + pcie_capability_set_word(rdev->pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); tmp = RREG32_PCIE_PORT(PCIE_LC_STATUS1); max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; @@ -9591,21 +9582,14 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) msleep(100); /* linkctl */ - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(root, PCI_EXP_LNKCTL, - tmp16); - - pcie_capability_read_word(rdev->pdev, - PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(rdev->pdev, - PCI_EXP_LNKCTL, - tmp16); + pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + bridge_cfg & + PCI_EXP_LNKCTL_HAWD); + pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + gpu_cfg & + PCI_EXP_LNKCTL_HAWD); /* linkctl2 */ pcie_capability_read_word(root, PCI_EXP_LNKCTL2, diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index 8d5e4b25609d..a91012447b56 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c @@ -7131,17 +7131,8 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &bridge_cfg); - pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL, - &gpu_cfg); - - tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); - - tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL, - tmp16); + pcie_capability_set_word(root, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); + pcie_capability_set_word(rdev->pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); tmp = RREG32_PCIE(PCIE_LC_STATUS1); max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; @@ -7188,22 +7179,14 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) msleep(100); /* linkctl */ - pcie_capability_read_word(root, PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(root, - PCI_EXP_LNKCTL, - tmp16); - - pcie_capability_read_word(rdev->pdev, - PCI_EXP_LNKCTL, - &tmp16); - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; - tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pcie_capability_write_word(rdev->pdev, - PCI_EXP_LNKCTL, - tmp16); + pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + bridge_cfg & + PCI_EXP_LNKCTL_HAWD); + pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_HAWD, + gpu_cfg & + PCI_EXP_LNKCTL_HAWD); /* linkctl2 */ pcie_capability_read_word(root, PCI_EXP_LNKCTL2, From patchwork Thu Jul 13 12:45:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119855 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1803336vqm; Thu, 13 Jul 2023 05:58:33 -0700 (PDT) X-Google-Smtp-Source: APBJJlF1RgYQN4uQUwiCZ1fRJIGoPXvatStI/nE0kHDFuPNjHkZ+gQfCph6XNSlqOa3T3gQJ3jBn X-Received: by 2002:a05:6870:40cd:b0:1a3:16af:56e2 with SMTP id l13-20020a05687040cd00b001a316af56e2mr2437930oal.19.1689253112908; Thu, 13 Jul 2023 05:58:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253112; cv=none; d=google.com; s=arc-20160816; b=Id+to/Q8V3m+/1qt91LsT1Cf47UTQGTUMMsWUAgy5rNddZPdVJPV4cE3GbpAQQyL/Z s9HFPeEeAcA+VjnY4qq2Hj+t06qnwHXEzlkCAPrfu0/DEIEiTThbfz9IqVMJ+t6SLSyd 5SVoCrRHq5i6ZaXNrMErSXVAWLHPeHjrD1pLTT8eLN0Y1hsIe9N3Kp7mfR7/RG7rMlg/ rv/XzcVrxTVsHbZMbiRWUhtxivLCHcjZzRufNRiOeOc6OcKLpEdNVkOYfatZVNYOEJ60 2gxDt0dZXcBXwjYtilXJvqQpYf1M4WSmaaBYHbw7empwa8QzIcmDzmmF51C4Ve0R27s3 G65A== 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=7/rlENRwBX/s8n0FTMoBrQ4BZgrvGgHfRpv5FTOCNDg=; fh=F68je8whXDxa8XKiOFP2CxsXi0R9CIRqFzyKo8SF/kk=; b=JS5KRUtyxG309fvnJElVTmgI3alVDRLO/RwmEkpRiQ8VhYQn4+LGMTUjiL5qP+gVXk 7lPysvE64hHHvDvLkN56ic/i9KcedEG8eIVIx5SoAu8baRPz+wD77yMWcs+9e2y1WAtl xDnYtCBA5uScntRNRAg6nDNPIu2o8sjqjyLHbhaEEMYUKEOcm9o8aE+S5MC5qyWBetVh FEYr99224mzxMgXGAirIL69U3IArADj95lT53b1xFsCLa84G+4PP3liWU5vwnwqCy80w z6ii5L2pm0NXdMPOkL7xEdSvKtkSoICAehiWu4x9i07e5/CbnCaEPfkclrbjqqd57n2t hoqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fxSIoaW6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x4-20020a17090aca0400b00263c7cadb62si12748450pjt.38.2023.07.13.05.58.18; Thu, 13 Jul 2023 05:58:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fxSIoaW6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233666AbjGMMqx (ORCPT + 99 others); Thu, 13 Jul 2023 08:46:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233560AbjGMMqu (ORCPT ); Thu, 13 Jul 2023 08:46:50 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5206926B1; Thu, 13 Jul 2023 05:46:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252386; x=1720788386; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=32kRKfdMgDzPzA7zG83cMwuqvw0HkhDshGCOND8kKRk=; b=fxSIoaW67HJ4JXON+sFsfRe3SAj+egnPB3bO2NSP58lcVmRfsFqHc5g+ MMusC4bspqOJ9p3mQOj4hRoaZkCxPFEGGJYHaW36oCaBXPHJAKbc64R8d J3elUik7h1YyO6xnpfOljW59k6rTzMFJijA1cA5H+LlofdSYvxNwOaNM3 8Bj9YxFW2D/LcCMh0C2YiPl3x9ahohnd7VzUwhsek73WpvHG1kRYSDIVZ 09IE4BWc2wM5yFNlNnfuF426g4Va9BO2ZzjkB6Gp45SWDQnjM0DNn/RuH NaEce348aD8uayEU3GzZ2Hs7U/dtn8FpAhEJh3nhcCwtvjtojJ2w0cd+G Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796963" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796963" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144480" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144480" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:07 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Saeed Mahameed , Leon Romanovsky , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Moshe Shemesh , netdev@vger.kernel.org, linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Moshe Shemesh , Simon Horman , stable@vger.kernel.org Subject: [PATCH v4 07/11] net/mlx5: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:45:01 +0300 Message-Id: <20230713124505.94866-8-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310272094075820 X-GMAIL-MSGID: 1771310272094075820 Don't assume that only the driver would be accessing LNKCTL of the upstream bridge. ASPM policy changes can trigger write to LNKCTL outside of driver's control. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. Fixes: eabe8e5e88f5 ("net/mlx5: Handle sync reset now event") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Reviewed-by: Moshe Shemesh Reviewed-by: Simon Horman Cc: stable@vger.kernel.org --- drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c index 4804990b7f22..99dcbd006357 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c @@ -384,16 +384,11 @@ static int mlx5_pci_link_toggle(struct mlx5_core_dev *dev) pci_cfg_access_lock(sdev); } /* PCI link toggle */ - err = pci_read_config_word(bridge, cap + PCI_EXP_LNKCTL, ®16); - if (err) - return err; - reg16 |= PCI_EXP_LNKCTL_LD; - err = pci_write_config_word(bridge, cap + PCI_EXP_LNKCTL, reg16); + err = pcie_capability_set_word(bridge, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_LD); if (err) return err; msleep(500); - reg16 &= ~PCI_EXP_LNKCTL_LD; - err = pci_write_config_word(bridge, cap + PCI_EXP_LNKCTL, reg16); + err = pcie_capability_clear_word(bridge, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_LD); if (err) return err; From patchwork Thu Jul 13 12:45:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119854 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1803257vqm; Thu, 13 Jul 2023 05:58:22 -0700 (PDT) X-Google-Smtp-Source: APBJJlEOPUnYClasOYZw/7N2yyrpOVenuhwFMwyeE1ukBYILp5c3OTQKnfDZ1fKH8jICqufJBd1B X-Received: by 2002:a17:90a:c20d:b0:263:f5b7:bc05 with SMTP id e13-20020a17090ac20d00b00263f5b7bc05mr724295pjt.14.1689253101936; Thu, 13 Jul 2023 05:58:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253101; cv=none; d=google.com; s=arc-20160816; b=RmXOQlflOTNvUBo2bFz/jJrcqkTfv/WaAZk0KOWFxEjg597J4QUxAZgDs2I0y048R9 PiLfDaemZ/OIoYeRKYCH/t3eMzQljwkaSAN3CLpSrdurxSsYEFuzzPAtcDP4egnXmwsM JYl/BJ+aqWeKYz9SwTOUoDxhiobVCUrFhvK4G77nApaNibXMxLl0PJxv6oSksWJRljHx PfWhLnUYDzzcIk8HViJCXuafYY9htYfsArc8URWAGYhiHG8XTDTYHC8bhV/Cbyg4uCKw 2fNSPtDVRpM4HLn/bAgllXjl5J59v1K2nBfIQ/eihkWVocta7D5RDIcUiaWEtZcNLrYm ykFw== 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=jMgy7ppga2s+Z07Kb6EgiJdqKLbXwXznJoTbLetyhDE=; fh=AQPfrmUUmicFSUOtWtkPc8xyqHmenWQuakhB1pZxC3A=; b=LK/vatYZNQCjwbTU8iwSO/nBstYzlJo+30d3PGRL1cUIyxyqIEvgvIqxMcX5/fC54w sZL9yfUi/5ltmQwcj3d7C2rWA0DeQMBHNZ/aIQaFzv4xAnXL3PwX3TZl3HrT0iefhaRb yiFxToNSxd4+DlWN4j/snk/dvBLno7wzSnT+L7Pt0YaQR/6gDyxCmwVcIpnjAGT0kIQC X9B9E+N4JXZnrQd++c6XRznjugXhFp5hECoiX92cLbC9Domop7h6OvTyYpSawVpUIXW5 2EOAIxXR/sEirkO5CcguM31MJQGiz8PvRO+XLjBqILoIrhJ5NSQ6E+SV0nRhCZFHHS0M D+yQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="mpd5/x3R"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x11-20020a17090a970b00b0026390b4a4e0si12219147pjo.124.2023.07.13.05.58.07; Thu, 13 Jul 2023 05:58:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="mpd5/x3R"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233560AbjGMMq4 (ORCPT + 99 others); Thu, 13 Jul 2023 08:46:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56980 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234491AbjGMMqw (ORCPT ); Thu, 13 Jul 2023 08:46:52 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A8BE2728; Thu, 13 Jul 2023 05:46:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252387; x=1720788387; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=w+Jctrt8GXsG54tgiviHTqhtp1nDe9dil2kNRqoIX1w=; b=mpd5/x3R5TOyIsGGcnQr+5z85Emv5ZiinOK3qdv8Fddj0Ruq/5vcQ59Q Vw0qD9OV3qpD2wF8zxNXmrcvBf0rz+Mx82YhJ2s31Fa0iA77vqTzu8ZXs zF/TgIaeVt7yNFz3OyKGyF0tKoVJljmKIrmS+s0Afd0BswScA9gnWb7rS BdHH179zRrv0MY6uj4H9qr7xzvj1r6RmxLCs8hZAtBsVnWzBJOwlWFKUJ gDJTEf7uq0ED7yZRMXzO9vZ4F0lQ9ypAphxQx/jPAogqUl8SxjrxwFPgg zf7snhga3UaTwTW+SHS6zMfP47aMkdFCb2ysID4WdcfczTUT4u2/eHA1h g==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367796991" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367796991" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144492" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144492" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:20 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Kalle Valo , Carl Huang , ath11k@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Simon Horman , stable@vger.kernel.org Subject: [PATCH v4 08/11] wifi: ath11k: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:45:02 +0300 Message-Id: <20230713124505.94866-9-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310260396942870 X-GMAIL-MSGID: 1771310260396942870 Don't assume that only the driver would be accessing LNKCTL. ASPM policy changes can trigger write to LNKCTL outside of driver's control. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. On restore, clear the ASPMC field properly. Fixes: e9603f4bdcc0 ("ath11k: pci: disable ASPM L0sLs before downloading firmware") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Reviewed-by: Simon Horman Acked-by: Kalle Valo Cc: stable@vger.kernel.org --- drivers/net/wireless/ath/ath11k/pci.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/pci.c b/drivers/net/wireless/ath/ath11k/pci.c index 79e2cbe82638..ec40adc1cb23 100644 --- a/drivers/net/wireless/ath/ath11k/pci.c +++ b/drivers/net/wireless/ath/ath11k/pci.c @@ -581,8 +581,8 @@ static void ath11k_pci_aspm_disable(struct ath11k_pci *ab_pci) u16_get_bits(ab_pci->link_ctl, PCI_EXP_LNKCTL_ASPM_L1)); /* disable L0s and L1 */ - pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL, - ab_pci->link_ctl & ~PCI_EXP_LNKCTL_ASPMC); + pcie_capability_clear_word(ab_pci->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_ASPMC); set_bit(ATH11K_PCI_ASPM_RESTORE, &ab_pci->flags); } @@ -590,8 +590,10 @@ static void ath11k_pci_aspm_disable(struct ath11k_pci *ab_pci) static void ath11k_pci_aspm_restore(struct ath11k_pci *ab_pci) { if (test_and_clear_bit(ATH11K_PCI_ASPM_RESTORE, &ab_pci->flags)) - pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL, - ab_pci->link_ctl); + pcie_capability_clear_and_set_word(ab_pci->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_ASPMC, + ab_pci->link_ctl & + PCI_EXP_LNKCTL_ASPMC); } static int ath11k_pci_power_up(struct ath11k_base *ab) From patchwork Thu Jul 13 12:45:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119853 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1803230vqm; Thu, 13 Jul 2023 05:58:18 -0700 (PDT) X-Google-Smtp-Source: APBJJlGrYBv6+l21d7gxJwrR+QEMjm4GSPSxwgMzNEP7hcbH2lESZCgSalitKm00o6HLPHwAT2Pv X-Received: by 2002:a92:c081:0:b0:347:6d5f:ab2f with SMTP id h1-20020a92c081000000b003476d5fab2fmr1330789ile.6.1689253098332; Thu, 13 Jul 2023 05:58:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253098; cv=none; d=google.com; s=arc-20160816; b=LkFsFCiKQhJZneNZcF3IME9HI3hw8FbfiAHVLk5mfdWG/GynR15lFsvxQ+k+z4krPL ibc6dZwrAs63t3kNSCcfPc90CsbHdlS4bdTqFpfw3lAf8/DYf8jtvKiqh/8NAFTx00+c a0Yw6Tz7d3s96xLGRNUpX6KrJCP20Q4ce1Jh4v69RQWycfFAgWTFK5WLfm05tmL7GK/b ss7/5Hpu0DX8KP49ZykgGAU0+mPmH33WONajdeqmViV9Jp5AjiNXJ3F1AIO30UVuNbBx KgR/pIiMS85a192D9vOiGkr3FKK7AmpiSc3iHC5FqkmbFEmcuQmf24Zii4RZJlQA10C2 rqNw== 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=lW7PIA/1ERcE7yWeiMQFz1BBfMmcjTwzAg+4/Lc4ZmI=; fh=VDhwdORh/se6T2Ii8LHWsCcFVVMQizQyNJjvct//B2s=; b=tDxaeKeuWLgjdXdFKY0NOksHhzWNLJe8G7mnmS6Rpg6O+FWnb1SI61v2tBmZ8HepSn gJS1BiRhYuRs+9BHfzieAqyibM2mscYtT/yds183J4IhaNYvpGoTeQebmn97W6ZbZok9 8Eam1vRqyFZugjvzNL8NXIQ9gFz2b1UwbOzRXlioy5Wm/Y1OPmcHlv//QJZXu18IOE4I CWXWFN8c1QtSOceI8esWWGWkaG0CuIDM+lz+15kTEoYRdClk448TTrpEY6DO6+RaDLHQ N5hD317UfFUwPdEWmFGDRJHlgCc+62JVpgCVl4pHow1EFL66jBL/hBQsnhZPw8mZ+U1w 26Ug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=gdhUFgxR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mp12-20020a17090b190c00b0025de453ee4csi5154185pjb.168.2023.07.13.05.58.06; Thu, 13 Jul 2023 05:58:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=gdhUFgxR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234772AbjGMMrZ (ORCPT + 99 others); Thu, 13 Jul 2023 08:47:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233745AbjGMMrW (ORCPT ); Thu, 13 Jul 2023 08:47:22 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1FE8B2D7D; Thu, 13 Jul 2023 05:46:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252410; x=1720788410; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=cyGe5BDTrg3RfJfvClt7NBXd+coMOb9txcFpO3hBJoM=; b=gdhUFgxR8KR8QBXQDMQ7t3eL+pr36AE9v57gozn5dp4wfO+qHhxxdrAx zJ2pv1yMogPQU0z17Xnxbc++oy/5gMzH4OCPKDS/CL1DI0Yl4If2lNV4T tuZNY/8apTghjqSMS/+rLYMt0NmWxrH7B1ILodYyM0QBJc8Sa0TJh/Y/5 JZCsD2gMKXSAx2dr9e/QfrlbjDvDoRfFj5grZWGgxWlVWXeg3R6uQ9AaD EcpTJum0aQnUWHLgR+tMouSCcDR8mkpAB+gCuXHKk15MHEzZGQwNaO6sm RUd30yoBG8n7l7ifzoERPY1/DUDBtOYZDJnKtkPBS9Nh/fwhmrhSWHPsU Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367797019" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367797019" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144505" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144505" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:28 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Kalle Valo , P Praneesh , Sriram R , Carl Huang , Bhagavathi Perumal S , ath12k@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Simon Horman , stable@vger.kernel.org Subject: [PATCH v4 09/11] wifi: ath12k: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:45:03 +0300 Message-Id: <20230713124505.94866-10-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310256512411958 X-GMAIL-MSGID: 1771310256512411958 Don't assume that only the driver would be accessing LNKCTL. ASPM policy changes can trigger write to LNKCTL outside of driver's control. Use RMW capability accessors which do proper locking to avoid losing concurrent updates to the register value. On restore, clear the ASPMC field properly. Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Reviewed-by: Simon Horman Acked-by: Kalle Valo Cc: stable@vger.kernel.org --- drivers/net/wireless/ath/ath12k/pci.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ath/ath12k/pci.c b/drivers/net/wireless/ath/ath12k/pci.c index 5990a55801f0..e4f08a066ca1 100644 --- a/drivers/net/wireless/ath/ath12k/pci.c +++ b/drivers/net/wireless/ath/ath12k/pci.c @@ -794,8 +794,8 @@ static void ath12k_pci_aspm_disable(struct ath12k_pci *ab_pci) u16_get_bits(ab_pci->link_ctl, PCI_EXP_LNKCTL_ASPM_L1)); /* disable L0s and L1 */ - pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL, - ab_pci->link_ctl & ~PCI_EXP_LNKCTL_ASPMC); + pcie_capability_clear_word(ab_pci->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_ASPMC); set_bit(ATH12K_PCI_ASPM_RESTORE, &ab_pci->flags); } @@ -803,8 +803,10 @@ static void ath12k_pci_aspm_disable(struct ath12k_pci *ab_pci) static void ath12k_pci_aspm_restore(struct ath12k_pci *ab_pci) { if (test_and_clear_bit(ATH12K_PCI_ASPM_RESTORE, &ab_pci->flags)) - pcie_capability_write_word(ab_pci->pdev, PCI_EXP_LNKCTL, - ab_pci->link_ctl); + pcie_capability_clear_and_set_word(ab_pci->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_ASPMC, + ab_pci->link_ctl & + PCI_EXP_LNKCTL_ASPMC); } static void ath12k_pci_kill_tasklets(struct ath12k_base *ab) From patchwork Thu Jul 13 12:45:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119847 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1799029vqm; Thu, 13 Jul 2023 05:49:26 -0700 (PDT) X-Google-Smtp-Source: APBJJlFmE7pcaU47SuvFhehgFaPNETmbsSisMGVrimCpp7J3Om12WS8sOC5tKWSWrxn3/OzmbvkE X-Received: by 2002:a17:90a:db98:b0:262:ec13:d3d with SMTP id h24-20020a17090adb9800b00262ec130d3dmr641654pjv.18.1689252566183; Thu, 13 Jul 2023 05:49:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689252566; cv=none; d=google.com; s=arc-20160816; b=RVdpOMvqJbhU0d/2QVdt2AIAK0i1xKNvK/IRP3kAmwcguV++W8tuh4L3LAAfkzLw/D l0zhqYdf+pkpWYV2Vrpgqq0c11VRoXllQwil16wksuwdquLL6OPlcwnwJn5w+xVDPAV7 BuWZNiGTOBM0DKzUIrkgcXK2kKbWE86UbaOyfuNlRuWfRpGW5jTmMg0tItjgvrnMpv+6 ynanYh03Sw0zg/HaOXsqzhooQ9WmoAEleIr/bYf71k2Y+Q75YGG8sCC/TfCnjb0/I/6a ipt9TD2eQGNWQiOx6IYPpbTmmyYgGqdTKpudjQNvYMOlCg1a98vh8zwqnR3V++wsdrSl Qnyw== 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=u+Pqo2oY8FzT9sKS7Qm9/zJUdGVGrBdrDqJHLHMbpys=; fh=xCZqH8MWDR0FEZ0T4+mvRSopzLHzxREz4cVRpRd6ff8=; b=GQ4Eed1YeaM1S6oQZgBTf21DdiIswUTABdwJeAzA3C7dD0MVr7WMH6M3bNkanFUWQ6 RBHhCr1/NmcGr2FrQktROskndqP67kaDqnwJsHAy/zPokUSVLMrBgXjG4H+LuMl6aUop UHcvJWS3r23oGvC7Ac2S1oFLvMVF9fDC92Uwg1KCFGzGxCoaku8q7y3OwS9p5Ih4kLTW oaKDx2BjHtv5e2eRFc6YrdalwVS1OOFVI3LT3s5FzvzJOfLR/N+jV1XhKZ66ZhaN8PRz sWTqx6qZFUSugG7RlsATCLlL9kZqr0gs7VZklhTgJOdkC97FsIdGIdBR92fwkd2OvvAn F47w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=aFeG0ZyW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gc21-20020a17090b311500b0023a177c4951si5224798pjb.39.2023.07.13.05.49.13; Thu, 13 Jul 2023 05:49:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=aFeG0ZyW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234443AbjGMMr3 (ORCPT + 99 others); Thu, 13 Jul 2023 08:47:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233952AbjGMMrX (ORCPT ); Thu, 13 Jul 2023 08:47:23 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D9C3C30C0; Thu, 13 Jul 2023 05:46:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252410; x=1720788410; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AAJmAZ+sXj0MECM7XPTmd1pa5VhGBIS57bxBnXZUE7M=; b=aFeG0ZyWf1uzHA6KpqrodpF8tvGnLpuj82RD5IUKBQp7nFbyexIyDpa2 qfTRh9BmLyhjJ3W4b1Pm6LDZhzh0uS7JJZZ11d/7mvcuv8DxBvH8djpv1 f2fL+ljJgGpiozABoGcDaFZxYz8dppZr4VEfNmuie39bojowHgyYM1AMI inQOxdHaXtwzOeZul9pmhG8SfI3rWj3XOMbYNwRFCFwJxCmJ+YYPiwzVH 91tuPLv/83D0xn1fpuvpQjjF42NDl78ZqWNi7BQsK3KKMua+3cP7nNnqD 93jqqzY2olgf7+oynU/UXmX+N/1odhd/h1awmvs+2eExJF42E+gCXylH4 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367797041" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367797041" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144512" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144512" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:35 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Kalle Valo , Michal Kazior , Janusz Dziedzic , ath10k@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Simon Horman , stable@vger.kernel.org Subject: [PATCH v4 10/11] wifi: ath10k: Use RMW accessors for changing LNKCTL Date: Thu, 13 Jul 2023 15:45:04 +0300 Message-Id: <20230713124505.94866-11-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771309699003178131 X-GMAIL-MSGID: 1771309699003178131 Don't assume that only the driver would be accessing LNKCTL. ASPM policy changes can trigger write to LNKCTL outside of driver's control. Use RMW capability accessors which does proper locking to avoid losing concurrent updates to the register value. On restore, clear the ASPMC field properly. Fixes: 76d870ed09ab ("ath10k: enable ASPM") Suggested-by: Lukas Wunner Signed-off-by: Ilpo Järvinen Reviewed-by: Simon Horman Acked-by: Kalle Valo Cc: stable@vger.kernel.org --- drivers/net/wireless/ath/ath10k/pci.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index a7f44f6335fb..9275a672f90c 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -1963,8 +1963,9 @@ static int ath10k_pci_hif_start(struct ath10k *ar) ath10k_pci_irq_enable(ar); ath10k_pci_rx_post(ar); - pcie_capability_write_word(ar_pci->pdev, PCI_EXP_LNKCTL, - ar_pci->link_ctl); + pcie_capability_clear_and_set_word(ar_pci->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_ASPMC, + ar_pci->link_ctl & PCI_EXP_LNKCTL_ASPMC); return 0; } @@ -2821,8 +2822,8 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar, pcie_capability_read_word(ar_pci->pdev, PCI_EXP_LNKCTL, &ar_pci->link_ctl); - pcie_capability_write_word(ar_pci->pdev, PCI_EXP_LNKCTL, - ar_pci->link_ctl & ~PCI_EXP_LNKCTL_ASPMC); + pcie_capability_clear_word(ar_pci->pdev, PCI_EXP_LNKCTL, + PCI_EXP_LNKCTL_ASPMC); /* * Bring the target up cleanly. From patchwork Thu Jul 13 12:45:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ilpo_J=C3=A4rvinen?= X-Patchwork-Id: 119861 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1805871vqm; Thu, 13 Jul 2023 06:02:02 -0700 (PDT) X-Google-Smtp-Source: APBJJlGpI8rkB/qEp5tIyIbVuuF6kP29F56WFcNKSQ4XJKCvyfqHSC4PGERPbsqrkZQVgFoq58fg X-Received: by 2002:a17:903:247:b0:1b6:9cb9:bb55 with SMTP id j7-20020a170903024700b001b69cb9bb55mr1250429plh.42.1689253321042; Thu, 13 Jul 2023 06:02:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689253321; cv=none; d=google.com; s=arc-20160816; b=IT17DpTXoQ5Kwfdh47Ag9wFoLzJdopb0Ddj/aC6U7BAZJ8efZZrP8aQRR6yikemRDL smscyscJMU8QCtL9zS9aVfPDqDPx1aonpfAGYK4tau440S72vqKq0BEDDosmMFBpCHzM KUDX5p4mfWR6Pj04ttaJf34BuNVSJ8PC3/by7HM1fivftoYRJpf0/XrdHfn7Fnvmj38x EOWHsB2gYuN8qFs4oPtwgxtMRrIc5Ths/NUQ/IITIulIf1LZXuLKtxldY4NHRKSK9ep9 1/FaRh7IehJaMWhPJDCY9xb1Exwan4B5/SmnuFFbywx87wQutPO0c8/O+YsI4b7C6CwM OnYQ== 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=egxuTEmhZPXosA43WyyqLqcB74HopWBUN/Wym6ZGhXg=; fh=NAw+zvpUuhus+YT3yuxsw5mY5tV8HSLSFOORTcw9rEw=; b=Y5ayVccl9WPpoCOd/kb95uqSYIXxL5SkQg5xOyVI6j2Rg8dysO0j4Hewhe1RJbP9T8 HAO0i3ojLPqaZP5eyOkxH4MOEGxgKym41Qtr9ryC5CQuJFCeYGs8hMxu6dcYAhkDfl51 9AnTFjtwAeFfpZ+ixK8jYY+17dqq7W6CsmgmIA+8XplzvvXZnbrtDzOhYkneBBWI9Fk8 ZO2N/d3xiZ8NPyu+gs3t1aRy2Vr2mmZMcF2pKNITjp1g0embXAA7nrPpKQLlx41DCpR/ Dubv8jPs3Qes/AuTXKnr8V0wj9/L49n9dktPgZ4WnHcqrWuARn5ZZaBKYK2CSj62s2yr 6x3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=aALYlDWc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b5-20020a170902650500b001b9dda4e1e7si5084777plk.154.2023.07.13.06.01.46; Thu, 13 Jul 2023 06:02:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=aALYlDWc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233242AbjGMMrg (ORCPT + 99 others); Thu, 13 Jul 2023 08:47:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234623AbjGMMrZ (ORCPT ); Thu, 13 Jul 2023 08:47:25 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B50362710; Thu, 13 Jul 2023 05:46:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689252412; x=1720788412; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WP9jbrwJlCzDhGsE/E1k9YoxHP6CB4ER/l8Uze8ZUhU=; b=aALYlDWc4583zGyteM5LYH2S3TGYDsFzhoie+tOVU3WyeEGIQy/ZI9st 8ruLr21fguAQ5KfPFn1oyyUQzbzvXnFEYRaTs7rE1ZODledMV0liQgXGY 1YRlgrK+80DYdkbv6oYr8v0/6VuIcUU2Ohk5xl25RoOdMVnOPUghQiJVJ p34kaMMbWRpLd+OJvaeNuP2Yz6GXyzmiTFdW846+H/U3w6lda/Oa5hICh H6O8DGPdU4/V2OT42LYE7ODvnM0bsS9sWwPU50CINKsnz39Uv8fc2yt9S E/zIi2njwA8ndlgBctDEQM1csHgYjV4ehDEHJY0d5SvLlO8L1Y66Y6g8J Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="367797061" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="367797061" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10770"; a="757144524" X-IronPort-AV: E=Sophos;i="6.01,202,1684825200"; d="scan'208";a="757144524" Received: from ijarvine-mobl2.ger.corp.intel.com ([10.251.222.39]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2023 05:46:42 -0700 From: =?utf-8?q?Ilpo_J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Lorenzo Pieralisi , Rob Herring , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Emmanuel Grumbach , "Rafael J . Wysocki" , Heiner Kallweit , Lukas Wunner , Jonathan Corbet , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Dean Luick , Andy Shevchenko , =?utf-8?q?Jonas_Dre?= =?utf-8?q?=C3=9Fler?= , =?utf-8?q?Ilpo_J=C3=A4rvinen?= Subject: [PATCH v4 11/11] PCI: Document the Capability accessor RMW improvements Date: Thu, 13 Jul 2023 15:45:05 +0300 Message-Id: <20230713124505.94866-12-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> References: <20230713124505.94866-1-ilpo.jarvinen@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771310490405489420 X-GMAIL-MSGID: 1771310490405489420 Documentation claims port service drivers should play nice wrt. PCIe Capability changes but the concurrency control is now provided in the Capability accessors as long as the correct ones are used. Update the documention to match the RMW accessor behavior. Signed-off-by: Ilpo Järvinen --- Documentation/PCI/pciebus-howto.rst | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Documentation/PCI/pciebus-howto.rst b/Documentation/PCI/pciebus-howto.rst index f882ff62c51f..a0027e8fb0d0 100644 --- a/Documentation/PCI/pciebus-howto.rst +++ b/Documentation/PCI/pciebus-howto.rst @@ -213,8 +213,12 @@ PCI Config Registers -------------------- Each service driver runs its PCI config operations on its own -capability structure except the PCI Express capability structure, in -which Root Control register and Device Control register are shared -between PME and AER. This patch assumes that all service drivers -will be well behaved and not overwrite other service driver's -configuration settings. +capability structure except the PCI Express capability structure, +that is shared between many drivers including the service drivers. +RMW Capability accessors (pcie_capability_clear_and_set_word(), +pcie_capability_set_word(), and pcie_capability_clear_word()) protect +a selected set of PCI Express Capability Registers (Link Control +Register and Root Control Register). Any change to those registers +should be performed using RMW accessors to avoid problems due to +concurrent updates. For the up-to-date list of protected registers, +see pcie_capability_clear_and_set_word().