• Felix Fietkau's avatar
    ath9k_hw: fix stopping rx DMA during resets · 5882da02
    Felix Fietkau authored
    During PHY errors, the MAC can sometimes fail to enter an idle state on older
    hardware (before AR9380) after an rx stop has been requested.
    
    This typically shows up in the kernel log with messages like these:
    
    ath: Could not stop RX, we could be confusing the DMA engine when we start RX up
    ------------[ cut here ]------------
    WARNING: at drivers/net/wireless/ath/ath9k/recv.c:504 ath_stoprecv+0xcc/0xf0 [ath9k]()
    Call Trace:
    [<8023f0e8>] dump_stack+0x8/0x34
    [<80075050>] warn_slowpath_common+0x78/0xa4
    [<80075094>] warn_slowpath_null+0x18/0x24
    [<80d66d60>] ath_stoprecv+0xcc/0xf0 [ath9k]
    [<80d642cc>] ath_set_channel+0xbc/0x270 [ath9k]
    [<80d65254>] ath_radio_disable+0x4a4/0x7fc [ath9k]
    
    When this happens, the state that the MAC enters is easy to identify and
    does not result in bogus DMA traffic, however to ensure a working state
    after a channel change, the hardware should still be reset.
    
    This patch adds detection for this specific MAC state, after which the above
    warnings completely disappear in my tests.
    Signed-off-by: default avatarFelix Fietkau <nbd@openwrt.org>
    Cc: stable@kernel.org
    Cc: Kyungwan Nam <Kyungwan.Nam@Atheros.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    5882da02
mac.h 20.8 KB