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:
parent
ae6e2be533
commit
011d1ccbdf
4 changed files with 50 additions and 0 deletions
15
blueline/wifi-bringup/blueline-wifi-bringup.service
Normal file
15
blueline/wifi-bringup/blueline-wifi-bringup.service
Normal 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
|
||||
19
blueline/wifi-bringup/blueline-wifi-bringup.sh
Normal file
19
blueline/wifi-bringup/blueline-wifi-bringup.sh
Normal 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
|
||||
8
blueline/wifi-bringup/blueline-wifi-defer.conf
Normal file
8
blueline/wifi-bringup/blueline-wifi-defer.conf
Normal 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
|
||||
8
blueline/wifi-bringup/blueline-wifi-mac.conf
Normal file
8
blueline/wifi-bringup/blueline-wifi-mac.conf
Normal 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
|
||||
Loading…
Reference in a new issue