ath9k: issue a cold reset after failures or after bringing the chip out of full sleep...
authorFelix Fietkau <nbd@openwrt.org>
Mon, 25 Feb 2013 19:56:26 +0000 (19:56 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 25 Feb 2013 19:56:26 +0000 (19:56 +0000)
Backport of r35785

SVN-Revision: 35786

package/mac80211/patches/300-pending_work.patch
package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
package/mac80211/patches/525-ath9k_use_configured_antenna_gain.patch
package/mac80211/patches/564-ath9k_debugfs_diag.patch
package/mac80211/patches/565-ath9k_disable_paprd.patch
package/mac80211/patches/b01-ath9k-allow-to-disable-bands-via-platform-data.patch

index 3607e76657bc33c8d044c2b74d4de6b3691daca1..7cc4569673450ba0dd30eef7a521951bf7ec1c84 100644 (file)
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2568,7 +2568,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -1467,7 +1467,9 @@ static bool ath9k_hw_chip_reset(struct a
+                       reset_type = ATH9K_RESET_POWER_ON;
+               else
+                       reset_type = ATH9K_RESET_COLD;
+-      }
++      } else if (ah->chip_fullsleep || REG_READ(ah, AR_Q_TXE) ||
++                 (REG_READ(ah, AR_CR) & AR_CR_RXE))
++              reset_type = ATH9K_RESET_COLD;
+       if (!ath9k_hw_set_reset_reg(ah, reset_type))
+               return false;
+@@ -2568,7 +2570,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
  
        if (AR_SREV_9300_20_OR_LATER(ah)) {
                ah->enabled_cals |= TX_IQ_CAL;
index 3b78afae3eae6c878f569da0fb2c079c1427fd5c..b6591b06e9aeec7b0b067b09033a42315e78b691 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1949,8 +1949,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1951,8 +1951,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                REG_WRITE(ah, AR_OBS, 8);
  
        if (ah->config.rx_intr_mitigation) {
index 367438ea3e45c8a81a76cadae2f1cec89223a5ca..04bd2b3af0d7515f97a6323e45ab5538009cf5e9 100644 (file)
@@ -10,7 +10,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2828,7 +2828,7 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2830,7 +2830,7 @@ void ath9k_hw_apply_txpower(struct ath_h
        channel = chan->chan;
        chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);
        new_pwr = min_t(int, chan_pwr, reg->power_limit);
index b7d9f5edc56fa3591aa7ec758a3fd5e3b741450f..3c7881dbd442e45bed936e286868b630e67a1c2a 100644 (file)
@@ -94,7 +94,7 @@
  void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause);
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1749,6 +1749,20 @@ fail:
+@@ -1751,6 +1751,20 @@ fail:
        return -EINVAL;
  }
  
  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
                   struct ath9k_hw_cal_data *caldata, bool fastcc)
  {
-@@ -2026,6 +2040,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2028,6 +2042,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
        }
  
        ath9k_hw_apply_gpio_override(ah);
index 903a2b0c7ed94c8bed30598ab2a54827722bd343..523ac9712216c4fe9d5e6544a86bd6f003ab3fe1 100644 (file)
@@ -11,7 +11,7 @@
        debugfs_create_file("regval", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2521,10 +2521,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -2523,10 +2523,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw
                pCap->rx_status_len = sizeof(struct ar9003_rxs);
                pCap->tx_desc_len = sizeof(struct ar9003_txc);
                pCap->txs_len = sizeof(struct ar9003_txs);
index 0a071ffcc7e86f80050238681e0db907e1e01cb4..8b4ddefe911afee10cf36e82a6ac39142afbebeb 100644 (file)
@@ -12,7 +12,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2413,17 +2413,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -2415,17 +2415,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
        }
  
        eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE);