Repository navigation
kestrel: 8852C TX path selection from P-MAC (dead ACK bring-ups) - #492
agustinglez wants to merge 2 commits into
Conversation
Some 8852C bring-ups armed the ACK responder, read the entry back, and answered no ACK for the whole session (OpenIPC#490). The chip built the ACK, but the TX path selection the MAC attached to it was garbage in those bring-ups: it enabled a path this 2T2R die does not have, or mapped path A off the signal, so no antenna sent it. The selection comes from MAC state nothing initialises, which is why it changed per bring-up. The halbb glue now follows the T-MAC path routing at bring-up with halbb_ctrl_tx_path_pmac_8852c(RF_PATH_AB): the BB takes the path enable and the path A/B maps from its own P-MAC registers (0x09a4 [4:2]), paths A+B with A on IFFT 0 and B on IFFT 1, plus the vendor's per-path TSSI reset pulse. 8852C only; the switch applies to every PPDU. - ack_responder_ok is true on the 8852C as well (still an explicit list of measured variants). - docs/kestrel-ack-responder.md: the dead-bring-up section now gives the cause, how it was found (the TX-info debug port, decoded with the BB's INTF_TXINFO layout), what was ruled out, and the fix's numbers. Measured (TX50UH responder, TX20U Nano soliciting, ch161, MCS1, 8 s per session): before, 3 of 12, 6 of 15 and 4 of 30 sessions dead (the last on master with OpenIPC#491); the map-A-1 selection died 10 of 10 times. After, 0 dead of 123 armed sessions across the register-level override and this vendor call (30 of them on this exact code), 15 of them with the bad selection, all 96.8-100%; solicitor across a live disarm 3791/3845 then 0/1602 and 3829/3843 then 0/1639; never armed 0/1591. Second bench: 0 of 20 on ch6 and ch161, both units. One-stream injection unchanged (MCS1 and 6M ~1900/2000 to the 8852B, ch6 and ch161 with carrier sense on). Two- stream injection from the 8852C does not decode with or without this, so its effect there is not measured.
PR Summary by QodoFix intermittent 8852C ACK loss by selecting TX paths from P-MAC
AI Description
Diagram
High-Level Assessment
Files changed (7)
|
Code Review by Qodo
1. The cause lacks comparison evidence
|
…heck Review follow-up on the OpenIPC#490 requirements: - AdapterCaps.h and the doc give the date and time window of every responder series (the dead rate drifts through a day, OpenIPC#490 item 4). The 4-of-30 series without the fix ran between series with it, so the difference is not the time of day. - The doc states that OpenIPC#490's suggested experiments (firmware RAM dump of dead against good sessions, vendor-driver A/B on the same unit) were not run, and what the attribution rests on instead. - The injection numbers are scoped as a before/after check of this change on the same build, not an absolute 5 GHz TX figure; the vendor-driver injection A/B of OpenIPC#490 item 2 was not run.
Fixes the dead ACK bring-ups on the 8852C (item 1 of #490).
In short
Some 8852C bring-ups armed the hardware ACK responder and then answered no ACK for the whole session. The chip did build the ACK, but every frame also carries a selection of which transmit antenna paths to use, and the one the MAC attached to the ACK was garbage in those bring-ups: it enabled a path this 2T2R chip does not have, or wired path A to the wrong signal, so no antenna sent it. The selection comes from MAC state nothing initialises, which is why some bring-ups were fine and others were not.
The fix makes the baseband take the path selection from its own registers instead of from the MAC, using the vendor's own function for it, right after the existing path routing at bring-up. 8852C only.
The change
kestrel_halbb_ctrl_tx_path(halbb glue) callshalbb_ctrl_tx_path_pmac_8852c(RF_PATH_AB)afterhalbb_ctrl_tx_path_tmac_8852c:0x09a4[4:2] selects P-MAC as the source of the path enable and the path A/B maps, set to paths A+B with A on IFFT 0 and B on IFFT 1.ack_responder_okis true on the 8852C too, still as an explicit list of measured variants.docs/kestrel-ack-responder.md: the dead-bring-up section now gives the cause, how it was found, what was ruled out, and the numbers.AdapterCaps.hand theSetAckRespondercontract follow.Measured
TX50UH responder, TX20U Nano soliciting, ch161, MCS1, 8 s per session:
ctest79/79 on Windows.Your two notes
bb->tx_pathto RF_PATH_AB, as in the vendor driver.Not in this PR