4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Luca Coelho <[email protected]>

commit 85cd69b8f1f7e289fe931a82889e673fd0f04842 upstream.

When a unified D0/D3 image is used, we don't restart the FW in the
D0->D3->D0 transitions.  Therefore, the d3_test functionality should
not call ieee8021_restart_hw() when the resuming either.

Fixes: commit 23ae61282b88 ("iwlwifi: mvm: Do not switch to D3 image on 
suspend")
Signed-off-by: Luca Coelho <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 drivers/net/wireless/intel/iwlwifi/mvm/d3.c |   25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

--- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
@@ -2290,7 +2290,8 @@ static void iwl_mvm_d3_test_disconn_work
 static int iwl_mvm_d3_test_release(struct inode *inode, struct file *file)
 {
        struct iwl_mvm *mvm = inode->i_private;
-       int remaining_time = 10;
+       bool unified_image = fw_has_capa(&mvm->fw->ucode_capa,
+                                        IWL_UCODE_TLV_CAPA_CNSLDTD_D3_D0_IMG);
 
        mvm->d3_test_active = false;
 
@@ -2301,17 +2302,21 @@ static int iwl_mvm_d3_test_release(struc
        mvm->trans->system_pm_mode = IWL_PLAT_PM_MODE_DISABLED;
 
        iwl_abort_notification_waits(&mvm->notif_wait);
-       ieee80211_restart_hw(mvm->hw);
+       if (!unified_image) {
+               int remaining_time = 10;
 
-       /* wait for restart and disconnect all interfaces */
-       while (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status) &&
-              remaining_time > 0) {
-               remaining_time--;
-               msleep(1000);
-       }
+               ieee80211_restart_hw(mvm->hw);
+
+               /* wait for restart and disconnect all interfaces */
+               while (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status) &&
+                      remaining_time > 0) {
+                       remaining_time--;
+                       msleep(1000);
+               }
 
-       if (remaining_time == 0)
-               IWL_ERR(mvm, "Timed out waiting for HW restart to finish!\n");
+               if (remaining_time == 0)
+                       IWL_ERR(mvm, "Timed out waiting for HW restart!\n");
+       }
 
        ieee80211_iterate_active_interfaces_atomic(
                mvm->hw, IEEE80211_IFACE_ITER_NORMAL,


Reply via email to