FAILED: patch "[PATCH] iwlwifi: mvm: fix regulatory domain update when the firmware" failed to apply to 4.4-stable tree
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
82715ac71e6b94a2c2136e31f3a8e6748e33aa8cMon Sep 17 00:00:00 2001
From: Emmanuel Grumbach <[email protected]>
Date: Wed, 3 Oct 2018 11:16:54 +0300
Subject: [PATCH] iwlwifi: mvm: fix regulatory domain update when the firmware
starts
When the firmware starts, it doesn't have any regulatory information, hence it uses the world wide limitations. The driver can feed the firmware with previous knowledge that was kept in the driver, but the firmware may still not update its internal tables.
This happens when we start a BSS interface, and then the firmware can change the regulatory tables based on our location and it'll use more lenient, location specific rules. Then, if the firmware is shut down (when the interface is brought down), and then an AP interface is created, the firmware will forget the country specific rules.
The host will think that we are in a certain country that may allow channels and will try to teach the firmware about our location, but the firmware may still not allow to drop the world wide limitations and apply country specific rules because it was just re-started.
In this case, the firmware will reply with MCC_RESP_ILLEGAL to the MCC_UPDATE_CMD. In that case, iwlwifi needs to let the upper layers (cfg80211 / hostapd) know that the channel list they know about has been updated.
This fixes https://bugzilla.kernel.org/show_bug.cgi?id=201105
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +6 -2
@@ -301,8 +301,12 @@ struct ieee80211_regdomain *iwl_mvm_get_regdomain(struct wiphy *wiphy, goto out; } -if (changed) - *changed = (resp->status ==MCC_RESP_NEW_CHAN_PROFILE ); +if (changed) { +u32 status =le32_to_cpu (resp->status); + + *changed = (status ==MCC_RESP_NEW_CHAN_PROFILE || + status ==MCC_RESP_ILLEGAL ); + } regd = iwl_parse_nvm_mcc_info(mvm->trans->dev, mvm->cfg, __le32_to_cpu(resp->n_channels),
drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +2 -3
@@ -539,9 +539,8 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2, }IWL_DEBUG_LAR (mvm, -"MCC response status: 0x%x. new MCC: 0x%x ('%c%c') change: %d n_chans: %d\n" , - status, mcc, mcc >>8 , mcc &0xff , - !!(status ==MCC_RESP_NEW_CHAN_PROFILE ), n_channels); +"MCC response status: 0x%x. new MCC: 0x%x ('%c%c') n_chans: %d\n" , + status, mcc, mcc >>8 , mcc &0xff , n_channels); exit:iwl_free_resp (&cmd);
PATCH 1/1 iwlwifi: mvm: fix regulatory domain update when the firmware starts
From: Emmanuel Grumbach <[email protected]>
When the firmware starts, it doesn't have any regulatory information, hence it uses the world wide limitations. The driver can feed the firmware with previous knowledge that was kept in the driver, but the firmware may still not update its internal tables.
This happens when we start a BSS interface, and then the firmware can change the regulatory tables based on our location and it'll use more lenient, location specific rules. Then, if the firmware is shut down (when the interface is brought down), and then an AP interface is created, the firmware will forget the country specific rules.
The host will think that we are in a certain country that may allow channels and will try to teach the firmware about our location, but the firmware may still not allow to drop the world wide limitations and apply country specific rules because it was just re-started.
In this case, the firmware will reply with MCC_RESP_ILLEGAL to the MCC_UPDATE_CMD. In that case, iwlwifi needs to let the upper layers (cfg80211 / hostapd) know that the channel list they know about has been updated.
This fixes https://bugzilla.kernel.org/show_bug.cgi?id=201105
--- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 8 ++++++-- drivers/net/wireless/iwlwifi/mvm/nvm.c | 5 ++--- 2 files changed, 8 insertions(+), 5 deletions(-)
drivers/net/wireless/iwlwifi/mvm/mac80211.c +6 -2
@@ -322,8 +322,12 @@ struct ieee80211_regdomain *iwl_mvm_get_regdomain(struct wiphy *wiphy, goto out; } -if (changed) - *changed = (resp->status ==MCC_RESP_NEW_CHAN_PROFILE ); +if (changed) { +u32 status =le32_to_cpu (resp->status); + + *changed = (status ==MCC_RESP_NEW_CHAN_PROFILE || + status ==MCC_RESP_ILLEGAL ); + } regd = iwl_parse_nvm_mcc_info(mvm->trans->dev, mvm->cfg, __le32_to_cpu(resp->n_channels),
drivers/net/wireless/iwlwifi/mvm/nvm.c +2 -3
@@ -667,9 +667,8 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2, n_channels =__le32_to_cpu (mcc_resp->n_channels);IWL_DEBUG_LAR (mvm, -"MCC response status: 0x%x. new MCC: 0x%x ('%c%c') change: %d n_chans: %d\n" , - status, mcc, mcc >>8 , mcc &0xff , - !!(status ==MCC_RESP_NEW_CHAN_PROFILE ), n_channels); +"MCC response status: 0x%x. new MCC: 0x%x ('%c%c') n_chans: %d\n" , + status, mcc, mcc >>8 , mcc &0xff , n_channels); resp_len =sizeof (*mcc_resp) + n_channels *sizeof (__le32); resp_cp =kmemdup (mcc_resp, resp_len,GFP_KERNEL );
Signature · 1 line
2.19.1
Re: [PATCH v4.4] iwlwifi: mvm: fix regulatory domain update when the firmware starts
Quoted 29 lines · Luca Coelho
From: Emmanuel Grumbach <[email protected]>
When the firmware starts, it doesn't have any regulatory information, hence it uses the world wide limitations. The driver can feed the firmware with previous knowledge that was kept in the driver, but the firmware may still not update its internal tables.
This happens when we start a BSS interface, and then the firmware can change the regulatory tables based on our location and it'll use more lenient, location specific rules. Then, if the firmware is shut down (when the interface is brought down), and then an AP interface is created, the firmware will forget the country specific rules.
The host will think that we are in a certain country that may allow channels and will try to teach the firmware about our location, but the firmware may still not allow to drop the world wide limitations and apply country specific rules because it was just re-started.
In this case, the firmware will reply with
MCC_RESP_ILLEGALto theMCC_UPDATE_CMD. In that case, iwlwifi needs to let the upper layers (cfg80211 / hostapd) know that the channel list they know about has been updated.This fixes https://bugzilla.kernel.org/show_bug.cgi?id=201105
Quoted 7 lines
Signed-off-by Emmanuel Grumbach <[email protected]>Signed-off-by Luca Coelho <[email protected]>--- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 8 ++++++-- drivers/net/wireless/iwlwifi/mvm/nvm.c | 5 ++--- 2 files changed, 8 insertions(+), 5 deletions(-)
You forgot the git commit id :(
I dug it up and queued this up now.
greg k-h
Re: [PATCH v4.4] iwlwifi: mvm: fix regulatory domain update when the firmware starts
Quoted 38 lines · Greg KH
Quoted 29 lines · Luca Coelho
From: Emmanuel Grumbach <[email protected]>
When the firmware starts, it doesn't have any regulatory information, hence it uses the world wide limitations. The driver can feed the firmware with previous knowledge that was kept in the driver, but the firmware may still not update its internal tables.
This happens when we start a BSS interface, and then the firmware can change the regulatory tables based on our location and it'll use more lenient, location specific rules. Then, if the firmware is shut down (when the interface is brought down), and then an AP interface is created, the firmware will forget the country specific rules.
The host will think that we are in a certain country that may allow channels and will try to teach the firmware about our location, but the firmware may still not allow to drop the world wide limitations and apply country specific rules because it was just re-started.
In this case, the firmware will reply with
MCC_RESP_ILLEGALto theMCC_UPDATE_CMD. In that case, iwlwifi needs to let the upper layers (cfg80211 / hostapd) know that the channel list they know about has been updated.This fixes https://bugzilla.kernel.org/show_bug.cgi?id=201105
Quoted 7 lines
Signed-off-by Emmanuel Grumbach <[email protected]>Signed-off-by Luca Coelho <[email protected]>--- drivers/net/wireless/iwlwifi/mvm/mac80211.c | 8 ++++++-- drivers/net/wireless/iwlwifi/mvm/nvm.c | 5 ++--- 2 files changed, 8 insertions(+), 5 deletions(-)
Quoted 1 line
You forgot the git commit id :(
Ouch! Sorry about that...
Quoted 1 line
I dug it up and queued this up now.
Thanks, Greg!
--
Cheers,
Luca.