Repository navigation
Bluetooth (hci_bcm4377) refuses to power on: "Failed (0x03)" Hardware Failure, no timeout, no kernel error #23
Description
Bluetooth (hci_bcm4377) refuses to power on: "Failed (0x03)" Hardware Failure, no timeout, no kernel error
Summary
On a MacBookPro15,4 (13" 2019, 2x TB), the Bluetooth controller (hci_bcm4377, BCM4377B3 "formosa") probes cleanly on every boot with no -110/timeout errors, but any attempt to power it on — via bluetoothctl power on, a desktop toolbar applet, or rfkill unblock — is immediately refused by the firmware with an explicit Failed (0x03) (Bluetooth HCI "Hardware Failure") status. No kernel-level error accompanies this response; bluetoothd just reports the refusal.
This is fully reproducible across multiple clean reboots, and reproduces identically whether or not any third-party Bluetooth software is installed (see "Ruling out third-party software" below).
Hardware
- Model: MacBookPro15,4 (
Mac-53FDB3D8DB8CA971) - BIOS/EFI: 2094.80.5.0.0 (iBridge 23.16.13120.0.0,0)
- Bluetooth/WiFi combo chip: Broadcom BCM4377 (PCI
14e4:5fa0, function0000:01:00.1), firmware variantbrcm/brcmbt4377b3-apple,formosa - WiFi (
brcmfmac, same combo chip, function0000:01:00.0) works correctly — connects normally, no errors. This isolates the problem to the Bluetooth function specifically, not the whole chip/firmware load path.
Software
- Distro: Omarchy 4.0.1 (Arch-based)
- Kernel:
7.1.8-arch1-Watanare-T2-3-t2(packagelinux-t2 7.1.8.arch1-3) bluez 5.87-2apple-bcm-firmware 14.0-1
Steps to reproduce
- Cold boot (not resume from suspend/hibernate).
bluetoothctl show— controller is present with a valid public address, butPowered: no.bluetoothctl power on
Expected
Controller powers on (Powered: yes).
Actual
[CHG] Controller A4:83:E7:86:03:AF PowerState: off-enabling
Failed to set power on: org.bluez.Error.Failed
[CHG] Controller A4:83:E7:86:03:AF PowerState: on
bluetoothd[...]: Failed to set mode: Failed (0x03)
bluetoothctl show afterward still reports Powered: no.
Checked in parallel with journalctl -k --since <attempt window>: no kernel-level message is logged for this specific failure — no timeout, no opcode failure, nothing. The refusal appears to originate from the controller's own firmware response to the MGMT power-on request, not from a driver/comms-layer error.
Boot-time kernel log (clean, no timeouts)
Bluetooth: Core ver 2.22
NET: Registered PF_BLUETOOTH protocol family
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
hci_bcm4377 0000:01:00.1: can't disable ASPM; OS doesn't have ASPM control
hci_bcm4377 0000:01:00.1: resetting
hci_bcm4377 0000:01:00.1: reset done
hci_bcm4377 0000:01:00.1: enabling device (0000 -> 0002)
brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac4377b3-pcie for chip BCM4377/4
brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4377/4 wl0: Jul 8 2023 00:34:19 version 16.20.371.0.3.6.125 FWID 01-52f5532e
hci_bcm4377 0000:01:00.1: failed to destroy transfer ring 6
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: BNEP socket layer initialized
Bluetooth: MGMT ver 1.23
hci_bcm4377 0000:01:00.1: failed to destroy transfer ring 5
hci_bcm4377 0000:01:00.1: failed to destroy transfer ring 4
hci_bcm4377 0000:01:00.1: failed to destroy transfer ring 3
hci_bcm4377 0000:01:00.1: failed to destroy transfer ring 2
hci_bcm4377 0000:01:00.1: failed to destroy transfer ring 1
hci_bcm4377 0000:01:00.1: failed to destroy completion ring 4
hci_bcm4377 0000:01:00.1: failed to destroy completion ring 3
hci_bcm4377 0000:01:00.1: failed to destroy completion ring 2
hci_bcm4377 0000:01:00.1: failed to destroy completion ring 1
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Note the repeated failed to destroy transfer/completion ring N lines during every single boot's bring-up (not just after a reset/reload) — happens before the controller has ever been asked to power on. Not sure if this is benign or related to the later power-on refusal; flagging it since it's consistent and unusual.
/sys/class/bluetooth/hci0 exists and /sys/bus/pci/devices/0000:01:00.1/enable reads 1, so the PCI function is bound and the driver considers itself attached — this is not a probe failure or an unbound device. rfkill list shows Bluetooth soft/hard blocked: no.
Ruling out third-party software
This machine had blueferry (an iPhone↔Linux Bluetooth bridge, packages blueferry-backend/-gtk/-qt/-quickshell) installed, which ships a bluetooth.service.d drop-in that adds -E to bluetoothd's ExecStart. The exact same Failed (0x03) power-on refusal was observed:
- Before installing blueferry
- While blueferry's drop-in was active
- After fully uninstalling blueferry (
pacman -Rns) and removing the drop-in, confirmed viasystemctl status bluetooth.serviceshowing no active drop-ins andbluetoothdrunning with its stockExecStart(no-E)
So this is not caused by blueferry or any Bluetooth-adjacent userspace package — it reproduces on a stock bluetoothd/BlueZ setup.
Possibly related but distinct
I found two other recent open issues against the same kernel build (7.1.8-arch1-Watanare-T2-3-t2) but a different board (MacBookPro15,2, Mac-827FB448E656EC26): #22 / t2linux/wiki#746, describing t2bce_vhci desync/timeout and GPF crashes after hibernate resume, plus "malformed Bluetooth advertising packets." Those reproduce only after hibernation; this issue reproduces on a cold boot, has no t2bce_vhci involvement, and the Bluetooth controller returns a clean, immediate HCI error status rather than timing out. Flagging the overlap in case it's a related regression, but treating it as a separate report since the trigger and symptom differ.
Ask
Has anyone seen the BCM4377B3 "formosa" variant specifically return Failed (0x03) on power-on with no accompanying kernel/timeout error? Happy to gather a btmon HCI trace of the power-on attempt if that would help narrow this down — didn't have root/TTY access to capture one for this report.
Activity
polarplatypus9090-sudo commentedon Aug 28, 2026
Update: tried
pcie_aspm=force, ruled out as a fixGiven the driver's own
can't disable ASPM; OS doesn't have ASPM controlmessage on boot, and the upstream commit converting ASPM-disable to a required quirk for this chip, I tried forcing OS ASPM control via the kernel parameterpcie_aspm=force.Effect on boot log: the
can't disable ASPMline disappeared, and a plainbluetoothctl power onsucceeded (Powered: yes) without theFailed (0x03)refusal from the original report.But real use is still broken. The moment any actual command traffic is needed — e.g. starting a scan to pair a device — the same class of failure returns:
repeating every ~2s while
scan onwas active.bluetoothdeventually gave up on the D-Bus call itself:and the controller reverted to
Powered: noon its own afterward.Also worth noting: on two earlier boots (before trying
pcie_aspm=force), the boot-time log had zero-110/timeout entries at all, then this most recent boot (with the parameter applied) had them again. So the presence/absence of these command timeouts looks intermittent across boots independent of the ASPM setting —pcie_aspm=forcechanged the boot-time symptom signature but doesn't appear to address the actual root cause, and I can't confirm it helps at all now that I've seen it fail under real use.Net: still unable to actually pair/use Bluetooth on this machine. Leaving
pcie_aspm=forcein place since it's harmless, but flagging that it should not be assumed to be a working workaround for this issue.ReneXiong commentedon Sep 10, 2026
Update: recovered with PCI function reset followed by explicit driver bind
I reproduced this again on a MacBookPro15,4 (13-inch, 2019, Intel Core i5), now with the following software/firmware.
MacBookPro15,4is Apple's model identifier, not the screen size:linux-t2 7.2.3.arch1-2(7.2.3-arch1-Watanare-T2-2-t2)bluez 5.87-2,bluez-utils 5.87-2apple-bcm-firmware 14.0-1t2bcestack (t2bce_core,t2bce_vhci, andt2bce_audioloaded)2103.160.2.0.0, iBridge23.16.16068.0.0,0This boot showed a stronger failure mode than the original report. Immediately after the driver's initial
reset done, HCI commands repeatedly timed out:A normal module unload/reload did not recover it. Unload produced timeouts while destroying transfer/completion rings, and the subsequent probe failed:
At that point the module was loaded but the PCI function was unbound. The following sequence recovered the controller:
After the explicit bind:
lspci -nnk -s 01:00.1reportedKernel driver in use: hci_bcm4377.I installed a local boot-time oneshot workaround that first tries the BlueZ
PoweredD-Bus property and only performs unbind -> PCI function reset -> bind if that operation fails. The manual recovery path above has been verified once so far; I have not yet completed a multi-cold-boot test matrix.This may help narrow the issue: the probe path already attempts a function-level reset internally, but in this failure state an explicit reset while unbound, followed by a fresh bind, succeeded where a normal module reload did not.