Watch
1
0
Fork
You've already forked SouveraineOS
0

blueline: wifi bring-up ordering + stable MAC

WCN3990 wifi died at boot: udev autoloads ath10k_snoc before rmtfs +
tqftpserv serve the DSP firmware, the wifi firmware crashes (msa unmap
-22), the in-place retry wedges at HTT connect (-110), and no wlan
device exists for the whole boot (WIFI-HW 'missing'). Blacklist the
autoload; blueline-wifi-bringup.service loads it after those services
with a reload-on-wedge retry (a crashed WCN3990 only recovers by module
reinsert). Diagnosed and verified live on-device.

Firmware also provides no MAC, so every probe randomized it and DHCP
reservations could not hold: NM conf.d defaults wifi to
cloned-mac-address=stable (per-network, per-machine, reboot-stable).
Phone currently presents 02:42:c2:03:26:47 on Samaritan Solutions —
update the router reservation to that once.
This commit is contained in:
Fimeg 2026-07-20 21:50:19 -04:00
commit 011d1ccbdf
4 changed files with 50 additions and 0 deletions

View file

@ -0,0 +1,15 @@
[Unit]
Description=WCN3990 wifi bring-up after DSP firmware services
# See blueline-wifi-defer.conf: ath10k_snoc is blacklisted from udev
# autoload because probing before rmtfs + tqftpserv serve the DSP firmware
# crashes the wifi firmware and wedges the driver for the whole boot.
After=rmtfs.service tqftpserv.service
Wants=rmtfs.service tqftpserv.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/blueline-wifi-bringup.sh
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,19 @@
#!/bin/sh
# Load ath10k_snoc once the DSP firmware path is ready, and recover a
# crashed WCN3990 by full module reload — after a firmware crash the driver
# does not recover in place (HTT connect times out until reinsert).
set -u
for attempt in 1 2 3; do
modprobe ath10k_snoc
i=0
while [ $i -lt 15 ]; do
[ -n "$(ls /sys/class/ieee80211/ 2>/dev/null)" ] && exit 0
sleep 1
i=$((i + 1))
done
echo "wifi attempt $attempt: no ieee80211 device, reloading module" >&2
modprobe -r ath10k_snoc 2>/dev/null
sleep 2
done
echo "wifi bring-up failed after 3 attempts" >&2
exit 1

View file

@ -0,0 +1,8 @@
# WCN3990 (ath10k_snoc) must not probe before the DSP firmware path is
# serving: its firmware loads wlanmdsp.mbn via tqftpserv and board data via
# rmtfs. When udev coldplug loads the module early, the firmware crashes
# ("failed to unmap msa permissions: -22"), the retry wedges at HTT connect
# (-110), and no wlan device ever registers. Blacklisting only disables the
# udev alias autoload; blueline-wifi-bringup.service modprobes it explicitly
# once the services are up.
blacklist ath10k_snoc

View file

@ -0,0 +1,8 @@
# WCN3990 firmware provides no MAC ("invalid MAC address; choosing random"),
# so every probe gets a fresh random hardware address and DHCP reservations
# never hold. Derive a stable per-connection MAC (hashed from machine-id +
# SSID) so the phone presents the same address to the same network across
# reboots. Update router reservations to the MAC this yields once.
[connection-blueline-wifi-mac]
match-device=type:wifi
wifi.cloned-mac-address=stable