iwlwifi: pcie: only apply retention workaround on 9000-series A-step
authorJohannes Berg <johannes.berg@intel.com>
Wed, 10 May 2017 09:31:06 +0000 (11:31 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Thu, 29 Jun 2017 10:26:24 +0000 (13:26 +0300)
Due to a hardware issue, certain power saving had to be
disabled. However, this issue was fixed in B-step, so the
workaround only needs to apply to A-step.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/pcie/rx.c

index a5c0f69423d23654417a2ae1f0981dd909377278..cd109740632de69619c6e7a9e4236ce6a92f0446 100644 (file)
@@ -761,6 +761,15 @@ static void iwl_pcie_rx_hw_init(struct iwl_trans *trans, struct iwl_rxq *rxq)
 
 void iwl_pcie_enable_rx_wake(struct iwl_trans *trans, bool enable)
 {
+       if (trans->cfg->device_family != IWL_DEVICE_FAMILY_9000)
+               return;
+
+       if (CSR_HW_REV_STEP(trans->hw_rev) != SILICON_A_STEP)
+               return;
+
+       if (!trans->cfg->integrated)
+               return;
+
        /*
         * Turn on the chicken-bits that cause MAC wakeup for RX-related
         * values.
@@ -768,12 +777,10 @@ void iwl_pcie_enable_rx_wake(struct iwl_trans *trans, bool enable)
         * bug where shadow registers are not in the retention list and their
         * value is lost when NIC powers down
         */
-       if (trans->cfg->integrated) {
-               iwl_set_bit(trans, CSR_MAC_SHADOW_REG_CTRL,
-                           CSR_MAC_SHADOW_REG_CTRL_RX_WAKE);
-               iwl_set_bit(trans, CSR_MAC_SHADOW_REG_CTL2,
-                           CSR_MAC_SHADOW_REG_CTL2_RX_WAKE);
-       }
+       iwl_set_bit(trans, CSR_MAC_SHADOW_REG_CTRL,
+                   CSR_MAC_SHADOW_REG_CTRL_RX_WAKE);
+       iwl_set_bit(trans, CSR_MAC_SHADOW_REG_CTL2,
+                   CSR_MAC_SHADOW_REG_CTL2_RX_WAKE);
 }
 
 static void iwl_pcie_rx_mq_hw_init(struct iwl_trans *trans)