mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
50 lines
1.5 KiB
Diff
50 lines
1.5 KiB
Diff
|
From: Felix Fietkau <nbd@nbd.name>
|
||
|
Date: Thu, 18 Jan 2024 12:51:32 +0100
|
||
|
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix WED + wifi reset
|
||
|
|
||
|
The WLAN + WED reset sequence relies on being able to receive interrupts from
|
||
|
the card, in order to synchronize individual steps with the firmware.
|
||
|
When WED is stopped, leave interrupts running and rely on the driver turning
|
||
|
off unwanted ones.
|
||
|
WED DMA also needs to be disabled before resetting.
|
||
|
|
||
|
Fixes: f78cd9c783e0 ("net: ethernet: mtk_wed: update mtk_wed_stop")
|
||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||
|
---
|
||
|
|
||
|
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||
|
@@ -1071,13 +1071,13 @@ mtk_wed_dma_disable(struct mtk_wed_devic
|
||
|
static void
|
||
|
mtk_wed_stop(struct mtk_wed_device *dev)
|
||
|
{
|
||
|
+ mtk_wed_dma_disable(dev);
|
||
|
mtk_wed_set_ext_int(dev, false);
|
||
|
|
||
|
wed_w32(dev, MTK_WED_WPDMA_INT_TRIGGER, 0);
|
||
|
wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER, 0);
|
||
|
wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
|
||
|
wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
|
||
|
- wed_w32(dev, MTK_WED_WPDMA_INT_MASK, 0);
|
||
|
|
||
|
if (!mtk_wed_get_rx_capa(dev))
|
||
|
return;
|
||
|
@@ -1090,7 +1090,6 @@ static void
|
||
|
mtk_wed_deinit(struct mtk_wed_device *dev)
|
||
|
{
|
||
|
mtk_wed_stop(dev);
|
||
|
- mtk_wed_dma_disable(dev);
|
||
|
|
||
|
wed_clr(dev, MTK_WED_CTRL,
|
||
|
MTK_WED_CTRL_WDMA_INT_AGENT_EN |
|
||
|
@@ -2621,9 +2620,6 @@ mtk_wed_irq_get(struct mtk_wed_device *d
|
||
|
static void
|
||
|
mtk_wed_irq_set_mask(struct mtk_wed_device *dev, u32 mask)
|
||
|
{
|
||
|
- if (!dev->running)
|
||
|
- return;
|
||
|
-
|
||
|
mtk_wed_set_ext_int(dev, !!mask);
|
||
|
wed_w32(dev, MTK_WED_INT_MASK, mask);
|
||
|
}
|