From: Felix Fietkau Date: Thu, 2 Feb 2017 09:14:51 +0000 (+0100) Subject: ath9k_hw: check if the chip failed to wake up X-Git-Tag: v4.1.52~77 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=858463ce794f5ae28c23cd43ab91db021b1adaf2;p=users%2Fdwmw2%2Flinux.git ath9k_hw: check if the chip failed to wake up [ Upstream commit a34d0a0da1abae46a5f6ebd06fb0ec484ca099d9 ] In an RFC patch, Sven Eckelmann and Simon Wunderlich reported: "QCA 802.11n chips (especially AR9330/AR9340) sometimes end up in a state in which a read of AR_CFG always returns 0xdeadbeef. This should not happen when when the power_mode of the device is ATH9K_PM_AWAKE." Include the check for the default register state in the existing MAC hang check. Signed-off-by: Felix Fietkau Signed-off-by: Kalle Valo Signed-off-by: Sasha Levin --- diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index 5e15e8e10ed39..bb64d7377a968 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c @@ -1593,6 +1593,10 @@ bool ath9k_hw_check_alive(struct ath_hw *ah) int count = 50; u32 reg, last_val; + /* Check if chip failed to wake up */ + if (REG_READ(ah, AR_CFG) == 0xdeadbeef) + return false; + if (AR_SREV_9300(ah)) return !ath9k_hw_detect_mac_hang(ah);