Changing ath10k firmware on Netgear r7800?

tldr:

How painless is the process to disable/remove the default wifi firmware and install the alternative firmware? Will my config, SSIDs, passwords etc carry over?

old title: Netgear R7800 wifi dropping on Android and iOS (IPQ8065/QCA9984)
21.02.3:
My brother has been reporting wifi drops on his iPhone SE 2 for months. I recently moved to a (possibly defective) Pixel 3a (running LineageOS) and now I have that issue also. It's very common, maybe once an hour. Wifi disconnects and takes 20+ seconds to reconnect.

Has anyone experienced wifi issues on r7800?

Speculative user observation, possibly related only to some client devices: Starting with OpenWrt version 21.02.1, newer versions of the board firmware (ath10k-firmware-qca9984-ct) may have bugs from Candela Technologies (who have been trying to remedy them), which causes 5 GHz wifi to die at random with “disassociated due to low inactivity” in logread, even if there's an active 5 GHz connection (say, a laptop watching youtube). The solution to this is to use ath10k-firmware-qca9984 instead.

I see this:

root@OpenWrt:~# logread | grep activity
Thu Jun 23 14:36:04 2022 daemon.info hostapd: wlan0-1: STA ce:d9:[snip] IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)

This is after a fresh reboot, I think I saw more before.

Looks like I can install from opkg:

ath10k-firmware-qca9984

How painless is the process to disable/remove the default wifi firmware and install the alternative firmware? Will my config, SSIDs, passwords etc carry over?

This post. Your configs are in /etc/config/wireless - you should not need to change anything unless you've done changes specific to the ct driver and firmware. You need to change the driver and firmware. Be careful about changing the driver, it needs to match the kernel build exactly - opkg should warn you if there are issues.

As to how painless, I won't feel a thing. You likely won't either if you do this while connected to your device using a wire - don't try it over the wifi.

It's easy via the web interface luci ... System ---> software; or opkg ...

... And painless - in sequential steps I remove:
ath10k-firmware-qca9984-ct
kmod-ath10k-ct

... Install the non -ct -named counterparts, and reboot.
Finished.

I have a R7800 and apparently the releases beyond 21.02.1 have wifi connectivity and stuttering issues.

I started with 21.02.3, reverted to 21.02.1 because it's the last release which uses the round-robin packet scheduler ... Subsequent development has broken AQL and that neighborhood of features. The matrix of features and options may be significantly confounding this debug process.

My rc.local file may help you also as it tunes the CPU clocking for performance and disables airtime fairness ... Simplifying things a bit:

# the system init finished. By default this file does nothing.


# min scaling frequency: set to 800MHz because of L2 cache issues
echo 800000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpufreq/policy1/scaling_min_freq
sleep 1

# performance governor
echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo performance > /sys/devices/system/cpu/cpufreq/policy1/scaling_governor
# Reset stats
echo 1 > /sys/devices/system/cpu/cpufreq/policy0/stats/reset
echo 1 > /sys/devices/system/cpu/cpufreq/policy1/stats/reset

# Disable Airtime Fairness (ATF) (default 3)
echo 0 > /sys/kernel/debug/ieee80211/phy0/airtime_flags
echo 0 > /sys/kernel/debug/ieee80211/phy1/airtime_flags

exit 0
1 Like

Thanks.

AQL is Airtime-based Queue Limit.

http://flent-newark.bufferbloat.net/~d/Airtime%20based%20queue%20limit%20for%20FQ_CoDel%20in%20wireless%20interface.pdf

https://lwn.net/Articles/802110/

I left "remove unused dependencies" checked in the webUI. that was a mistake. it seemed to remove my SQM config. (Or that's from upgrading to the next stable point release of Openwrt). Luckily I reinstalled sqm -lucl and it saw my config and everything seems to work as before.

Simplifying things a bit:

You mean it simplifies debugging, or the config is simplified from your full config? Some of these I was already doing, but again it seems I lost this config in the upgrade.

I think I'll stick on latest stable until the next major stable is out. This will become a family router in a few months anyway.

My r7800 is my main router and I don't want to turn it into a science project - I want to be a user.

But with 35yrs of embedded systems & Linux work behind me, I'm reading R7800 threads going back a year about network stuttering and wifi connectivity issues - and following my hunches as to what feature help, and which to avoid for stable operation.

I.e. I'm listening to the developers and following my nose.

I'm really not trying to throw rocks at the excellent developers and their work here - I just want to use my r7800 and maybe tune it as I have - but for now I'm bypassing some of the features as they, other bits, and/or evil spirits seem to make releases beyond 21.02.1 problematic for this router.

As I try stuff and test what works or doesn't, my configuration will change.

Mmmv,
M.

1 Like

Yeah we're on the same wavelength. I'm running your rc.local. I bought the r7800 because it seemed to be popular (= supported).

You may consider throwing irq_balance package into the mix - it seems to have made things more responsive for me - snappier is the word I'd use.

Fwiw, every time you upload a release.zip your configuration should be saved, but may have to reload any packages you added. If that's an option in luci I haven't found it yet.

One mo thing about that rc.local: I fixed a typo in it after first posting it ... I think it's right now.