Commit 8bfaf856 authored by Luca Coelho's avatar Luca Coelho Committed by Greg Kroah-Hartman

iwlwifi: mvm: fix d3_test with unified D0/D3 images

commit 85cd69b8 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 23ae6128 ("iwlwifi: mvm: Do not switch to D3 image on suspend")
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8cdfd323
...@@ -2290,7 +2290,8 @@ static void iwl_mvm_d3_test_disconn_work_iter(void *_data, u8 *mac, ...@@ -2290,7 +2290,8 @@ static void iwl_mvm_d3_test_disconn_work_iter(void *_data, u8 *mac,
static int iwl_mvm_d3_test_release(struct inode *inode, struct file *file) static int iwl_mvm_d3_test_release(struct inode *inode, struct file *file)
{ {
struct iwl_mvm *mvm = inode->i_private; 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; mvm->d3_test_active = false;
...@@ -2301,17 +2302,21 @@ static int iwl_mvm_d3_test_release(struct inode *inode, struct file *file) ...@@ -2301,17 +2302,21 @@ static int iwl_mvm_d3_test_release(struct inode *inode, struct file *file)
mvm->trans->system_pm_mode = IWL_PLAT_PM_MODE_DISABLED; mvm->trans->system_pm_mode = IWL_PLAT_PM_MODE_DISABLED;
iwl_abort_notification_waits(&mvm->notif_wait); 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 */ ieee80211_restart_hw(mvm->hw);
while (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status) &&
remaining_time > 0) { /* wait for restart and disconnect all interfaces */
remaining_time--; while (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status) &&
msleep(1000); remaining_time > 0) {
} remaining_time--;
msleep(1000);
}
if (remaining_time == 0) if (remaining_time == 0)
IWL_ERR(mvm, "Timed out waiting for HW restart to finish!\n"); IWL_ERR(mvm, "Timed out waiting for HW restart!\n");
}
ieee80211_iterate_active_interfaces_atomic( ieee80211_iterate_active_interfaces_atomic(
mvm->hw, IEEE80211_IFACE_ITER_NORMAL, mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment