Skip to content

PCI: apple: t8140: watch the radio slots for 2 ms after a sleep - #1715

Merged
DjDeveloperr merged 1 commit into
integration/aurorafrom
fix/t8140-radio-settle
Nov 12, 2026
Merged

DjDeveloperr merged 1 commit into
integration/aurorafrom
fix/t8140-radio-settle

Conversation

@DjDeveloperr

Copy link
Copy Markdown
Contributor

On a DRAM-kept wake, the Neo (J700) brings its radio link back inside the PCIe host's resume_noirq, which the whole noirq phase waits for. The bootstrap after that link-up spent 21 ms watching its retained slots. This keeps the full watch for the first bootstrap at boot and shortens it after a sleep.

  • d15e15e6 PCI: apple: t8140: watch the radio slots for 2 ms after a sleep
    • After its response, the bootstrap checks that the retained slots hold still: 10 periods of 1–2 ms.
    • After a sleep, the same engine repeats a request it has already answered on this boot, and suspend_noirq reads the slots again before every sleep. So 2 periods are enough there.
    • The first bootstrap at boot keeps all 10.

Measured on the Neo (J700), 2026-11-12

Kit: this commit on cae47c00 together with #1700 and a debug-only commit (#1682's diagnostic line), aura main Stage 2. One boot, with 22 DRAM-kept sleeps in all. The "before" column is the previous kit on the same base without this commit (#1700's measurements).

before this PR
Bootstrap prime after a sleep (kprobes) 21.0 ms 4.3 ms
The host's radio bring-up in resume_noirq (kprobes) 123.2 ms 109.5 ms
dpm_resume_noirq phase (kprobes) 138.3 ms 124.8 ms
dpm_resume_noirq phase (power trace, median of 3) — 124.5 ms; pcie-apple 110.2 ms

Wake timing, 8 DRAM-kept wakes, seconds from the PMU RTC alarm to the suspend exit:

  • Both boots split into two groups about 45 ms apart. The gap is already there when the display firmware comes up, so it isn't this change.
  • Fast group: 0.254–0.257 s here, against 0.270–0.280 s before.
  • The slow group (about 0.30 s) took 5 of 8 wakes on this boot and 2 of 8 before, so the medians (0.299 against 0.279) don't show the change.

Safety, same boot:

  • 10 more DRAM-kept sleeps, all DRAM-kept, with Wi-Fi (ping to the gateway) and Bluetooth up after every one.
  • H.264 and HEVC encodes byte-identical after the wakes.
  • No "changed outside its permitted response", "bootstrap failed", "radios did not come back" or "engine kept state" line in the boot's log.

🤖 Generated with Claude Code

After its response, the bootstrap watches the retained slots for ten
1-2 ms periods, which is 21 ms of the DRAM-kept wake's noirq phase on
the J700. After a sleep the same engine repeats a request it has already
answered on this boot, and the slots are read again before every sleep,
so two periods are enough there. The first bootstrap keeps all ten.

Signed-off-by: Diljit Singh <hey@djdev.me>
@DjDeveloperr
DjDeveloperr merged commit 58bc3e1 into integration/aurora Nov 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant