The device tree asks ath11k for the Fairphone_Gen_6 board data entry. Upstream linux-firmware's WCN6750 board-2.bin has no Fairphone entry, so the driver silently falls back to the generic board-id 255 data: the FP6 Plus does not associate on it at all (user report 2026-10-14), and the FP6 keeps its channel list but its scans no longer find the 5 GHz networks around it (two scans found 0 and 1 5 GHz BSSes against 14 with the device's data, the home AP at -37 dBm among the missing), so it associates on 2.4 GHz only (dev phone A/B). The stock modem partition carries the device's own calibration as image/qca6750/bdwlan.elf. New manifest directive ath11k-bdf: copy that ELF and wrap it into a container under /lib/firmware/updates (searched first by the loader) that is upstream's board-2.bin with every entry kept plus one BOARD entry under the requested name. Verified structurally (ELF magic, size, the container magic), no hash pin: the ELF belongs to the stock modem image and can change with it. The sha256 of the base is kept beside the override: a changed base (a linux-firmware upgrade) rebuilds it at the next run, and a rebuild that reproduces the existing file installs nothing; an entry upstream ships under the same name is taken first by the driver, so the appended copy then goes unused. The fragment has no rebind line: the service is ordered before udev's coldplug, which loads the driver, so a fresh install builds the container before the first probe (dev phone, the override removed and rebooted: built at 7.2 s, coldplug from 7.3 s, the driver's board-data load at 8.7 s, the first association on 5 GHz), and an installed phone gets it at its next boot; a re-probe from a package hook would restart wifi in the middle of the upgrade. zstd joins the dependencies to read the compressed base. Dev phone: the built container is byte-identical to the one hand-made from the stock image by the reporter (sha256 186202ee...); the hook's call with the override absent built it over a wifi session that stayed up, a second call installed nothing and a --refresh call left the container unchanged.
17 lines
1.3 KiB
Text
17 lines
1.3 KiB
Text
# WCN6750 WLAN board data (calibration, Qualcomm/Fairphone) - taken from the
|
|
# stock modem partition on-device instead of being shipped (fp6 repo
|
|
# journal/base/ 2026-10-14, journal/blobs/). The device tree asks ath11k for
|
|
# the Fairphone_Gen_6 entry; upstream linux-firmware's board-2.bin has none,
|
|
# the driver silently falls back to generic data, and on that the FP6 Plus
|
|
# does not associate at all (user report 2026-10-14) while the FP6's scans
|
|
# no longer find the 5 GHz networks around it, so it associates on 2.4 GHz
|
|
# only (dev phone A/B 2026-11-01). The container built here is upstream's
|
|
# file with every entry kept plus the device's own bdwlan.elf under the
|
|
# requested name; it lives in /lib/firmware/updates, which the loader
|
|
# searches first. Active slot first, the other slot as fallback; no hash pin
|
|
# - the ELF belongs to the stock modem image and can change with it. No
|
|
# rebind line: the service runs before the driver loads, so a fresh install
|
|
# has the container at the first probe and an installed phone gets it at
|
|
# its next boot - a re-probe from a package hook would restart wifi in the
|
|
# middle of an upgrade.
|
|
ath11k-bdf modem_a,modem_b image/qca6750/bdwlan.elf bus=ahb,qmi-chip-id=1,qmi-board-id=255,variant=Fairphone_Gen_6 /usr/lib/firmware/ath11k/WCN6750/hw1.0/board-2.bin.zst /usr/lib/firmware/updates/ath11k/WCN6750/hw1.0/board-2.bin
|