Skip to content

Switch the Pocket EVO to real suspend to RAM - #215

Closed
jesherman wants to merge 1 commit into
armada-os:mainfrom
jesherman:feat/pocket-evo-mem-sleep
Closed

Switch the Pocket EVO to real suspend to RAM#215
jesherman wants to merge 1 commit into
armada-os:mainfrom
jesherman:feat/pocket-evo-mem-sleep

Conversation

@jesherman

@jesherman jesherman commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Important

Do not merge before armada-packages#23. On a kernel without those patches, mem is the configuration that hangs the EVO on resume with a Steam session running — recoverable only by holding the power button.

What changed

  • ayaneo-pocket-evo.conf: ARMADA_SUSPEND_MODE=mem
  • New sleep.conf.d drop-in pinning SuspendState=mem — systemd's default mem standby freeze falls through to s2idle on a failed deep suspend, which wedges SM8550 hard enough to need a power-button reset (we hit this during bring-up). ROCKNIX pins the same for this SoC.
  • README: sleep section still described fake suspend as universal, stale since the Odin 3 moved to mem

Results

Pocket EVO, on battery, Steam running: 27.8 mA vs 161.8 mA standby — ~2 days to ~12. 1202s of uninterrupted deep suspend woken only by the RTC alarm, success=3 fail=0, session intact on resume.

Gaps

Headline numbers are from a 7.0.11 build; packages has since moved to 7.1.5, confirmed working but only over a ~4 minute run. No multi-hour soak, single drain sample per mode, one device. The 5.8× gap is well beyond sampling error, but holding this until there's a longer soak on 7.1.5 is a reasonable call.

🤖 Generated with Claude Code

The EVO has been on fake suspend because deep suspend did not hold: it woke
itself within seconds, and with a Steam session running it failed to resume
at all. Both causes are fixed in armada-packages — the SM8550 wake source
and UFS resume patches from ROCKNIX PR #2954, plus removal of the fan tacho
interrupt on TLMM GPIO 64, which fired ~80 times a second and repeatedly
pulled the SoC back out of suspend.

Measured on a Pocket EVO with those in place, on battery with a Steam session
running: 1202s of uninterrupted deep suspend woken only by the RTC alarm, and
standby drain of 27.8mA against 161.8mA for fake suspend. That is 5.8x lower,
turning roughly 2 days of standby into 12.

Also pin SuspendState to mem. systemd defaults to "mem standby freeze", so a
failed deep suspend falls through to s2idle, which has been observed to wedge
SM8550 hard enough to need a power-button reset. A failed deep should no-op
instead. ROCKNIX pins the same thing for this SoC.

This depends on the armada-packages kernel change. Landing it against a
kernel without those patches puts EVO devices back in the configuration that
hangs on resume, which needs a hold-power recovery — so it should not merge
before the kernel is in.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jesherman

Copy link
Copy Markdown
Contributor Author

Marking this draft — found a blocker, and it's one my testing should have caught much earlier.

The power button does not wake the device from deep suspend. Pressing power suspends fine, then pressing it again does nothing; the device is genuinely asleep and unwakeable, which presents as a hang and needs a hold-power reset.

Every "successful" result I reported was woken by an RTC alarm (rtcwake or a wakealarm write). I never tested the actual user-facing wake path. That's a significant gap in the validation behind the numbers above.

Evidence, from a suspend with a 120s RTC backstop and a power press partway through:

pm_wakeup_irq=202                → pmic_arb RTC alarm
rtc@6100   wakeup count 1 → 2    → RTC fired
pwrkey     wakeup count 0 → 0    → power key registered nothing

pmic_pwrkey shows wakeup = enabled and pon@1300:pwrkey is registered as a wakeup source, so it is armed in principle — but it never fires from deep. The RTC proves PMIC-side IRQs can wake the SoC, so this looks specific to the pwrkey path rather than PMIC wake generally.

The kernel work in armada-packages#23 is unaffected — deep suspend itself holds fine and the drain numbers stand. It is only this PR, flipping the EVO over to mem, that must wait until power-key wake works.

Next step is finding why the pwrkey doesn't arm a PDC wake on SM8550. Leaving this in draft until then.

@jesherman jesherman closed this Aug 6, 2026
@jesherman

Copy link
Copy Markdown
Contributor Author

replaced by #228

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