Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp1874829pxb; Sun, 18 Apr 2021 09:46:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyjvEVWtopz0BLWCO3K5nOQBZmmrheQPOMBVY5xX+7gSx7oPFmTzb6ZQcxpO5uQBlMxWdNF X-Received: by 2002:a17:90a:a58f:: with SMTP id b15mr19735423pjq.135.1618764403043; Sun, 18 Apr 2021 09:46:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618764403; cv=none; d=google.com; s=arc-20160816; b=0E7VxK7GO+uTnpau5ONvf2eo0W/7LxeR0vP+QtpDYnRDrYEhlm1XKwMihueuQ1V+Ao XM43KFf9dB3PQ209m9RV+GYD1daxVuZgxbwlOIvZTMIUya4MkFeuO8XdIzHO6YkpJumU FYvtHsbrZrkp+FzkQKQroU/piLev9sj5Oe88Kc/Pp8dCVkm2yw7O+zS+setmbRwPOvVh uYrSPlZena+y4JZaePJV9C9mx87piBz5fBSqiGCD9qqjLoYxdN1uAm3B490t6/XGT3PS SIsnnfB/+uJRbrBIllxiHcfwpyahxgNEHvkJanws4QtqD2NCs9/CbiFBDK2I/ZsiXQmv 1Ekw== 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=QuDW5Bp2qFwPqFyOUvpomcoL2locStioB3cu7EZWnww=; b=b0Bnz4iFzGDuMgXAYjYfHdtv6Y1OnhT3sri0xeB2M1oRTxpBYlg5FglPu4YVg/ORY1 N0e29pvtAk/DKXQSTht3fPYy0yei8b7Srl6UOXDQF5cLZGeIQmsZmjZNr+M0ASXKYLgX tDDFiv3zCOf6hj435FKWekjPFdBJmz4l6HJESJpt/BYtG8KRWTDotCowyz2NjhG2BuhC QJVF+cUVCaSl7EgkEfbyfLJruAhKHh+i6RYrdlcLbJIb/DkAOmu/IY+ZUcc1X3R9KvV7 4NnpMWldIj5+uIQ9g4OZcNOC9q5+2LLRuiPcNAG/67r0MBwNMM7pthJIv8MW30TvlvqE yHXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=RfB2snVL; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gp19si10080770pjb.48.2021.04.18.09.46.30; Sun, 18 Apr 2021 09:46:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=RfB2snVL; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232179AbhDRQqh (ORCPT + 99 others); Sun, 18 Apr 2021 12:46:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:49822 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232095AbhDRQqh (ORCPT ); Sun, 18 Apr 2021 12:46:37 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4577961359; Sun, 18 Apr 2021 16:46:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618764369; bh=QW/N+KulcNzOg7fnGEiWu0qI3VA43sk7aMpeDzAyo3s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RfB2snVLm6+LAHBQaIvRXq7unHKlIqMIgXYbZs5IHbxV6Pz3JHPliHtfeakmdzImD IdlieLU0AcnO47/6CWuBJZ0anzOJTAqP8bYWAQkWnvrwEH5V0VGtxW3dQUas0b1b+N dMcP631pBeJfh1rUhr40GZPdW6veMbZPfD7fpuuDcbyoS4+Aqm42SMhVd7KpBeaUwV z7K47iyo/NR4pl7Euccb6SS98uVETiguJWhvKjZgV47gg7zXT0R0LkrXEhKVCiLSZS GmHP5x94JkooOJRAEyWfXkCeror2IpCkrE4qYk3nAnILWUrUup6GoZga9ADBoDrPFp HYtIn0IcMDa8g== From: Lorenzo Bianconi To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, sean.wang@mediatek.com Subject: [PATCH 10/19] mt76: connac: check wake refcount in mcu_fw_pmctrl Date: Sun, 18 Apr 2021 18:45:36 +0200 Message-Id: <79586a8114bf0831b78181a41fbf2994c4010da2.1618763001.git.lorenzo@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org In order to avoid synchronization races between tx and rx path, rely on mt76_connac_skip_fw_pmctrl putting the chip in sleep mode for mt7921 and mt7663 devices Signed-off-by: Lorenzo Bianconi --- drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 2 +- drivers/net/wireless/mediatek/mt76/mt76_connac.h | 12 ++++++++++++ drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c index 5890fee98d97..45c6fb5832b8 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c @@ -358,7 +358,7 @@ static int mt7615_mcu_fw_pmctrl(struct mt7615_dev *dev) mutex_lock(&dev->pm.mutex); - if (test_and_set_bit(MT76_STATE_PM, &mphy->state)) + if (mt76_connac_skip_fw_pmctrl(mphy, &dev->pm)) goto out; mt7622_trigger_hif_int(dev, true); diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h index 85846eab8d7d..116d800c9f9d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h @@ -116,6 +116,18 @@ mt76_connac_pm_unref(struct mt76_connac_pm *pm) spin_unlock_bh(&pm->wake.lock); } +static inline bool +mt76_connac_skip_fw_pmctrl(struct mt76_phy *phy, struct mt76_connac_pm *pm) +{ + bool ret; + + spin_lock_bh(&pm->wake.lock); + ret = pm->wake.count || test_and_set_bit(MT76_STATE_PM, &phy->state); + spin_unlock_bh(&pm->wake.lock); + + return ret; +} + static inline void mt76_connac_mutex_acquire(struct mt76_dev *dev, struct mt76_connac_pm *pm) __acquires(&dev->mutex) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c index 44f02cbf9cc7..1204f5d324f8 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c @@ -1304,7 +1304,7 @@ int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev) mutex_lock(&dev->pm.mutex); - if (test_and_set_bit(MT76_STATE_PM, &mphy->state)) + if (mt76_connac_skip_fw_pmctrl(mphy, &dev->pm)) goto out; for (i = 0; i < MT7921_DRV_OWN_RETRY_COUNT; i++) { -- 2.30.2