diff mbox series

[9/9] wifi: iwlwifi: mvm: tell iwlmei when we finished suspending

Message ID 20241010140328.1dc3a7fea9d1.Ibf183824471ea5580d9276d104444e53191e6900@changeid (mailing list archive)
State Rejected
Delegated to: Johannes Berg
Headers show
Series iwlwifi bugfixes - 10-10-2024 | expand

Commit Message

Miri Korenblit Oct. 10, 2024, 11:05 a.m. UTC
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

Since we no longer shut down the device in suspend, we also no longer
call iwl_mvm_mei_device_state() and this is a problem because iwlmei
expects this to be called when it runs its own suspend sequence. It
checks mei->device_down in iwl_mei_remove() which is called upon
suspend.

Fix this by telling iwlmei when we're done accessing the device.
When we'll wake up, the device should be untouched if CSME didn't use it
during the suspend time. If CSME used it, we'll notice it through the
CSR_FUNC_SCRATCH register.

Fixes: e8bb19c1d590 ("wifi: iwlwifi: support fast resume")
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
---
 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Johannes Berg Oct. 21, 2024, 10:48 a.m. UTC | #1
On Thu, 2024-10-10 at 14:05 +0300, Miri Korenblit wrote:
> From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
> 
> Since we no longer shut down the device in suspend, we also no longer
> call iwl_mvm_mei_device_state() and this is a problem because iwlmei

[snip

config IWLMEI
	...
	depends on BROKEN


so there's no way this matters upstream?

johannes
Johannes Berg Oct. 21, 2024, 7:26 p.m. UTC | #2
On Mon, 2024-10-21 at 12:48 +0200, Johannes Berg wrote:
> On Thu, 2024-10-10 at 14:05 +0300, Miri Korenblit wrote:
> > From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
> > 
> > Since we no longer shut down the device in suspend, we also no longer
> > call iwl_mvm_mei_device_state() and this is a problem because iwlmei
> 
> [snip
> 
> config IWLMEI
> 	...
> 	depends on BROKEN
> 
> 
> so there's no way this matters upstream?

And since Emmanuel pointed it out - I meant here it doesn't need to go
to the wireless tree, nobody is going to mark it non-BROKEN there, so it
can go with other stuff to wireless-next, perhaps eventually together
with a patch to mark it non-BROKEN.

johannes
diff mbox series

Patch

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 819e1c0c46ca..db0c6e7a186b 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -1237,6 +1237,7 @@  int __iwl_mvm_mac_start(struct iwl_mvm *mvm)
 	fast_resume = mvm->fast_resume;
 
 	if (fast_resume) {
+		iwl_mvm_mei_device_state(mvm, true);
 		ret = iwl_mvm_fast_resume(mvm);
 		if (ret) {
 			iwl_mvm_stop_device(mvm);
@@ -1356,10 +1357,13 @@  void __iwl_mvm_mac_stop(struct iwl_mvm *mvm, bool suspend)
 		iwl_mvm_rm_aux_sta(mvm);
 
 	if (suspend &&
-	    mvm->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000)
+	    mvm->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) {
 		iwl_mvm_fast_suspend(mvm);
-	else
+		/* From this point on, we won't touch the device */
+		iwl_mvm_mei_device_state(mvm, false);
+	} else {
 		iwl_mvm_stop_device(mvm);
+	}
 
 	iwl_mvm_async_handlers_purge(mvm);
 	/* async_handlers_list is empty and will stay empty: HW is stopped */