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)