Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
MacBookPro16,1 (T2, Radeon Pro 5300M/5500M): deep S3 resumes, s2idle wedges amdgpu, and Wi-Fi after S3 needs an early `_TTS(0)` kernel quirk
Reported by justcarlson · filed Oct 9, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
Related: #9105 (s2idle for dGPU T2), #9830 (s2idle + brcmfmac unload), #6562 / #6559 (mem_sleep_default=deep), #6862 (15,1 deep never resumes), #13210 (15,1 SMU after long S3), #8106 (brcmfmac D3 timeout).
Environment
| Item | Value |
|---|---|
| Model | MacBookPro16,1, i9, Intel UHD 630 + Radeon Pro 5300M/5500M (0000:03:00.0) |
| Firmware | 2094.40.1.0.0 |
| Kernel | linux-t2 7.2.9.arch1-1 (t2bce), plus one local patch for the Wi-Fi test |
| Omarchy | omarchy-dev 4.0.0.r6807.g902fd8a |
| systemd | 262 |
| Wi-Fi | BCM4364 14e4:4464 (0000:05:00.0 under RP01 0000:00:1c.0) |
| Cmdline | pm_async=off mem_sleep_default=deep (stock T2 config) |
Results (2026-10-08/09, attended, pm_test ladder then real cycles)
Patched kernel: 6 consecutive real S3 cycles in one boot, suspend_stats: 6 success, 0 fail.
| Mode / step | GPU | Wi-Fi |
|---|---|---|
s2idle platform | wedged, hard power-off | n/a |
s2idle platform, amdgpu.ppfeaturemask=0xfff7bffd | wedged, same signature | n/a |
deep platform, stock kernel | OK (GPU mode1 reset, SMU is resumed successfully!) | dead |
| deep real S3, stock kernel | OK, wake in about 1 s | dead |
deep platform + early _TTS(0) patch | OK | OK (RP01 resume 118 ms) |
| deep real S3 + patch, undocked, 2 cycles | OK | OK, plus keyboard, trackpad, Touch Bar, sound |
| deep real S3 + patch, docked (TS4, 2 DP monitors), 3 cycles | OK, both monitors back | OK, dock Ethernet OK |
| lid close on battery + patch | OK, locks, sleeps, lid-open wakes | OK |
| hibernate | restored session hung after unlock | n/a |
Root causes
- s2idle wedges the dGPU. The GPU, its two bridges and the root port have no ACPI power resources, so it cannot reach D3cold. In s2idle it stays in D3hot with power on and gets no reset. amdgpu turns the SMU features off on suspend; on resume the SMU rejects
PPSMC_MSG_EnableAllSmuFeatures(msg 6). The UCLK hypothesis is refuted (ppfeaturemasktest above). - Deep S3 works here. The MODE1 reset that #9105 reports as failing on a 16,1 succeeds on this unit, on every deep run.
- Wi-Fi after S3 is a firmware ordering issue. The DSDT
\_TTSstores the target state inSLTP.RP01._PS3(APPD) asserts the Wi-Fi reset.RP01._PS0(APPU) releases the reset and clock only whenSLTP == 0. Linux evaluates_TTS(0)inacpi_pm_end(), after device resume, so the card stays in reset. s2idle never calls_TTS, which is why Wi-Fi survives s2idle.
# s2idle, every run
amdgpu 0000:03:00.0: SMU is resuming...
amdgpu 0000:03:00.0: SMU: No response msg_reg: 6 resp_reg: 0
amdgpu 0000:03:00.0: Failed to enable requested dpm features!
amdgpu 0000:03:00.0: resume of IP block <smu> failed -62
# deep S3, stock kernel
ACPI: PM: Waking up from system sleep state S3
pcieport 0000:00:1c.0: PM: pci_pm_resume_noirq returned 0 after 1001626 usecs
pci 0000:05:00.0: Unable to change power state from unknown to D0, device inaccessible
amdgpu 0000:03:00.0: SMU is resumed successfully!
brcmfmac: brcmf_pcie_probe: failed 14e4:4464
# deep S3, patched kernel
ACPI: PM: Apple: _TTS(0) before device resume
pcieport 0000:00:1c.0: PM: pci_pm_resume_noirq returned 0 after 118224 usecs
brcmfmac 0000:05:00.0: PM: pci_pm_resume returned 0 after 5150 usecsMethod (_TTS, 1, NotSerialized) { SLTP = Arg0 }
Method (APPU, 0, Serialized) { /* RP01._PS0 */
If ((SLTP == Zero)) { CKGP (One); CLKD (Zero); DRST (Zero); Sleep (0x64); L23R (Zero) }What not to do on this model
- Do not switch dGPU T2 Macs to s2idle (#9105, #9830). On this board s2idle cannot resume the GPU and needs a hard power-off.
- Do not unload
brcmfmacbefore sleep (#9830, #8106). A real S3 with the driver unloaded left Wi-Fi dead (RP01 resume 1.1 s timeout). With the driver loaded the card suspends cleanly; thebrcmf_pcie_pm_enter_D3abort from #9830 did not appear in any run.
Separate: boot-time lid suspend
Seven of ten historical "never resumed" events were boot-time suspends with the lid closed at the LUKS prompt. systemd 262 counts HoldoffTimeoutSec from kernel start, and logind checks for external displays once, before amdgpu has probed the dock (systemd/systemd#14416). Workaround that works here: HandleLidSwitchExternalPower=ignore in a logind.conf.d drop-in.
Ask
- Keep
mem_sleep_default=deepfor MacBookPro16,1. Do not apply #9105 or #9830 to it. - Do not add a
brcmfmacunload hook for BCM4364 on this model. - The Wi-Fi fix is a kernel quirk (below). I plan to send it to
t2linux/linux-t2-patches. If Omarchy wants a stopgap, it would have to ship a patchedlinux-t2, which I am not asking for.
Kernel patch: evaluate _TTS(0) right after _WAK on MacBookPro16,1 (S3 only, acpi_no_early_tts=1 disables it)
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -105,6 +105,15 @@
EXPORT_SYMBOL_GPL(acpi_target_system_state);
static bool pwr_btn_event_pending;
+static bool apple_early_tts;
+static bool no_early_tts;
+core_param(acpi_no_early_tts, no_early_tts, bool, 0400);
+
+static int __init init_apple_early_tts(const struct dmi_system_id *d)
+{
+ apple_early_tts = true;
+ return 0;
+}
/*
* The ACPI specification wants us to save NVS memory regions during hibernation
@@ -175,6 +184,14 @@
static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
{
+ .callback = init_apple_early_tts,
+ .ident = "Apple MacBookPro16,1",
+ .matches = {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MacBookPro16,1"),
+ },
+ },
+ {
.callback = init_old_suspend_ordering,
.ident = "Abit KN9 (nForce4 variant)",
.matches = {
@@ -496,6 +513,16 @@
pr_info("Waking up from system sleep state S%d\n", acpi_state);
acpi_disable_wakeup_devices(acpi_state);
acpi_leave_sleep_state(acpi_state);
+
+ /*
+ * Apple's RP01._PS0 leaves Wi-Fi in reset while _TTS reports S3.
+ * Clear it after _WAK, before power resources and devices resume.
+ * Disable this quirk with acpi_no_early_tts=1 on the command line.
+ */
+ if (acpi_state == ACPI_STATE_S3 && apple_early_tts && !no_early_tts) {
+ acpi_sleep_tts_switch(ACPI_STATE_S0);
+ pr_info("Apple: _TTS(0) before device resume\n");
+ }
/* reset firmware waking vector */
acpi_set_waking_vector(0);Based on Linux 7.2.9. The late _TTS(0) in acpi_pm_end() stays as a fallback; the firmware _TTS only assigns SLTP, so a second zero write is safe.
Open items
- Other dGPU T2 models (15,1 / 15,3 / 16,4) are untested. #6862 and #13210 show 15,1 fails differently, so model-specific handling looks needed.
View raw text
Related: #9105 (s2idle for dGPU T2), #9830 (s2idle + `brcmfmac` unload), #6562 / #6559 (`mem_sleep_default=deep`), #6862 (15,1 deep never resumes), #13210 (15,1 SMU after long S3), #8106 (`brcmfmac` D3 timeout).
## Environment
| Item | Value |
| --- | --- |
| Model | MacBookPro16,1, i9, Intel UHD 630 + Radeon Pro 5300M/5500M (`0000:03:00.0`) |
| Firmware | 2094.40.1.0.0 |
| Kernel | `linux-t2` 7.2.9.arch1-1 (t2bce), plus one local patch for the Wi-Fi test |
| Omarchy | omarchy-dev 4.0.0.r6807.g902fd8a |
| systemd | 262 |
| Wi-Fi | BCM4364 `14e4:4464` (`0000:05:00.0` under RP01 `0000:00:1c.0`) |
| Cmdline | `pm_async=off mem_sleep_default=deep` (stock T2 config) |
## Results (2026-10-08/09, attended, `pm_test` ladder then real cycles)
Patched kernel: 6 consecutive real S3 cycles in one boot, `suspend_stats`: 6 success, 0 fail.
| Mode / step | GPU | Wi-Fi |
| --- | --- | --- |
| s2idle `platform` | wedged, hard power-off | n/a |
| s2idle `platform`, `amdgpu.ppfeaturemask=0xfff7bffd` | wedged, same signature | n/a |
| deep `platform`, stock kernel | OK (`GPU mode1 reset`, `SMU is resumed successfully!`) | dead |
| deep real S3, stock kernel | OK, wake in about 1 s | dead |
| deep `platform` + early `_TTS(0)` patch | OK | OK (RP01 resume 118 ms) |
| deep real S3 + patch, undocked, 2 cycles | OK | OK, plus keyboard, trackpad, Touch Bar, sound |
| deep real S3 + patch, docked (TS4, 2 DP monitors), 3 cycles | OK, both monitors back | OK, dock Ethernet OK |
| lid close on battery + patch | OK, locks, sleeps, lid-open wakes | OK |
| hibernate | restored session hung after unlock | n/a |
## Root causes
- **s2idle wedges the dGPU.** The GPU, its two bridges and the root port have no ACPI power resources, so it cannot reach D3cold. In s2idle it stays in D3hot with power on and gets no reset. amdgpu turns the SMU features off on suspend; on resume the SMU rejects `PPSMC_MSG_EnableAllSmuFeatures` (msg 6). The UCLK hypothesis is refuted (`ppfeaturemask` test above).
- **Deep S3 works here.** The MODE1 reset that #9105 reports as failing on a 16,1 succeeds on this unit, on every deep run.
- **Wi-Fi after S3 is a firmware ordering issue.** The DSDT `\_TTS` stores the target state in `SLTP`. `RP01._PS3` (`APPD`) asserts the Wi-Fi reset. `RP01._PS0` (`APPU`) releases the reset and clock only when `SLTP == 0`. Linux evaluates `_TTS(0)` in `acpi_pm_end()`, after device resume, so the card stays in reset. s2idle never calls `_TTS`, which is why Wi-Fi survives s2idle.
```text
# s2idle, every run
amdgpu 0000:03:00.0: SMU is resuming...
amdgpu 0000:03:00.0: SMU: No response msg_reg: 6 resp_reg: 0
amdgpu 0000:03:00.0: Failed to enable requested dpm features!
amdgpu 0000:03:00.0: resume of IP block <smu> failed -62
# deep S3, stock kernel
ACPI: PM: Waking up from system sleep state S3
pcieport 0000:00:1c.0: PM: pci_pm_resume_noirq returned 0 after 1001626 usecs
pci 0000:05:00.0: Unable to change power state from unknown to D0, device inaccessible
amdgpu 0000:03:00.0: SMU is resumed successfully!
brcmfmac: brcmf_pcie_probe: failed 14e4:4464
# deep S3, patched kernel
ACPI: PM: Apple: _TTS(0) before device resume
pcieport 0000:00:1c.0: PM: pci_pm_resume_noirq returned 0 after 118224 usecs
brcmfmac 0000:05:00.0: PM: pci_pm_resume returned 0 after 5150 usecs
```
```asl
Method (_TTS, 1, NotSerialized) { SLTP = Arg0 }
Method (APPU, 0, Serialized) { /* RP01._PS0 */
If ((SLTP == Zero)) { CKGP (One); CLKD (Zero); DRST (Zero); Sleep (0x64); L23R (Zero) }
```
## What not to do on this model
- Do not switch dGPU T2 Macs to s2idle (#9105, #9830). On this board s2idle cannot resume the GPU and needs a hard power-off.
- Do not unload `brcmfmac` before sleep (#9830, #8106). A real S3 with the driver unloaded left Wi-Fi dead (RP01 resume 1.1 s timeout). With the driver loaded the card suspends cleanly; the `brcmf_pcie_pm_enter_D3` abort from #9830 did not appear in any run.
## Separate: boot-time lid suspend
Seven of ten historical "never resumed" events were boot-time suspends with the lid closed at the LUKS prompt. systemd 262 counts `HoldoffTimeoutSec` from kernel start, and logind checks for external displays once, before amdgpu has probed the dock (systemd/systemd#14416). Workaround that works here: `HandleLidSwitchExternalPower=ignore` in a `logind.conf.d` drop-in.
## Ask
1. Keep `mem_sleep_default=deep` for MacBookPro16,1. Do not apply #9105 or #9830 to it.
2. Do not add a `brcmfmac` unload hook for BCM4364 on this model.
3. The Wi-Fi fix is a kernel quirk (below). I plan to send it to `t2linux/linux-t2-patches`. If Omarchy wants a stopgap, it would have to ship a patched `linux-t2`, which I am not asking for.
<details>
<summary>Kernel patch: evaluate <code>_TTS(0)</code> right after <code>_WAK</code> on MacBookPro16,1 (S3 only, <code>acpi_no_early_tts=1</code> disables it)</summary>
```diff
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -105,6 +105,15 @@
EXPORT_SYMBOL_GPL(acpi_target_system_state);
static bool pwr_btn_event_pending;
+static bool apple_early_tts;
+static bool no_early_tts;
+core_param(acpi_no_early_tts, no_early_tts, bool, 0400);
+
+static int __init init_apple_early_tts(const struct dmi_system_id *d)
+{
+ apple_early_tts = true;
+ return 0;
+}
/*
* The ACPI specification wants us to save NVS memory regions during hibernation
@@ -175,6 +184,14 @@
static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
{
+ .callback = init_apple_early_tts,
+ .ident = "Apple MacBookPro16,1",
+ .matches = {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MacBookPro16,1"),
+ },
+ },
+ {
.callback = init_old_suspend_ordering,
.ident = "Abit KN9 (nForce4 variant)",
.matches = {
@@ -496,6 +513,16 @@
pr_info("Waking up from system sleep state S%d\n", acpi_state);
acpi_disable_wakeup_devices(acpi_state);
acpi_leave_sleep_state(acpi_state);
+
+ /*
+ * Apple's RP01._PS0 leaves Wi-Fi in reset while _TTS reports S3.
+ * Clear it after _WAK, before power resources and devices resume.
+ * Disable this quirk with acpi_no_early_tts=1 on the command line.
+ */
+ if (acpi_state == ACPI_STATE_S3 && apple_early_tts && !no_early_tts) {
+ acpi_sleep_tts_switch(ACPI_STATE_S0);
+ pr_info("Apple: _TTS(0) before device resume\n");
+ }
/* reset firmware waking vector */
acpi_set_waking_vector(0);
```
Based on Linux 7.2.9. The late `_TTS(0)` in `acpi_pm_end()` stays as a fallback; the firmware `_TTS` only assigns `SLTP`, so a second zero write is safe.
</details>
## Open items
- Other dGPU T2 models (15,1 / 15,3 / 16,4) are untested. #6862 and #13210 show 15,1 fails differently, so model-specific handling looks needed.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 23:12 UTC