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 <[email protected]>
---
 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)
-- 
2.11.0.rc2

Reply via email to