Skip to content

RTL8822E: close all open quirks/unknowns and produce a definitive quirks doc #238

Description

@josephnef

Goal

The RTL8822E family (WiFi-only RTL8812EU 0bda:a81a + BT-combo RTL8822EU 0bda:e822, chip-id 0x17, Jaguar3) carries several documented-but-not-root-caused quirks and untested areas. This issue tracks a systematic campaign to (a) root-cause the open ones, (b) confirm the ones we work around blindly, and (c) land a definitive docs/8822e-quirks.md so nothing about this chip is folklore.

Known quirks — root-caused vs OPEN

# Quirk Status Code
1 Path-B OFDM TXAGC (0x41e8) desenses RX — any nonzero write near-deafens the RX, value-independent, field-specific. Neutralized structurally (skip_path_b_ofdm_ref gated on _rx_wanted); cost = path-B OFDM TX pinned to table default in TX+RX. ROOT CAUSE OPEN — "suspected path-B TSSI/gain-stage asymmetry vs the kernel's" RadioManagementJaguar3.{h,cpp} (apply_power_by_rate_8822e, wr(0x41e8,…)), RtlJaguar3Device.h (_rx_wanted)
2 2.4 GHz RX-deaf without a 3-wire re-tune — BB-window RF writes don't push RF18/RXBB to the 2G analog front-end; needs the 0x1830[29]/0x4130[29] brackets. Fixed, but fragile (5 GHz survives on init defaults). fixed, needs validation RadioManagementJaguar3.cpp:172
3 2.4 GHz TX throughput anomaly — bench ch6 = 8 Mbps vs ch36 = 51 / ch149 = 47 (~6× low on 2.4 GHz). UNEXPLAINED README bench row
4 OTP/efuse only reliably readable at init (burst mode + sw-power-cut, one-shot; probe refused post-bring-up by design). by-design, document HalJaguar3.cpp (cache_efuse_8822e, efuse_pwr_cut_8822e), RtlJaguar3Device.cpp:1068
5 Retrofit RX is unreliableDEVOURER_TX_WITH_RX must be set before InitWrite; post-hoc filter re-open + enable_rx_path is unreliable. known, document + test RtlJaguar3Device.h:45
6 IQK clears the 40 MHz TX_CCK_IND bit (hardware-observed on the 8812EU) — calibration-order fix-up. fixed, verify RadioManagementJaguar3.h:204
7 The BT-combo RTL8822EU (0bda:e822) is entirely untested — all EU validation to date is the WiFi-only 8812EU. Does the combo part need the coex runtime thread the way the CU does? UNKNOWN Jaguar3Calibration.h:20, coex thread notes in CLAUDE.md

Test matrix to close the gaps

  • Small mods to build on android #1 (the big one): bisect devourer's TXAGC bring-up sequence against the vendor kernel's (tests/eu_txagc_regdiff.sh + tests/decode_txagc.py already diff 0x18e8/0x41e8). Determine whether a correct path-B TSSI/gain-stage setup lets 0x41e8 be programmed without desense — i.e. recover path-B OFDM TX power in TX+RX mode. Confirm/refute the TSSI-asymmetry hypothesis with RX-sensitivity (MDS) measurements as 0x41e8 and the path-B TSSI regs are swept.
  • Log libusb error code in rtw_read #2: validate 2.4 GHz RX across every channel switch and bandwidth (20/40/80 + 5/10 narrowband), incl. 5↔2.4 GHz band hops (tests/eu_rx_validate.sh), asserting the front-end actually re-tunes each time.
  • Fix unreadable code in logs #3: root-cause the 2.4 GHz TX shortfall — PA bias (efuse PPG_PABIAS_2G*), TXAGC reference, or the same 2G-front-end path as Log libusb error code in rtw_read #2 on the TX side. SDR duty × PHY-rate on-air (tests/bench_onair.py), compared to the vendor driver.
  • Fix build on Windows #4/Remove colored console output on Windows #5/Remove color code in logger #6: confirm behaviours and document the constraints with reproducers.
  • Devourer Experimental TX implementation #7: acquire an RTL8822EU (BT combo) and run the full matrix; determine the coex-thread requirement for the EU.
  • Board variance: repeat on ≥2 different 8812EU/8822EU boards (efuse RFE-type / PA-bias layouts differ — HalJaguar3.cpp:101 handles rfe_type 21..24).

Full per-band × per-bandwidth × RX/TX/full-duplex matrix via tests/regress.py (EU rows already present) + the on-air/SDR benches.

Deliverable

docs/8822e-quirks.md — every confirmed behaviour, each quirk marked root-caused or worked-around, the residual costs (e.g. path-B TX power in TX+RX), and the reproducers. Update the README bench row once #3 is understood.

Hardware

Reference: LB-LINK BL-M8812EU2 (0bda:a81a, WiFi-only). Needed additionally: an RTL8822EU (BT combo, 0bda:e822) and a second 8812EU/8822EU board for variance. VM per tests/setup_vm.sh for the kernel-cross-validation cells.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions