fp6-vendor-blobs 1-r4: build the ath11k board data from the stock modem partition

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 (user report 2026-10-14), the FP6 happens
to. 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: calibration data is OEM data and the WLAN firmware
checks what it is given. If the base already carries the name the override
is not built and a stale one is removed. --refresh re-derives it. The
fragment re-probes ath11k as the fallback for a driver that probed before
extraction (WPSS restart, the association comes back via NetworkManager).

zstd joins the dependencies to read the compressed base. On the dev phone
the built container is byte-identical to the one hand-made from the stock
image by the reporter (sha256 186202ee...), built in 1.2 s.
This commit is contained in:
Jorijn van der Graaf 2026-10-14 17:38:55 +02:00
commit 04695c128a
Signed by: jorijnvdgraaf
GPG key ID: 2937E59CDCC1BCFB
3 changed files with 103 additions and 4 deletions

View file

@ -0,0 +1,17 @@
# 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 the FP6 Plus does not
# associate on that (user report 2026-10-14; the FP6 happens to work either
# way). 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 - calibration data is OEM data and
# the WLAN firmware verifies what it is given.
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
# Fallback for a driver that probed before extraction (the service runs
# pre-coldplug, so this normally no-ops): re-probing ath11k restarts the
# WPSS remoteproc and the firmware reads the new container; the association
# comes back through NetworkManager.
rebind platform 17110040.wifi