Hardware: Gigabyte X870E AORUS XTREME AI TOP (QCNCM865 module) WiFi: Qualcomm WCN7850 hw2.0 (FastConnect 7800) Status: FIXED - WiFi sees 40+ networks, Bluetooth working
The WCN7850 WiFi 7 card reports board_id 0xff (generic fallback) because the subsystem ID 105b:e0fb (Gigabyte X870E) is missing from the linux-firmware board-2.bin. This limits TX power calibration, though WiFi still achieves ~910 Mbps in practice.
ath12k_pci 0000:0d:00.0: failed to get ACPI BDF EXT: 0
ath12k_pci 0000:0d:00.0: board_id 0xff
Incorrect: Originally thought 105b:e0fb was missing from linux-firmware.
Actual Problem: The e0fb entry EXISTS in upstream board-2.bin, but in MULTIPLE groups:
- Generic
e0eegroup (wrong calibration) ← Driver finds this FIRST - Generic
e0dcgroup (also generic) e0dc,variant=QC_5mmgroup (correct calibration)
When ACPI BDF lookup fails (as it does for us), the driver searches board-2.bin WITHOUT variant, finds the generic e0ee entry first, and uses conservative TX power calibration.
Result: Low TX power (~1 dBm), can only see own mesh network, Bluetooth crashes on scan.
Modify board-2.bin to:
- Remove
e0fbfrom all generic (non-variant) groups - Add standalone
e0fbentry at position [0] pointing toQC_5mm.bincalibration data
This ensures the driver finds the correct entry first during search.
| Item | Status |
|---|---|
| WiFi Networks | 40+ detected (was: only own mesh) |
| Bluetooth | Working, stable (was: crash on scan) |
| board_id | Still 0xff (hardware-reported, expected) |
| Custom board-2.bin | Installed |
| Pacman hook | Active (survives updates) |
The fix is installed. To test:
sudo rebootAfter reboot, verify:
# Check if board_id changed from 0xff
sudo dmesg | grep -i "board_id\|ACPI BDF"
# Check subsystem ID detection
sudo dmesg | grep -i "105b:e0fb\|e0fb"| File | Description |
|---|---|
STATUS.md |
Current state and test results |
INSTALL.md |
Installation guide |
CHANGELOG.md |
Version history |
EMERGENCY-ROLLBACK.md |
Rollback procedures |
- Driver loads
board-2.binfrom/usr/lib/firmware/ath12k/WCN7850/hw2.0/ - Searches for entry matching PCI subsystem ID
105b:e0fb - Entry doesn't exist -> falls back to
board_id 0xff(generic) - Generic board uses conservative TX power (1 dBm reported)
- Extract original board-2.bin using
ath12k-bdencoder - Add entry for subsystem ID
105b:e0fb(shares calibration withe0dc) - Rebuild and install custom board-2.bin
- Create pacman hook to restore after linux-firmware updates
Project Files:
├── board-2.bin.zst # Custom firmware (source of truth)
├── board-2-fixed.json # Fixed JSON with standalone e0fb entry
├── board-2-fixed.bin # Rebuilt board-2.bin
├── fix-e0fb-entry.py # Script to fix JSON
├── board-2.json # Original extracted board data
├── qca-swiss-army-knife/ # Qualcomm tools (ath12k-bdencoder)
System Files:
├── /usr/lib/firmware/ath12k/WCN7850/hw2.0/board-2.bin.zst # Installed firmware
├── /etc/pacman.d/hooks/99-wcn7850-board-fix.hook # Pacman hook
└── /usr/local/bin/wcn7850-board-fix.sh # Restore script
Automatically restores custom board-2.bin after linux-firmware or linux-firmware-ath updates:
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = linux-firmware
Target = linux-firmware-ath
[Action]
Description = Restoring WCN7850 board-2.bin with e0fb fix...
When = PostTransaction
Exec = /usr/local/bin/wcn7850-board-fix.sh- Kernel: 6.17.8-arch1-1
- Bootloader: Limine (UKI)
- Firmware: linux-firmware 20251111-1
- PCI: 0000:0d:00.0 (17cb:1107, subsystem 105b:e0fb)
Attempted to provide board calibration hints via ACPI SSDT table. The SSDT loads at boot but the ath12k driver's ACPI lookup doesn't read _DSM from the device.
Status: SSDT loads, but driver ignores it. May require kernel patch.
Files in acpi/ directory are from this approach and remain for reference.
If board_id still shows 0xff after reboot, the entry format may need adjustment or upstream driver behavior may need investigation.
Current WiFi performance (~910 Mbps) is acceptable as fallback.
Once verified working, this fix should be submitted to linux-firmware upstream to add the 105b:e0fb subsystem ID entry for Gigabyte X870E motherboards.