From a30aebc985e4a7ff7349a2a73fc6936de0845377 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 28 Feb 2016 16:23:36 +0100 Subject: [PATCH] mt7603: reset MAC on MCU errors Signed-off-by: Felix Fietkau --- mt7603.h | 1 + mt7603_mac.c | 5 +++-- mt7603_mcu.c | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mt7603.h b/mt7603.h index 3d898d00..d61e0abf 100644 --- a/mt7603.h +++ b/mt7603.h @@ -34,6 +34,7 @@ #define MT7603_PRE_TBTT_TIME 5000 /* ms */ #define MT7603_WATCHDOG_TIME 1000 /* ms */ +#define MT7603_WATCHDOG_TIMEOUT 10 /* number of checks */ enum { MT7603_REV_E1 = 0x00, diff --git a/mt7603_mac.c b/mt7603_mac.c index 9ce328f2..a6dcf388 100644 --- a/mt7603_mac.c +++ b/mt7603_mac.c @@ -1021,10 +1021,11 @@ void mt7603_mac_work(struct work_struct *work) mutex_lock(&dev->mutex); - if (mt7603_tx_dma_busy(dev)) { + if (mt7603_tx_dma_busy(dev) || + dev->tx_check >= MT7603_WATCHDOG_TIMEOUT) { time = MT7603_WATCHDOG_TIME / 10; - if (WARN_ON_ONCE(++dev->tx_check == 10)) { + if (WARN_ON_ONCE(++dev->tx_check >= MT7603_WATCHDOG_TIMEOUT)) { mt7603_mac_reset(dev); goto out; } diff --git a/mt7603_mcu.c b/mt7603_mcu.c index b4ee86de..f2b8529d 100644 --- a/mt7603_mcu.c +++ b/mt7603_mcu.c @@ -112,6 +112,7 @@ mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, int cmd, int qu skb = mt7603_mcu_get_response(dev, expires); if (!skb) { printk("MCU message %d (seq %d) timed out\n", cmd, seq); + dev->tx_check = MT7603_WATCHDOG_TIMEOUT; ret = -ETIMEDOUT; break; }