Repository navigation
Conversation
The Broadcom Bluetooth firmware wedges across s2idle: on resume the controller stops answering HCI commands, every opcode fails with -110, and neither the bar toggle nor bluetoothctl can power it back on. Only a driver rebind clears it (omacom#338, upstream AsahiLinux/linux#604). Recover with omarchy-bluetooth-resume-fix from a service ordered after the sleep targets, mirroring how fix-wifi-resume.sh recovers the Wi-Fi half of the same chip. The command rebinds only once the tx timeout signature appears since the last suspend entry, so it stays a no-op on machines and kernels where the firmware bug does not bite. It reads from the entry marker rather than "PM: suspend exit" because the kernel logs the exit marker after device resume, behind the timeouts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
BCM4388 (14e4:5f72) wedges across resume on its own too — no rfkill involved. MacBook Pro 16" M2 Pro (t6020), Aurora kernel 7.1.12, stock So the 5f72 exclusion (and the test that asserts it) could go. Happy to test a revision on this machine. |
|
Thanks @n0mahd. The Apple Silicon packages moved to omacom/omarchy-mac-pkgs, so this is ported there as omacom/omarchy-mac-pkgs#21, with you as co-author. It also covers BCM4388 after @oliverlukschander's report above. I'll close this one when that merges. |
Port omacom/omarchy-mac#498 into the hardware package, with controller-specific journal recovery and setup that preserves administrator choices. Co-authored-by: n0mahd <39080654+n0mahd@users.noreply.github.com>
On an M2 Pro (t6020, 14e4:5f72) the controller wedged across 2 of 7 suspends with the same HCI tx timeout signature before PM: suspend exit, and reloading hci_bcm4377 brought it back, as reported in the review of omacom/omarchy-mac#498. The source PR left BCM4388 out only because its one report then was the rfkill path; this adds it to the gate, the setup tests, the README and the manual. Co-authored-by: Oliver Lukschander <33756270+oliverlukschander@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Addresses the resume half of #338 (upstream AsahiLinux/linux#604). The "Bluetooth keyboard cannot wake" half is separate and is not touched here.
Problem
On Apple Silicon Macs the Broadcom Bluetooth firmware can wedge across s2idle. After resume the controller stops answering HCI commands: the kernel logs
hci0: command 0x0c01 tx timeoutevery couple of seconds, every connect fails, and neither the bar toggle norbluetoothctl power onbrings it back. From the user's side, a device that was paired and working yesterday won't connect after the lid is opened. Only unbinding and rebindinghci_bcm4377clears it.Fix
omarchy-bluetooth-resume-fix, run by a oneshot service ordered after the sleep targets. It follows the same pattern asfix-wifi-resume.shfor the Wi-Fi half of the same chip.PM: suspend entry, so on machines and kernels where the bug doesn't happen it does nothing, and it stops acting by itself if the bug is ever fixed upstream.PM: suspend exitafter device resume, behind the timeouts, and because timeouts that get written to the journal before the service starts must still be counted.omarchy-bluetooth-powersets) and reports an unbound driver instead of guessing an address.14e4:5f69, verified) and BCM4387 (14e4:5f71, same failure reported in Clamshell s2idle: Bluetooth keyboard cannot wake; lid-open resume wedges hci_bcm4377 #338 / Bar Bluetooth toggle (rfkill) hangs BRCM4387 firmware; cannot power adapter back on #302). BCM4388 is left out on purpose: the only report for it is the rfkill path that fix(bluetooth): power off adapters via BlueZ before rfkill block to prevent PCIe driver lockup #380 handles.migrations/1789670852.shinstalls it on existing machines, and does nothing if another user on the machine already installed it.Testing
test/shell.d/bluetooth-resume-fix-test.sh, 8 cases, all pass: no timeouts leaves the controller alone, timeouts trigger a rebind, timeouts logged before the service starts are still counted, falls back when the suspend marker is missing, leaves a blocked or absent radio alone, reports an unbound driver.bin/omarchy commands --checkpasses, and everybin/omarchy-*passes its syntax check. In./test/all, the only failures are three tests that need anomarchy-pkgscheckout (package-build-contract,settings-package-units,unowned-system-paths), and they fail the same way onquattro.Not covered
A wedge that happens while the machine is awake (seen once on the same machine). This only runs after resume.
🤖 Generated with Claude Code