mt76: introduce mcu_reset function pointer in mt76_mcu_ops structure
authorLorenzo Bianconi <lorenzo@kernel.org>
Sun, 7 Mar 2021 18:20:46 +0000 (19:20 +0100)
committerFelix Fietkau <nbd@nbd.name>
Sun, 11 Apr 2021 22:01:25 +0000 (00:01 +0200)
Introduce mcu_reset function pointer in mt76_mcu_ops structure in order
to run hw related reset function for the mcu running on the chipset.
This is a preliminary patch to introduce chip reset for mt7921 devices.

Co-developed-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mcu.c
drivers/net/wireless/mediatek/mt76/mt76.h

index d3a5e2c4f12a3d2728a2aa935b65c6c058ed3e06..70624cd074493afd061cfb1b47b8c8a9d184c9b2 100644 (file)
@@ -99,6 +99,10 @@ int mt76_mcu_skb_send_and_get_msg(struct mt76_dev *dev, struct sk_buff *skb,
                        dev_kfree_skb(skb);
        } while (ret == -EAGAIN);
 
+       /* notify driver code to reset the mcu */
+       if (ret == -ETIMEDOUT && dev->mcu_ops->mcu_reset)
+               dev->mcu_ops->mcu_reset(dev);
+
 out:
        mutex_unlock(&dev->mcu.mutex);
 
index 4d71ca228de2d26fbcc81570dc0acac61b2acac8..4945b0430380acea9d95a211b3e5409816ab90d9 100644 (file)
@@ -166,6 +166,7 @@ struct mt76_mcu_ops {
        int (*mcu_rd_rp)(struct mt76_dev *dev, u32 base,
                         struct mt76_reg_pair *rp, int len);
        int (*mcu_restart)(struct mt76_dev *dev);
+       void (*mcu_reset)(struct mt76_dev *dev);
 };
 
 struct mt76_queue_ops {