Cannot read PCIe wireless card after resuming from suspend

Hi,

I cannot read PCI config space after resuming from suspend.

Procedure.

  1. Load wireless driver
  2. Run “echo mem | sudo tee /sys/power/state” and enter suspend state
  3. Resume
  4. lspci -v

lspci before and after:

0003:01:00.0 Network controller: Qualcomm Device 1103 (rev 01)
Subsystem: Qualcomm Device 3374
Flags: fast devsel
Memory at 12b0000000 (64-bit, non-prefetchable) [disabled] [size=2M]
Capabilities:

0003:01:00.0 Network controller: Qualcomm Device 1103 (rev ff) (prog-if ff)
!!! Unknown header type 7f
Kernel driver in use: cnss_pci

How can I use wireless card after resuming? What should I check next?

Best Regards,

It looks like the PCIe link itself hasn’t come up during resume.
Could you please share the full log (dmesg output)?

Please see attached.

20210629_094439_COM60.log (215.3 KB)

As expected, I do see link not being up during resume path
[2021-06-29 09:45:18.984] [ 89.036196] tegra-pcie-dw 14140000.pcie: link is down
Also, I see a lot of error messages from the WiFi driver during suspend (also, it looks like the system didn’t go into suspend in one go… it attempted multiple times before entering into the suspend state).
Do we have if the WiFi driver is known to work for suspend/resume use case?

This issue is not duplicated on x86_64 Linux.
And I believe “a lot of error messages from the WiFi driver” is caused by PCIe link down.

This seems to be a device specific issue.
Could you please the following?
cd /sys/bus/platform/drivers/tegra-pcie-dw
echo "14140000.pcie" > unbind
and then
echo "14140000.pcie" > bind
Also, if the PCIe link speed with this WiFi is Gen-2, please downgrade it to Gen-1 (for debugging purpose) and see if there is any change in the behavior. (This can be done by changing the ‘max-speed’ entry in the respective root port’s DT node to ‘1’.)

I can see config space after re-binding but the wireless driver did not come up. That seems to be the driver’s problem.

For Gen1, it could not help.

Any update?

I don’t see this issue to be a Tegra specific issue.
Could you please try insmod’ing and rmmod’ing the driver (i.e. endpoint’s device driver) and does it work fine?

No it does not.
Serial console stuck when rmmoding.

I think your driver seems broken. Since rmmod itself is not working, I guess there is some issue with the uninitialization path here. Please work with the endpoint vendor for this issue.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.