|
Takashi Iwai |
07d0a6 |
From c397fc1e6365a2a9e5540a85b2c1d4ea412aa0e2 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
07d0a6 |
From: Quan Zhou <quan.zhou@mediatek.com>
|
|
Takashi Iwai |
07d0a6 |
Date: Sat, 18 Mar 2023 15:41:12 +0800
|
|
Takashi Iwai |
07d0a6 |
Subject: [PATCH] wifi: mt76: mt7921e: fix probe timeout after reboot
|
|
Takashi Iwai |
07d0a6 |
Git-commit: c397fc1e6365a2a9e5540a85b2c1d4ea412aa0e2
|
|
Takashi Iwai |
07d0a6 |
Patch-mainline: v6.4-rc1
|
|
Takashi Iwai |
07d0a6 |
References: git-fixes
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
In system warm reboot scene, due to the polling timeout(now 1000us)
|
|
Takashi Iwai |
07d0a6 |
is too short to wait dma idle in time, it may make driver probe fail
|
|
Takashi Iwai |
07d0a6 |
with error code -ETIMEDOUT. Meanwhile, we also found the dma may take
|
|
Takashi Iwai |
07d0a6 |
around 70ms to enter idle state. Change the polling idle timeout to
|
|
Takashi Iwai |
07d0a6 |
100ms to avoid the probabilistic probe fail.
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
Tested pass with 5000 times warm reboot on x86 platform.
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
[4.477496] pci 0000:01:00.0: attach allowed to drvr mt7921e [internal device]
|
|
Takashi Iwai |
07d0a6 |
[4.478306] mt7921e 0000:01:00.0: ASIC revision: 79610010
|
|
Takashi Iwai |
07d0a6 |
[4.480063] mt7921e: probe of 0000:01:00.0 failed with error -110
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
Fixes: 0a1059d0f060 ("mt76: mt7921: move mt7921_dma_reset in dma.c")
|
|
Takashi Iwai |
07d0a6 |
Signed-off-by: Quan Zhou <quan.zhou@mediatek.com>
|
|
Takashi Iwai |
07d0a6 |
Signed-off-by: Deren Wu <deren.wu@mediatek.com>
|
|
Takashi Iwai |
07d0a6 |
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
Takashi Iwai |
07d0a6 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
---
|
|
Takashi Iwai |
07d0a6 |
drivers/net/wireless/mediatek/mt76/mt7921/dma.c | 6 +++---
|
|
Takashi Iwai |
07d0a6 |
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/dma.c b/drivers/net/wireless/mediatek/mt76/mt7921/dma.c
|
|
Takashi Iwai |
07d0a6 |
index 1d85c0c10049..28207172c4ef 100644
|
|
Takashi Iwai |
07d0a6 |
--- a/drivers/net/wireless/mediatek/mt76/mt7921/dma.c
|
|
Takashi Iwai |
07d0a6 |
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/dma.c
|
|
Takashi Iwai |
07d0a6 |
@@ -90,9 +90,9 @@ static int mt7921_dma_disable(struct mt7921_dev *dev, bool force)
|
|
Takashi Iwai |
07d0a6 |
MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
|
|
Takashi Iwai |
07d0a6 |
MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
- if (!mt76_poll(dev, MT_WFDMA0_GLO_CFG,
|
|
Takashi Iwai |
07d0a6 |
- MT_WFDMA0_GLO_CFG_TX_DMA_BUSY |
|
|
Takashi Iwai |
07d0a6 |
- MT_WFDMA0_GLO_CFG_RX_DMA_BUSY, 0, 1000))
|
|
Takashi Iwai |
07d0a6 |
+ if (!mt76_poll_msec_tick(dev, MT_WFDMA0_GLO_CFG,
|
|
Takashi Iwai |
07d0a6 |
+ MT_WFDMA0_GLO_CFG_TX_DMA_BUSY |
|
|
Takashi Iwai |
07d0a6 |
+ MT_WFDMA0_GLO_CFG_RX_DMA_BUSY, 0, 100, 1))
|
|
Takashi Iwai |
07d0a6 |
return -ETIMEDOUT;
|
|
Takashi Iwai |
07d0a6 |
|
|
Takashi Iwai |
07d0a6 |
return 0;
|
|
Takashi Iwai |
07d0a6 |
--
|
|
Takashi Iwai |
07d0a6 |
2.35.3
|
|
Takashi Iwai |
07d0a6 |
|