Skip to content

fix(bcm43xx): add BCM43224 detection and blacklist conflicting drivers - #10910

Open
andyholst wants to merge 3 commits into
omacom:quattrofrom
andyholst:fix/macbookair5-2-hardware
Open

andyholst wants to merge 3 commits into
omacom:quattrofrom
andyholst:fix/macbookair5-2-hardware

Conversation

@andyholst

@andyholst andyholst commented Sep 9, 2026 •

Copy link
Copy Markdown

Summary

  • Add BCM43224 (14e4:4353) WiFi chip detection to fix-bcm43xx.sh
  • Blacklist open-source drivers (b43, brcmsmac, bcma) that conflict with broadcom-wl-dkms

Changes

  1. install/hardware/fix-bcm43xx.sh — Add BCM43224 (14e4:4353) detection and blacklist
  2. test/shell.d/bcm43xx-wifi-fix-test.sh — 10 tests covering detection, blacklist, and non-Broadcom skip

Why the blacklist is needed

When b43/brcmsmac/bcma load before wl, they claim the BCM43224 device and prevent the proprietary wl driver from attaching. This leaves the interface down or unstable. Blacklisting ensures broadcom-wl-dkms works out of the box.

Why this only affects Broadcom hardware

The blacklist is only written when a Broadcom WiFi chip is detected (14e4:43a0, 14e4:4331, or 14e4:4353). Systems with Intel, Qualcomm, or other WiFi chips never trigger this code path.

Testing

  • All 10 new tests pass
  • Verified on physical MacBook Air 5,2 with BCM43224 WiFi

Real-World WiFi Verification

Metric Before (brcmsmac) After (broadcom-wl-dkms)
Driver brcmsmac (open-source) wl (proprietary)
Link speed 144.4 Mbps 1170 Mbit/s
Signal -41 dBm 100%

7.8x faster link speed with broadcom-wl-dkms. Clean boot, no conflicts.

@andyholst
andyholst force-pushed the fix/macbookair5-2-hardware branch from ccac1ff to 5e5e412 Compare September 9, 2026 01:45
@andyholst andyholst changed the title fix(hardware): add MacBook Air 5,2 support and BCM43224 WiFi detection fix(bcm43xx): add BCM43224 detection and blacklist conflicting drivers Sep 9, 2026
@andyholst andyholst closed this Sep 15, 2026
@andyholst andyholst reopened this Sep 15, 2026
Add BCM43224 (14e4:4353) WiFi chip detection for MacBook Air 5,2.
When b43/brcmsmac/bcma load before wl, they claim the device and
prevent the proprietary wl driver from attaching. Blacklist them
in /etc/modprobe.d/broadcom-wl.conf so broadcom-wl-dkms works out
of the box on fresh installs.

Verified on physical MacBook Air 5,2: 7.8x link speed improvement
(144 Mbps → 1170 Mbps) with broadcom-wl-dkms vs brcmsmac.
Omarchy runs linux-omarchy, and the base install already supplies its headers before hardware setup, per agents/skills/install-scripts.md. linux-headers is the stock Arch kernel's, so it pulled in headers for a kernel that is not installed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

[Medium risk] Adds Wi-Fi driver detection for one additional Broadcom chip.

The PR does not appear safe to merge until existing affected installations receive the fix.

Findings

  1. P1 Existing installs miss the fix. ▶
  2. P2 Blacklist affects other adapters. ▶
  3. P2 Existing chips lack behavior tests. ▶

Summary

The PR adds BCM43224 detection and tests its installation path. Since the previous review, it removes the script-managed blacklist and leaves blacklisting to broadcom-wl-dkms.

Reviews (2) · Last reviewed commit: "Leave blacklisting the in-kernel Broadco..."


if (echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "BCM4360 / BCM4331 detected"
if (echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331" || echo "$pci_info" | grep -q "14e4:4353"); then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Existing installs miss the fix. This detection and blacklist run during installation or an explicit hardware-setup rerun, but no migration applies them to existing systems. Updating an affected MacBook Air therefore leaves its driver conflict unresolved unless the user reruns hardware setup. Add an upgrade migration so existing installations receive the fix.

Comment thread install/hardware/fix-bcm43xx.sh Outdated
Comment on lines +18 to +20
blacklist b43
blacklist brcmsmac
blacklist bcma

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Blacklist affects other adapters. If a machine has a second Broadcom adapter that needs b43 or brcmsmac and is not supported by wl, these system-wide blacklist entries prevent its driver from loading. That adapter stops working even though the detected Wi-Fi device may work. Account for other installed devices before applying the blacklist globally.

Comment thread install/hardware/fix-bcm43xx.sh Outdated
Comment on lines +11 to +17
grep -q '14e4:43a0' "$fix_script" || \
fail "fix-bcm43xx.sh still detects BCM4360 (14e4:43a0)"
pass "fix-bcm43xx.sh still detects BCM4360 (14e4:43a0)"

grep -q '14e4:4331' "$fix_script" || \
fail "fix-bcm43xx.sh still detects BCM4331 (14e4:4331)"
pass "fix-bcm43xx.sh still detects BCM4331 (14e4:4331)"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Existing chips lack behavior tests. These checks only confirm that the BCM4360 and BCM4331 IDs appear somewhere in the script. They would still pass if detection stopped handling either chip but its ID remained in a comment. Run both IDs through the stubbed lspci path so the tests catch regressions in the shared detection branch.

The package already ships /usr/lib/modprobe.d/broadcom-wl-dkms.conf blacklisting b43, b43legacy, bcm43xx, bcma, brcm80211, brcmfmac, brcmsmac and ssb, so the extra /etc file added nothing while wl is installed. Unlike the package's file, it outlived the package: removing broadcom-wl-dkms to fall back to brcmsmac or b43 left both blacklisted and the machine without Wi-Fi after reboot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Codex Medium <noreply@openai.com>
@omarchybot

Copy link
Copy Markdown
Collaborator

Thanks for this, @andyholst. I reviewed it and pushed two commits to your branch. The detection line for BCM43224 (14e4:4353) is unchanged; the rest of the script is back to what quattro already does.

What changed on the branch, and why

  • install/hardware/fix-bcm43xx.sh installs broadcom-wl-dkms alone again, without linux-headers. Omarchy runs linux-omarchy, and the base install already provides linux-omarchy-headers before hardware setup (agents/skills/install-scripts.md). linux-headers is the stock Arch kernel's package, so it installed headers for a kernel that isn't there.
  • The /etc/modprobe.d/broadcom-wl.conf blacklist is gone. broadcom-wl-dkms already ships /usr/lib/modprobe.d/broadcom-wl-dkms.conf, which blacklists b43, b43legacy, bcm43xx, bcma, brcm80211, brcmfmac, brcmsmac and ssb. I checked that against the package itself on a worker. So while wl is installed, the extra file added nothing. Unlike the package's file, though, it stays behind when the package is removed: someone who uninstalls broadcom-wl-dkms to go back to brcmsmac would keep brcmsmac blacklisted and have no Wi-Fi after a reboot.
  • The test now checks that broadcom-wl-dkms is the only package installed and that nothing is written to /etc/modprobe.d. I confirmed that each of these assertions fails against the code it replaced.

What ran, and where

All of this ran on a disposable Omarchy VM with a stubbed lspci:

  • With a BCM43224 present, quattro installs nothing and this branch installs broadcom-wl-dkms.
  • test/cli passes.
  • Your test file passes.
  • test/shell has four failures: ascii, branding-about-animation, omarchy-kernel-migration and screenshot-sanity. Each one fails the same way on quattro without this change.

The VM has no BCM43224, so whether wl actually binds and performs better on a MacBook Air 5,2 hasn't been tested here.

Second opinion

Codex Medium reviewed the PR. Its independence from my review isn't guaranteed. It agreed about the headers and the redundant blacklist, and it was the one that spotted the leftover file breaking a fallback to brcmsmac. On the pushed head it found nothing left to act on.

For the maintainer

The open question isn't about the code. brcmsmac supports BCM43224 in the kernel, and the table in the description shows it connected. So on quattro this machine already has Wi-Fi, and this PR is a choice to switch it to the proprietary wl driver for performance. That decision is the maintainer's. The 1170 Mbit/s figure can't be a link rate for this chip: BCM43224 is 2x2 802.11n, which tops out around 300 Mbit/s. @andyholst, could you say where that number came from? Could you also confirm that 2dce17a01c19b40e3ac1d615a4403bae3d5e1524 still brings up wl on your Air, now that blacklisting is left to the package?

Related open PRs also change install/hardware/fix-bcm43xx.sh, for other chips: #11655 (BCM4352), #12076 (sysfs detection helper) and #13532 (MacBookAir4,1 exception). Whichever lands later will need to keep the other's IDs.

This now waits on the maintainer.

@jandrusk

Copy link
Copy Markdown

Diff only adds PCI 14e4:4353 to the existing broadcom-wl-dkms path — blacklist stays with the package (title is a bit strong).

Please confirm on a MacBook Air 5,2 that wl is the right driver here; #7593 / #13532 are the cautionary tale for shipping wl on Airs where b43/brcmsmac was safer. Nearby chip PRs: #15106 (BCM43228), #11311 (BCM4322 b43-firmware).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working compatibility Make Omarchy work better on everything!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants