Re: ath11k allocation failure on resume breaking wifi until power cycle

From: Baochen Qiang
Date: Mon Feb 26 2024 - 21:44:01 EST




On 2/26/2024 7:43 PM, Manivannan Sadhasivam wrote:
On Mon, Feb 26, 2024 at 05:11:17PM +0800, Baochen Qiang wrote:


On 2/26/2024 4:45 PM, Vlastimil Babka wrote:
On 2/26/24 03:09, Baochen Qiang wrote:


On 2/23/2024 11:28 PM, Vlastimil Babka wrote:
On 2/22/24 06:47, Manivannan Sadhasivam wrote:
On Wed, Feb 21, 2024 at 08:34:23AM -0800, Jeff Johnson wrote:
On 2/21/2024 6:39 AM, Vlastimil Babka wrote:
Hi,

starting with 6.8 rc series, I'm experiencing problems on resume from s2idle
on my laptop, which is Lenovo T14s Gen3:

LENOVO 21CRS0K63K/21CRS0K63K, BIOS R22ET65W (1.35 )
ath11k_pci 0000:01:00.0: wcn6855 hw2.1
ath11k_pci 0000:01:00.0: chip_id 0x12 chip_family 0xb board_id 0xff soc_id 0x400c1211
ath11k_pci 0000:01:00.0: fw_version 0x1106196e fw_build_timestamp 2024-01-12 11:30 fw_build_id WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37

The problem is an allocation failure happening on resume from s2idle. After
that the wifi stops working and even a reboot won't fix it, only a
poweroff/poweron cycle of the laptop.


Looks like WLAN is powered down during s2idle, which doesn't make sense. I hope
Jeff will figure out what's going on.

You mean the firmware is supposed to power it down/up transparently without
kernel involvement? Because it should be powered down to save the power, no?
Let me clarify: from backtrace info, seems you are using a kernel with
the hibernation-support patches [1] applied, which are not accepted yet
to mainline kernel or even
git://git.kernel.org/pub/scm/linux/kernel/git/mani/mhi.git.

Oh, you're right. Sorry for confusing you all. The rc kernel builds we have
for openSUSE have nearly no non-upstream patches so it didn't really occur
to me to double check if there might be in the area.

Seems Takashi (Cc'd) added them indeed to make hibernation work:
https://bugzilla.suse.com/show_bug.cgi?id=1207948#c51

But then, why do they affect also s2idle, is it intentional? And why I only
Yes, it's intentional. When suspend/resume, ath11k does the same for either
a s2idle suspend or a deep one.


That's a terrible idea for usecases like Android IMO. s2idle happens very often
on Android platforms (screen lock) and do you want to powerdown the WLAN device
all the time?
I am not familiar with Android case. Is WoWLAN enabled in that case? I am asking this because if WoWLAN is enabled ath11k goes another path and only calls mhi_pm_suspend()/resume() instead of mhi_power_down()/up().


Even though it offers power saving, I'm worried about the latency and possible
teardown of the chipset. Later is only valid if the chipset undergoes complete
power cycle though.

- Mani

started seeing the problems in 6.8, the patches are there since August.

So this is why you see WLAN firmware is powered down during suspend.

[1]
https://patchwork.kernel.org/project/linux-wireless/cover/20231127162022.518834-1-kvalo@xxxxxxxxxx/


But I just found out that when I build my own kernel using the distro config
as base but reduced by make localmodconfig, the "mhi mhi0: Requested to
power ON" and related messages don't occur anymore, so there's something
weird going on.
Here your own kernel doesn't include the hibernation-support patches, right?

Right.