Summary
devourer drives the RTL8814AU's 5 GHz TX at far too low power. On-air throughput is ~1.5 Mbps where the in-tree rtw88_8814au kernel driver gets ~58 Mbps from the same dongle on the same channel. The chip's PA is healthy — devourer computes the 8814's per-rate 5 GHz TXAGC power index far too low.
This is distinct from the USB Vbus-sag / power-delivery effect seen on the 8812/8821 under load — this one reproduces on a fresh rail and is a TX-power calculation bug.
Evidence
Measured with a USRP B210 (tests/sdr_duty.py, channel-occupancy → on-air Mbps), ch36 / 5180 MHz, HT MCS7 / 20 MHz, 1500 B payload, identical conditions:
| Driver / mode |
duty |
on-air |
| devourer (normal power calc) |
1.9–2.2 % |
1.2–1.5 Mbps |
kernel rtw88_8814au (inject) |
89.8 % |
58.4 Mbps |
devourer + DEVOURER_TX_PWR_START=63 (force max TXAGC index) |
70.9 % |
46.1 Mbps |
Forcing the TXAGC index to max rescues devourer to ~46 Mbps (≈ the kernel's 58). So:
- The PA / RF hardware is fine (kernel drives it to 58 Mbps; forced-max devourer hits 46).
- devourer's normal per-rate 5 GHz TX-power index for the 8814 is drastically too low.
A monitor sniffer decodes devourer's frames fine (sensitive receiver), which is why a frame-count metric hides this — the energy/throughput metric is what exposes it.
Likely location
PHY_SetTxPowerIndex_8814A / PHY_SetTxPowerLevel8814 in src/RadioManagementModule.cpp (~L1836–2011) — the 8814 5 GHz EFUSE power-by-rate / per-Ntx diff computation. Relevant prior commits: f3b8c8c (5G EFUSE PG diff-block layout), b3929ef (per-Ntx TX-power diffs cumulative over rate ranges), c9394a4 (drop 8812 TX-power-training for 8814).
Also check
- 2.4 GHz: the 8814 is also weak there (~20 Mbps vs 8812's ~52). May be the same under-drive on both bands.
- Compare the actual TXAGC index devourer programs per rate against the kernel's
PHY_GetTxPowerIndex_8814A for a 5 GHz channel — the diff should pinpoint the bad term (base power vs per-Ntx diff vs PG-block layout).
Reproduce
# devourer (weak):
sudo env DEVOURER_PID=0x8813 DEVOURER_CHANNEL=36 DEVOURER_TX_HT_MCS=1 \
DEVOURER_TX_MCS=7 DEVOURER_TX_GAP_US=0 ./build/WiFiDriverTxDemo
sudo python3 tests/sdr_duty.py --freq 5180e6 --secs 3 --mcs 7 --bw 20 --noise-db -62
# -> ~2% duty, ~1.5 Mbps
# force max TXAGC index (rescues it):
sudo env DEVOURER_PID=0x8813 DEVOURER_CHANNEL=36 DEVOURER_TX_HT_MCS=1 \
DEVOURER_TX_MCS=7 DEVOURER_TX_GAP_US=0 DEVOURER_TX_PWR_START=63 ./build/WiFiDriverTxDemo
# -> ~71% duty, ~46 Mbps
# kernel control (reg US so 5 GHz TX isn't regulatory-blocked):
sudo iw reg set US
# rtw88_8814au monitor on ch36, inject_beacon --max-rate --mcs 7 --size 1500
# -> ~90% duty, ~58 Mbps
Hardware: RTL8814AU 0bda:8813 (COMFAST CF-938AC), USRP B210 2500:0020, host kernel 6.18.
Summary
devourer drives the RTL8814AU's 5 GHz TX at far too low power. On-air throughput is ~1.5 Mbps where the in-tree
rtw88_8814aukernel driver gets ~58 Mbps from the same dongle on the same channel. The chip's PA is healthy — devourer computes the 8814's per-rate 5 GHz TXAGC power index far too low.This is distinct from the USB Vbus-sag / power-delivery effect seen on the 8812/8821 under load — this one reproduces on a fresh rail and is a TX-power calculation bug.
Evidence
Measured with a USRP B210 (
tests/sdr_duty.py, channel-occupancy → on-air Mbps), ch36 / 5180 MHz, HT MCS7 / 20 MHz, 1500 B payload, identical conditions:rtw88_8814au(inject)DEVOURER_TX_PWR_START=63(force max TXAGC index)Forcing the TXAGC index to max rescues devourer to ~46 Mbps (≈ the kernel's 58). So:
A monitor sniffer decodes devourer's frames fine (sensitive receiver), which is why a frame-count metric hides this — the energy/throughput metric is what exposes it.
Likely location
PHY_SetTxPowerIndex_8814A/PHY_SetTxPowerLevel8814insrc/RadioManagementModule.cpp(~L1836–2011) — the 8814 5 GHz EFUSE power-by-rate / per-Ntx diff computation. Relevant prior commits:f3b8c8c(5G EFUSE PG diff-block layout),b3929ef(per-Ntx TX-power diffs cumulative over rate ranges),c9394a4(drop 8812 TX-power-training for 8814).Also check
PHY_GetTxPowerIndex_8814Afor a 5 GHz channel — the diff should pinpoint the bad term (base power vs per-Ntx diff vs PG-block layout).Reproduce
Hardware: RTL8814AU
0bda:8813(COMFAST CF-938AC), USRP B2102500:0020, host kernel 6.18.