ath10k_pci: QCA9377 hard lock on resume from S3/deep suspend

Omar Abuzaid <[email protected]>
Newsgroups org.kernel.vger.linux-wireless
Message-ID <CA+kcdF5BtM9dZJ6JNAvvsTfFZ18xcio06iSsYHGY4S7xDjtZ2A@mail.gmail.com>
Qualcomm Atheros QCA9377 using ath10k_pci can cause a complete system
hard lock when resuming from deep/S3 suspend. During the failed
resume, the kernel log shows repeated PCIe AER Physical Layer and Data
Link Layer errors involving the QCA9377.

Unloading ath10k_pci before suspend prevents the problem.

System

Fedora Linux 44

Kernel:
7.1.10-200.fc44.x86_64

Architecture:
x86_64

Kernel taint:
0

BIOS:
1.32.0
09/03/2024

Suspend modes:
s2idle [deep]

Wi-Fi device:
Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter [168c:0042] (rev 31)

Subsystem:
Dell Device [1028:1810]

Driver:
ath10k_pci

Problem

When the system resumes from deep/S3 suspend with ath10k_pci loaded,
the entire system can hard-freeze.

When this happens:

The system becomes completely unresponsive.
Caps Lock does not toggle.
Magic SysRq does not respond.
A forced power-off is required.

The kernel log around resume contains repeated PCIe AER errors such as:

ath10k_pci 0000:02:00.0: PCIe Bus Error: severity=Correctable,
type=Physical Layer, (Receiver ID)
ath10k_pci 0000:02:00.0: device [168c:0042] error status/mask=000000c1/00006000
ath10k_pci 0000:02:00.0: [ 0] RxErr (First)

pcieport 0000:00:1c.7: AER: Multiple Correctable error message
received from 0000:02:00.0

ath10k_pci 0000:02:00.0: PCIe Bus Error: severity=Correctable,
type=Data Link Layer, (Receiver ID)

There are also ACPI errors during resume:

ACPI BIOS Error (bug): Could not resolve symbol [_SB.PCI0.GLAN.GPEH],
AE_NOT_FOUND
ACPI Error: Aborting method _GPE._L6D due to previous error (AE_NOT_FOUND)
ACPI Error: AE_NOT_FOUND, while evaluating GPE method [_L6D]

Steps to reproduce

Boot normally with ath10k_pci loaded.
Confirm the QCA9377 is using ath10k_pci.
Suspend using deep/S3 suspend.
Wake the system.
The system may completely hard-lock during resume.

Isolation test / workaround

Before suspend:

sudo modprobe -r ath10k_pci
systemctl suspend

With ath10k_pci unloaded, the system resumes normally without the hard lock.

After resume:

sudo modprobe ath10k_pci

The driver reloads and Wi-Fi reconnects normally.

Simply unloading and reloading ath10k_pci without suspending also
works normally.

PCIe information

LnkCap: Speed 2.5GT/s, Width x1, ASPM L0s L1
LnkCtl: ASPM L0s L1 Enabled
LnkSta: Speed 2.5GT/s, Width x1

L1 PM substates are enabled:

PCI-PM_L1.2+
PCI-PM_L1.1+
ASPM_L1.2+
ASPM_L1.1+

This appears to involve the QCA9377/ath10k PCIe resume or PCIe
power-management path, although I cannot determine whether the root
cause is ath10k, PCIe power management, device firmware, or system
ACPI firmware.

I also filed this with Fedora as Bugzilla #2523243.

I can provide the complete previous-boot kernel log and perform
additional tests if needed.
kernel-resume-freeze.txt (text/plain, 741.6 KB) - not displayed
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.