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