mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* mtk_t7xx: resume after power loss reported as success, modem stays dead
@ 2026-11-06  5:46 Andreas Haerter
  0 siblings, 0 replies; only message in thread
From: Andreas Haerter @ 2026-11-06  5:46 UTC (permalink / raw)
  To: chandrashekar.devegowda
  Cc: haijun.liu, ricardo.martinez, loic.poulain, ryazanov.s.a,
	johannes, tim770802, netdev, linux-kernel

Hi,

After system suspend the t7xx module on this machine can lose power and
not come back. The PCI core notices, but mtk_t7xx reports the resume as
successful and keeps its ports registered. Userspace is left with a
modem that exists and rejects every write, and only a reboot recovers
it.

I have seen this on 4 of at least 13 s2idle cycles, on Fedora's 7.2.5
to 7.2.15. Line numbers are from current mainline.

  Machine:  LENOVO 21RMCTO1WW (ThinkPad X13 Gen 6), AMD
  Module:   Rolling Wireless RW350R-GL, 14c3:4d75 (2099:3552)
  Firmware: 81601.0000.00.29.25.05_DT
  BIOS:     R32ET20W (1.03), and R32ET28W (1.11) for the latest one

From 7.2.15 on BIOS 1.11, on the first standby after the BIOS update:

  PM: suspend entry (s2idle)
  mtk_t7xx 0000:c3:00.0: Unable to change power state from D3hot to D0,
    device inaccessible
  PM: suspend exit
  mtk_t7xx 0000:c3:00.0: Write error on MBIM port, -19

The driver logs nothing else about it. Config space then reads all ff
(on 7.2.8 it still did seven minutes later), while /dev/wwan0mbim0 and
/dev/wwan0at0 stay present. Runtime PM is not involved: power/control
is "on" and power/runtime_suspended_time reads 0.

The root port 00:02.5 sees nothing either: SltSta shows PresDet-, and
LnkSta shows DLActive- and Train-, with 2.5GT/s x16 on a port that is
x1. So the link is down and the port is not training.
The ACPI power code for this slot (\_SB.PCI0.GPP7, P0WW) is identical
in both BIOS versions.

From the code, not traced:

1. __t7xx_pci_pm_resume() reads T7XX_PCIE_PM_RESUME_STATE at
   t7xx_pci.c:586. From an absent device that gives 0xffffffff, which
   matches none of the PM_RESUME_REG_STATE_* values.
2. It reaches the else-if at t7xx_pci.c:632, sends FSM_CMD_STOP and
   returns 0.
3. t7xx_port_send_skb() returns -ENODEV for MD_STATE_STOPPED
   (t7xx_port_proxy.c:345), which is the -19 above.
4. t7xx_port_wwan_md_state_notify() ignores every state except
   MD_STATE_READY, so the WWAN ports stay registered.

The next system suspend is then refused. On 7.2.5 two attempts each
hung for about 37 s until t7xx_pci_pm_suspend() returned -110, and
systemd-sleep gave up, leaving the machine awake.

Checking pci_device_is_present(), or for an all-ones read, before
acting on prev_state would make the failure visible. The L3 branch
handles power loss but needs the device back on the bus first. What
should the driver do here: fail the resume, or remove the WWAN ports so
userspace notices?

This looks separate from Tim JH Chen's series "fix DPMAIF data path vs
system PM suspend", but I have adjusted CC in case it overlaps.

Thanks,
Andreas

-- 
foundata GmbH
Steinhäuserstr. 20
76135 Karlsruhe

Web: https://foundata.com 
Sitz der Gesellschaft: Karlsruhe
Registergericht: Amtsgericht Mannheim, HRB 714807
Geschäftsführung: Andreas Haerter
USt-IdNr.: DE284122682

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-11-06  5:47 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-06  5:46 mtk_t7xx: resume after power loss reported as success, modem stays dead Andreas Haerter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®