HomeFreeBSD

Work around some rather annoying chip hangs in the AR9331 chip.

Description

Work around some rather annoying chip hangs in the AR9331 chip.

If powersave is enabled and there are any transitions to network
or full sleep - even if they're pretty damned brief - eventually
something messes up somewhere and the bus glue between the AR9331
SoC and the AR9331 wifi stops working. It shows up as stuck DMA
and LOCAL_TIMEOUT interrupts.

Both ath9k and the reference driver does a full chip reset if things
get stuck.

So:

  • teach the AR9330 HAL about the force_full_reset option I added a couple of years ago;
  • if the chip is currently in full-sleep, do a full-reset;
  • if TX DMA and/or RX DMA are still enabled (eg, they did get stuck during reset) then do a full-reset.

Tested:

  • AR9331 SoC, STA mode

Details

Provenance
adrianAuthored on
Parents
rS269747: * Use 2 32-bits field inside rule instead of 2 pointer to save skipto state.
Branches
Unknown
Tags
Unknown

Event Timeline