Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp1874769pxb; Sun, 18 Apr 2021 09:46:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzrC7NAu9imb7Y8/LWY7xcqOLDt0lwTrAx0jK7vxliIE7DXtY0ziY+f6lL8edAvGEhX0q0y X-Received: by 2002:a17:902:db11:b029:ec:3c25:d53a with SMTP id m17-20020a170902db11b02900ec3c25d53amr14599396plx.74.1618764396793; Sun, 18 Apr 2021 09:46:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618764396; cv=none; d=google.com; s=arc-20160816; b=aqhui38e3EaAJJgRIIfwy7Hz/I/+e/fHUvn6Xg4rBWIaKAcQ0pASFRzlsIsnOTX+YB 65N3UVt7mE1FAqwn5DXh9MDWRTixBRy3D+qWY9nAYor1HA5VbQWcmhQ75J6lR4d4vGkN T1Du52ot8LaHVwWlR0hRugWxrbLYFk24mxQ4ON4pUYaCCk5g9uVPbCyTgEZRj2CrOML0 NZyxXQcZPrjiqUdJ5/bxmMxW65OLIXhMbvgwuz2HIXgQy75IZ6mmz6higzirid4Y3QTx Nji5Bd48Z/DxcAAC5/16VJ76am4oLx0pG4tOullWoVDGV4cOkn+q4Refqx/VUwk/DpRU OB0Q== 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=QH9rQRK2/kYWmHcqI6ahh8NdPiM5jKWMgigX87qZupo=; b=c8bL/xMsqSS42+HiKvwGCLh3AH1Qi2qZ9TzHYp2Epla7UQGWSg6t82khPqJFP9WmaT MPBfC564Nvi2VFAhf441DP3XwCXhhnchwGIQwYetSJAku0cDFKLeIB5BIBtnmiffh6PK ppJEMRUvcsdQZLoAef+iNodDztEHOUeyEqTfpvlfs0VzpcG2Hr+28yyI5jt0ZkytzS2f 3ZXastAXiGWzPBeRKYdefG3nF8dnsZe9aVGWhW3kGeNhU7Zgg32I6Pp1SjRZxGm+FjDp QkgK2W7shBfVkbfBzTSTesvjWrTPfQNDCh4FbKifT7qUzO0pGMdIvmocQBrkiJRrAzEL fxpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=AjHu0FCS; 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 mh18si12512780pjb.55.2021.04.18.09.46.24; Sun, 18 Apr 2021 09:46:36 -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=AjHu0FCS; 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 S229783AbhDRQqf (ORCPT + 99 others); Sun, 18 Apr 2021 12:46:35 -0400 Received: from mail.kernel.org ([198.145.29.99]:49800 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232095AbhDRQqe (ORCPT ); Sun, 18 Apr 2021 12:46:34 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9EFF76101E; Sun, 18 Apr 2021 16:46:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618764366; bh=+nlxpZTvYyG9QYGOyai7tZy+TZ7WYjEbAS1b1F1OKXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AjHu0FCSE70eUSN7TPF06XNJDgTEDTcj2cqXS9883og53P/IDL2A2QpGopHD5h39H VJmNifRjJ2vo36WXRsr8LA7jHFKp6jQigXYAzjdXe+DXJTe0cJSnJbDSq3/dyjWPtR rpD8WNy+ST6qkeiv+qeetXcXyVcCUhAgK1brOCd6IN+kkZomVU1uQ4Zsr6XC/u8/5B TEoeVQCDTA6uJ5ftwPlpwdEV3c/1RxLrNOItUwyeroArEFa7ouLTxDMgu+1H6h42Jx WbJac21qzVl5gCAkis9oNu1Y64lHKAJ+6GDKp668KIUVGuDUa0lhbNp0ByjJgpMkHE /dHDgjPmIP0bA== From: Lorenzo Bianconi To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, sean.wang@mediatek.com Subject: [PATCH 08/19] mt76: mt7663: rely on mt76_connac_pm_ref/mt76_connac_pm_unref in tx/rx napi Date: Sun, 18 Apr 2021 18:45:34 +0200 Message-Id: <3bc75d18c09275187c2595da9f033efd7abca019.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 Introduce mt7615_poll_rx rx napi callback for mt7663. Do not access device registers in tx/rx napi if the device is not awake. Signed-off-by: Lorenzo Bianconi --- .../net/wireless/mediatek/mt76/mt7615/dma.c | 30 +++++++++++++++++-- .../net/wireless/mediatek/mt76/mt7615/mac.c | 10 +++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c index d658555f5965..8004ae5c16a9 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c @@ -71,15 +71,39 @@ static int mt7615_poll_tx(struct napi_struct *napi, int budget) struct mt7615_dev *dev; dev = container_of(napi, struct mt7615_dev, mt76.tx_napi); + if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) { + napi_complete(napi); + queue_work(dev->mt76.wq, &dev->pm.wake_work); + return 0; + } mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false); - - if (napi_complete_done(napi, 0)) + if (napi_complete(napi)) mt7615_irq_enable(dev, mt7615_tx_mcu_int_mask(dev)); + mt76_connac_pm_unref(&dev->pm); + return 0; } +static int mt7615_poll_rx(struct napi_struct *napi, int budget) +{ + struct mt7615_dev *dev; + int done; + + dev = container_of(napi->dev, struct mt7615_dev, mt76.napi_dev); + + if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) { + napi_complete(napi); + queue_work(dev->mt76.wq, &dev->pm.wake_work); + return 0; + } + done = mt76_dma_rx_poll(napi, budget); + mt76_connac_pm_unref(&dev->pm); + + return done; +} + int mt7615_wait_pdma_busy(struct mt7615_dev *dev) { struct mt76_dev *mdev = &dev->mt76; @@ -261,7 +285,7 @@ int mt7615_dma_init(struct mt7615_dev *dev) mt76_wr(dev, MT_DELAY_INT_CFG, 0); - ret = mt76_init_queues(dev, mt76_dma_rx_poll); + ret = mt76_init_queues(dev, mt7615_poll_rx); if (ret < 0) return ret; diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c index 0b386030dbd8..e81c7d322811 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c @@ -1913,10 +1913,14 @@ void mt7615_pm_wake_work(struct work_struct *work) pm.wake_work); mphy = dev->phy.mt76; - if (!mt7615_mcu_set_drv_ctrl(dev)) + if (!mt7615_mcu_set_drv_ctrl(dev)) { + int i; + + mt76_for_each_q_rx(&dev->mt76, i) + napi_schedule(&dev->mt76.napi[i]); mt76_connac_pm_dequeue_skbs(mphy, &dev->pm); - else - dev_err(mphy->dev->dev, "failed to wake device\n"); + mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false); + } ieee80211_wake_queues(mphy->hw); complete_all(&dev->pm.wake_cmpl); -- 2.30.2