From patchwork Fri Nov 25 11:13:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony Romano X-Patchwork-Id: 9447371 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 4B74A60235 for ; Fri, 25 Nov 2016 11:11:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3059927D13 for ; Fri, 25 Nov 2016 11:11:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 24CD72807E; Fri, 25 Nov 2016 11:11:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D09D627FB6 for ; Fri, 25 Nov 2016 11:11:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751497AbcKYLLL (ORCPT ); Fri, 25 Nov 2016 06:11:11 -0500 Received: from mail-pg0-f51.google.com ([74.125.83.51]:35818 "EHLO mail-pg0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750916AbcKYLLJ (ORCPT ); Fri, 25 Nov 2016 06:11:09 -0500 Received: by mail-pg0-f51.google.com with SMTP id p66so29018324pga.2 for ; Fri, 25 Nov 2016 03:11:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=coreos.com; s=google; h=from:to:cc:subject:date:message-id; bh=vh1u0K+/OvvTyvp1UHBLqd717XAIwh77n8VjOGLZEGk=; b=HPIgUiKwAXtGdOUmAyKY5w7zmoZLsrg1Z9OosbQpWHnnpx08ffh4sNQx4lw7QDgDBV YgZIWHHtKJ7jDUy18U1EdurPdP5esMhqid/prL78O0m3DdFU8asezc6L2r4nmBG5jJqq GTinV1x5g3wnzcYgTvHxnY8pwLcMb2n7AeqJ8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=vh1u0K+/OvvTyvp1UHBLqd717XAIwh77n8VjOGLZEGk=; b=G64TpK955ymyL9evvoJtiY9bIBJBIhAB3i1+ElvmJS6zjzFBrL8E73DBNUw5jDd+p1 WYneW3G4Im1jXYTV3fvLhFY64AKVKMg7SDNMDLZV5LYJJxX0CL04AZ3FulGke3BUZZ/e kj4A6ALvg3P54qszzHuzRC0xiytKckGhujJbHOFLs/alPr4VVjOESmFVggZIBhJA0ewi Y1/o8kpwGsuA5DZvyD2nMlAiLcRGyuEnZ8S45B8llKlI2qh3WchyjOMMiqyJ3Ugb40Oz obw7Z0yeUu1Y/zYjnVPc91AM2Es/Vo52qwXeS8jpFKKAP4E6EtsaL1dWfsVV/Dm9k5gK bO0w== X-Gm-Message-State: AKaTC038cSwnekBPJd03R989kq9JfrQxSyDXelaC48gf/pOvFUVv9PSXFYbuhK7+47sxfzOa X-Received: by 10.99.133.200 with SMTP id u191mr13117894pgd.28.1480072268138; Fri, 25 Nov 2016 03:11:08 -0800 (PST) Received: from bingularity.hsd1.ca.comcast.net. ([2001:558:6045:af:fd26:4872:ff0b:d22d]) by smtp.gmail.com with ESMTPSA id i76sm67062458pfk.89.2016.11.25.03.11.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 25 Nov 2016 03:11:07 -0800 (PST) From: Anthony Romano To: linux-wireless@vger.kernel.org Cc: kubakici@wp.pl Subject: [PATCH] mt7601u: wait for clear rxq when stopping mac Date: Fri, 25 Nov 2016 03:13:34 -0800 Message-Id: <20161125111334.31085-1-anthony.romano@coreos.com> X-Mailer: git-send-email 2.11.0.rc2 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP mt7601u_mac_stop_hw should stop polling the rxq once it remains empty but instead continues polling after the rxq status stays clear; bringing down the interface takes about six seconds from this alone. Speed up path by exiting rxq loop once status repeatedly polls empty. Signed-off-by: Anthony Romano Reviewed-by: Jakub Kicinski --- drivers/net/wireless/mediatek/mt7601u/init.c | 14 +++++++------- drivers/net/wireless/mediatek/mt7601u/regs.h | 3 +++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt7601u/init.c b/drivers/net/wireless/mediatek/mt7601u/init.c index 44d46e25db80..a6e901766226 100644 --- a/drivers/net/wireless/mediatek/mt7601u/init.c +++ b/drivers/net/wireless/mediatek/mt7601u/init.c @@ -293,13 +293,13 @@ static void mt7601u_mac_stop_hw(struct mt7601u_dev *dev) ok = 0; i = 200; while (i--) { - if ((mt76_rr(dev, 0x0430) & 0x00ff0000) || - (mt76_rr(dev, 0x0a30) & 0xffffffff) || - (mt76_rr(dev, 0x0a34) & 0xffffffff)) - ok++; - if (ok > 6) - break; - + if (!(mt76_rr(dev, MT_RXQ_STA) & 0x00ff0000) && + !mt76_rr(dev, 0x0a30) && + !mt76_rr(dev, 0x0a34)) { + if (ok++ > 5) + break; + continue; + } msleep(1); } diff --git a/drivers/net/wireless/mediatek/mt7601u/regs.h b/drivers/net/wireless/mediatek/mt7601u/regs.h index 27a429d90cec..2a8837002f00 100644 --- a/drivers/net/wireless/mediatek/mt7601u/regs.h +++ b/drivers/net/wireless/mediatek/mt7601u/regs.h @@ -192,6 +192,9 @@ #define MT_BCN_OFFSET_BASE 0x041c #define MT_BCN_OFFSET(_n) (MT_BCN_OFFSET_BASE + ((_n) << 2)) +#define MT_RXQ_STA 0x0430 +#define MT_TXQ_STA 0x0434 + #define MT_RF_CSR_CFG 0x0500 #define MT_RF_CSR_CFG_DATA GENMASK(7, 0) #define MT_RF_CSR_CFG_REG_ID GENMASK(13, 8)