From: Hedi Ben Hamida <hedihamida096@gmail.com>
To: Felix Fietkau <nbd@nbd.name>, Lorenzo Bianconi <lorenzo@kernel.org>
Cc: Ryder Lee <ryder.lee@mediatek.com>,
Shayne Chen <shayne.chen@mediatek.com>,
Sean Wang <sean.wang@mediatek.com>,
linux-wireless@vger.kernel.org,
linux-mediatek@lists.infradead.org, stable@vger.kernel.org,
Hedi Ben Hamida <hedihamida096@gmail.com>
Subject: [PATCH v2 2/2] wifi: mt76: mt7921: reset on HIF resume timeout
Date: Sat, 24 Oct 2026 09:16:53 -0400 [thread overview]
Message-ID: <20261024131715.64435-3-hedihamida096@gmail.com> (raw)
In-Reply-To: <20261024131715.64435-1-hedihamida096@gmail.com>
On some MT7922 firmware the HIF_CTRL resume command does not return a
response after D3, so mt7921_pci_resume() returns -ETIMEDOUT and the
PM core reports the resume as failed:
mt7921e 0000:03:00.0: Message 00020007 (seq 6) timeout
mt7921e 0000:03:00.0: PM: dpm_run_callback(): pci_pm_resume returns -110
The driver already resets the device on this error, and the reset
restores it. Treat the timeout as recovered after queueing the reset
and return success, so the PM core does not mark the resume as failed.
Tested on MEDIATEK MT7922 (14c3:7922) on kernel 6.12.113: suspend/resume
no longer returns -110 and Wi-Fi recovers; hibernate/resume still works.
Cc: stable@vger.kernel.org
Signed-off-by: Hedi Ben Hamida <hedihamida096@gmail.com>
---
drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index 00532b29f..dce88fcc7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -597,6 +597,14 @@ static int _mt7921_pci_resume(struct device *device, bool restore)
mt76_connac_mcu_set_deep_sleep(&dev->mt76, false);
err = mt76_connac_mcu_set_hif_suspend(mdev, false, true);
+ if (err == -ETIMEDOUT) {
+ /* Firmware may not reply after D3; the reset recovers it. */
+ dev_warn(dev->mt76.dev,
+ "HIF resume timed out, resetting\n");
+ pm->suspended = false;
+ mt792x_reset(&dev->mt76);
+ return 0;
+ }
if (err < 0)
goto failed;
--
2.47.3
prev parent reply other threads:[~2026-10-24 13:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-24 13:16 [PATCH v2 0/2] wifi: mt76: mt7921: fix hibernate and suspend resume Hedi Ben Hamida
2026-10-24 13:16 ` [PATCH v2 1/2] wifi: mt76: mt7921: add pci restore for hibernate Hedi Ben Hamida
2026-10-24 13:16 ` Hedi Ben Hamida [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261024131715.64435-3-hedihamida096@gmail.com \
--to=hedihamida096@gmail.com \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-wireless@vger.kernel.org \
--cc=lorenzo@kernel.org \
--cc=nbd@nbd.name \
--cc=ryder.lee@mediatek.com \
--cc=sean.wang@mediatek.com \
--cc=shayne.chen@mediatek.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox