Re: [PATCH] wifi: ath11k: Add quirk entry for Thinkpad T14s Gen3 AMD

Takashi Iwai <[email protected]>
Newsgroups org.infradead.lists.ath11k,org.kernel.vger.linux-wireless
Message-ID <[email protected]>
On Mon, 24 Nov 2025 16:52:07 +0100,
Mark Pearson wrote:
> 
> On Mon, Nov 24, 2025, at 10:32 AM, Takashi Iwai wrote:
> > On Mon, 24 Nov 2025 16:13:05 +0100,
> > Mark Pearson wrote:
> >> 
> >> Thanks Takashi-san,
> >> 
> >> On Mon, Nov 24, 2025, at 8:47 AM, Takashi Iwai wrote:
> >> > The recent kernels showed a regression wrt suspend/resume on Lenovo
> >> > Thinkpad T14s Gen 3 AMD model; it fails to reconnect on resume after a
> >> > long time sleep.  The only workaround was to unload/reload the driver
> >> > (or reboot).
> >> >
> >> > It seems that this model also requires the similar quirk with
> >> > ATH11K_PM_WOW which has been done for other Thinkpad models.
> >> >
> >> > Link: https://bugzilla.suse.com/show_bug.cgi?id=1254181
> >> > Signed-off-by: Takashi Iwai <[email protected]>
> >> > ---
> >> >
> >> > I'm not sure whether this model has another DMI entry, so put Mark to
> >> > Cc.
> >> >
> >> > Also, I wonder which Thinkpad models are rather the ones that should
> >> > *not* take the quirk.  Since mine is Gen 3 and I already see Gen 2
> >> > entries, which else remaining...?
> >> >
> >> 
> >> It should only apply to models with the ath11k modem - but it looks like Gen 2 up to Gen 6....which is quite a lot. I don't know if all of those are impacted.
> >> I think we'll have to do more testing and get feedback from the FW team, which will take a bit I'm afraid. I'll look into it.
> >
> > I see, thanks for confirmation!
> >
> >> >
> >> >  drivers/net/wireless/ath/ath11k/core.c | 7 +++++++
> >> >  1 file changed, 7 insertions(+)
> >> >
> >> > diff --git a/drivers/net/wireless/ath/ath11k/core.c 
> >> > b/drivers/net/wireless/ath/ath11k/core.c
> >> > index 812686173ac8..3aa78a39394b 100644
> >> > --- a/drivers/net/wireless/ath/ath11k/core.c
> >> > +++ b/drivers/net/wireless/ath/ath11k/core.c
> >> > @@ -924,6 +924,13 @@ static const struct dmi_system_id 
> >> > ath11k_pm_quirk_table[] = {
> >> >  			DMI_MATCH(DMI_PRODUCT_NAME, "21J4"),
> >> >  		},
> >> >  	},
> >> > +	{
> >> > +		.driver_data = (void *)ATH11K_PM_WOW,
> >> > +		.matches = { /* T14s G3 AMD */
> >> > +			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
> >> > +			DMI_MATCH(DMI_PRODUCT_NAME, "21CR"),
> >> > +		},
> >> > +	},
> >> >  	{
> >> >  		.driver_data = (void *)ATH11K_PM_WOW,
> >> >  		.matches = { /* T14 G4 AMD #1 */
> >> > -- 
> >> > 2.52.0
> >> 
> >> I think you need to add the "21CQ" Product Name for this platform too (every model has two IDs depending on where in the world it is deployed)
> >> 
> >> Unfortunately my T14s G3 AMD seems to be dead :( I can't test and confirm directly.
> >
> > OK, I can resubmit with 21CQ entry later.
> >
> > Also, maybe it'd be worth for adding a module option to specify /
> > override the quirk, so that one can test without recompiling the
> > kernel?
> >
> Yeah - that could be useful so users can confirm if they need the quirk too (especially if platforms outside of the Linux program are impacted). It gets my vote :)
> 
> Mark

OK, it'd be like below.


Takashi

-- 8< --
From: Takashi Iwai <[email protected]>
Subject: [PATCH] wifi: ath11k: Add pm_wow module option

This provides a new module option "pm_wow" for forcibly enabling or
disabling the PM WoW policy.  It helps for debugging the machines that
have a PM problem, so that user can test without recompiling the
kernel -- there are lots of Thinkpad models and some of them may still
need WoW behavior.

As default, the option takes -1, which means to follow the DMI quirk
list and falls back to the default policy.  If the option is given
(either 0 or 1), it precedes and the PM policy is set to that value.

Signed-off-by: Takashi Iwai <[email protected]>
---
 drivers/net/wireless/ath/ath11k/core.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
index 4daaeb5e0ab8..f497ea3a3a2e 100644
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
@@ -39,6 +39,10 @@ bool ath11k_ftm_mode;
 module_param_named(ftm_mode, ath11k_ftm_mode, bool, 0444);
 MODULE_PARM_DESC(ftm_mode, "Boots up in factory test mode");
 
+static int ath11k_pm_wow = -1;
+module_param_named(pm_wow, ath11k_pm_wow, bint, 0444);
+MODULE_PARM_DESC(pm_wow, "Force to enable/disable WoW PM policy");
+
 static const struct ath11k_hw_params ath11k_hw_params[] = {
 	{
 		.hw_rev = ATH11K_HW_IPQ8074,
@@ -2618,11 +2622,16 @@ int ath11k_core_init(struct ath11k_base *ab)
 	const struct dmi_system_id *dmi_id;
 	int ret;
 
-	dmi_id = dmi_first_match(ath11k_pm_quirk_table);
-	if (dmi_id)
-		ab->pm_policy = (kernel_ulong_t)dmi_id->driver_data;
-	else
-		ab->pm_policy = ATH11K_PM_DEFAULT;
+	if (ath11k_pm_wow >= 0) {
+		ath11k_info(ab, "force to set PM WoW: %d\n", ath11k_pm_wow);
+		ab->pm_policy = ath11k_pm_wow;
+	} else {
+		dmi_id = dmi_first_match(ath11k_pm_quirk_table);
+		if (dmi_id)
+			ab->pm_policy = (kernel_ulong_t)dmi_id->driver_data;
+		else
+			ab->pm_policy = ATH11K_PM_DEFAULT;
+	}
 
 	ath11k_dbg(ab, ATH11K_DBG_BOOT, "pm policy %u\n", ab->pm_policy);
 
-- 
2.52.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.