mediatek: 6.6: refresh patches
[openwrt/staging/stintel.git] / target / linux / mediatek / patches-6.6 / 963-net-ethernet-mtk_eth_soc-fix-WED-wifi-reset.patch
1 From: Felix Fietkau <nbd@nbd.name>
2 Date: Thu, 18 Jan 2024 12:51:32 +0100
3 Subject: [PATCH] net: ethernet: mtk_eth_soc: fix WED + wifi reset
4
5 The WLAN + WED reset sequence relies on being able to receive interrupts from
6 the card, in order to synchronize individual steps with the firmware.
7 When WED is stopped, leave interrupts running and rely on the driver turning
8 off unwanted ones.
9 WED DMA also needs to be disabled before resetting.
10
11 Fixes: f78cd9c783e0 ("net: ethernet: mtk_wed: update mtk_wed_stop")
12 Signed-off-by: Felix Fietkau <nbd@nbd.name>
13 ---
14
15 --- a/drivers/net/ethernet/mediatek/mtk_wed.c
16 +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
17 @@ -1072,13 +1072,13 @@ mtk_wed_dma_disable(struct mtk_wed_devic
18 static void
19 mtk_wed_stop(struct mtk_wed_device *dev)
20 {
21 + mtk_wed_dma_disable(dev);
22 mtk_wed_set_ext_int(dev, false);
23
24 wed_w32(dev, MTK_WED_WPDMA_INT_TRIGGER, 0);
25 wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER, 0);
26 wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
27 wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
28 - wed_w32(dev, MTK_WED_WPDMA_INT_MASK, 0);
29
30 if (!mtk_wed_get_rx_capa(dev))
31 return;
32 @@ -1091,7 +1091,6 @@ static void
33 mtk_wed_deinit(struct mtk_wed_device *dev)
34 {
35 mtk_wed_stop(dev);
36 - mtk_wed_dma_disable(dev);
37
38 wed_clr(dev, MTK_WED_CTRL,
39 MTK_WED_CTRL_WDMA_INT_AGENT_EN |
40 @@ -2622,9 +2621,6 @@ mtk_wed_irq_get(struct mtk_wed_device *d
41 static void
42 mtk_wed_irq_set_mask(struct mtk_wed_device *dev, u32 mask)
43 {
44 - if (!dev->running)
45 - return;
46 -
47 mtk_wed_set_ext_int(dev, !!mask);
48 wed_w32(dev, MTK_WED_INT_MASK, mask);
49 }