From 294e095a486e35a033c59ce8f68faa366449a287 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 9 Dec 2018 17:18:10 +0100 Subject: [PATCH] mt7603: reset DMA scheduler on MT7628 Should improve stability Signed-off-by: Felix Fietkau --- mt7603/mac.c | 11 +++++++++++ mt7603/regs.h | 1 + 2 files changed, 12 insertions(+) diff --git a/mt7603/mac.c b/mt7603/mac.c index e7e27c95..0812d3db 100644 --- a/mt7603/mac.c +++ b/mt7603/mac.c @@ -1282,6 +1282,15 @@ static void mt7603_pse_client_reset(struct mt7603_dev *dev) MT_CLIENT_RESET_TX_R_E_2); } +static void mt7603_dma_sched_reset(struct mt7603_dev *dev) +{ + if (!is_mt7628(dev)) + return; + + mt76_set(dev, MT_SCH_4, MT_SCH_4_RESET); + mt76_clear(dev, MT_SCH_4, MT_SCH_4_RESET); +} + static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev) { int beacon_int = dev->beacon_int; @@ -1330,6 +1339,8 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev) for (i = 0; i < ARRAY_SIZE(dev->mt76.q_rx); i++) mt76_queue_rx_reset(dev, i); + mt7603_dma_sched_reset(dev); + mt7603_mac_dma_start(dev); mt7603_irq_enable(dev, mask); diff --git a/mt7603/regs.h b/mt7603/regs.h index 3145c997..9439ace0 100644 --- a/mt7603/regs.h +++ b/mt7603/regs.h @@ -88,6 +88,7 @@ #define MT_SCH_4 MT_HIF(0x594) #define MT_SCH_4_FORCE_QID GENMASK(4, 0) #define MT_SCH_4_BYPASS BIT(5) +#define MT_SCH_4_RESET BIT(8) #define MT_GROUP_THRESH_BASE MT_HIF(0x598) #define MT_GROUP_THRESH(n) (MT_GROUP_THRESH_BASE + ((n) * 4))