From: Miri Korenblit Date: Tue, 12 May 2026 05:23:05 +0000 (+0300) Subject: wifi: iwlwifi: mld: stop supporting MAC_PM_POWER_TABLE version 1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e11f9d97957c316919c6da402033d0da200194c4;p=thirdparty%2Fkernel%2Flinux.git wifi: iwlwifi: mld: stop supporting MAC_PM_POWER_TABLE version 1 The oldest core that iwmld loads is now 101, which supports version 2, so remove version 1. This allows to remove the smps workaround. Reviewed-by: Johannes Berg Link: https://patch.msgid.link/20260512082114.e42cff396ea8.I9175bf4aaba0c846fbea54c9bede4d18ad1c252b@changeid Signed-off-by: Miri Korenblit --- diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.h b/drivers/net/wireless/intel/iwlwifi/mld/iface.h index 147ff6787ed9d..71c7942044750 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.h @@ -138,7 +138,6 @@ struct iwl_mld_emlsr { * @beacon_inject_active: indicates an active debugfs beacon ie injection * @low_latency_causes: bit flags, indicating the causes for low-latency, * see @iwl_mld_low_latency_cause. - * @ps_disabled: indicates that PS is disabled for this interface * @last_link_activation_time: last time a link was activated, for * deferring MLO scans (to make them more reliable) * @mld: pointer to the mld structure. @@ -171,7 +170,6 @@ struct iwl_mld_vif { bool beacon_inject_active; #endif u8 low_latency_causes; - bool ps_disabled; time64_t last_link_activation_time; ); /* And here fields that survive a fw restart */ diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index 8856f96a97603..f37a365a87a48 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -1368,28 +1368,6 @@ iwl_mld_mac80211_link_info_changed(struct ieee80211_hw *hw, iwl_mld_set_tx_power(mld, link_conf, link_conf->txpower); } -static void -iwl_mld_smps_workaround(struct iwl_mld *mld, struct ieee80211_vif *vif, bool enable) -{ - struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); - bool workaround_required = - iwl_fw_lookup_cmd_ver(mld->fw, MAC_PM_POWER_TABLE, 0) < 2; - - if (!workaround_required) - return; - - /* Send the device-level power commands since the - * firmware checks the POWER_TABLE_CMD's POWER_SAVE_EN bit to - * determine SMPS mode. - */ - if (mld_vif->ps_disabled == !enable) - return; - - mld_vif->ps_disabled = !enable; - - iwl_mld_update_device_power(mld, false); -} - static void iwl_mld_mac80211_vif_cfg_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, @@ -1427,10 +1405,8 @@ void iwl_mld_mac80211_vif_cfg_changed(struct ieee80211_hw *hw, } } - if (changes & BSS_CHANGED_PS) { - iwl_mld_smps_workaround(mld, vif, vif->cfg.ps); + if (changes & BSS_CHANGED_PS) iwl_mld_update_mac_power(mld, vif, false); - } /* TODO: task=MLO BSS_CHANGED_MLD_VALID_LINKS/CHANGED_MLD_TTLM */ } @@ -1837,7 +1813,6 @@ static int iwl_mld_move_sta_state_up(struct iwl_mld *mld, FW_CTXT_ACTION_MODIFY); if (ret) return ret; - iwl_mld_smps_workaround(mld, vif, vif->cfg.ps); } /* MFP is set by default before the station is authorized. @@ -1882,7 +1857,6 @@ static int iwl_mld_move_sta_state_down(struct iwl_mld *mld, &mld_vif->mlo_scan_start_wk); iwl_mld_reset_cca_40mhz_workaround(mld, vif); - iwl_mld_smps_workaround(mld, vif, true); } /* once we move into assoc state, need to update the FW to diff --git a/drivers/net/wireless/intel/iwlwifi/mld/power.c b/drivers/net/wireless/intel/iwlwifi/mld/power.c index 49b0d9f8f865d..fe71da8b9c892 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/power.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/power.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* - * Copyright (C) 2024-2025 Intel Corporation + * Copyright (C) 2024-2026 Intel Corporation */ #include @@ -11,36 +11,11 @@ #include "link.h" #include "constants.h" -static void iwl_mld_vif_ps_iterator(void *data, u8 *mac, - struct ieee80211_vif *vif) -{ - bool *ps_enable = (bool *)data; - struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); - - if (vif->type != NL80211_IFTYPE_STATION) - return; - - *ps_enable &= !mld_vif->ps_disabled; -} - int iwl_mld_update_device_power(struct iwl_mld *mld, bool d3) { struct iwl_device_power_cmd cmd = {}; - bool enable_ps = false; - if (iwlmld_mod_params.power_scheme != IWL_POWER_SCHEME_CAM) { - enable_ps = true; - - /* Disable power save if any STA interface has - * power save turned off - */ - ieee80211_iterate_active_interfaces_mtx(mld->hw, - IEEE80211_IFACE_ITER_NORMAL, - iwl_mld_vif_ps_iterator, - &enable_ps); - } - - if (enable_ps) + if (iwlmld_mod_params.power_scheme != IWL_POWER_SCHEME_CAM) cmd.flags |= cpu_to_le16(DEVICE_POWER_FLAGS_POWER_SAVE_ENA_MSK); @@ -252,9 +227,7 @@ static void iwl_mld_power_build_cmd(struct iwl_mld *mld, return; cmd->flags |= cpu_to_le16(POWER_FLAGS_POWER_MANAGEMENT_ENA_MSK); - - if (iwl_fw_lookup_cmd_ver(mld->fw, MAC_PM_POWER_TABLE, 0) >= 2) - cmd->flags |= cpu_to_le16(POWER_FLAGS_ENABLE_SMPS_MSK); + cmd->flags |= cpu_to_le16(POWER_FLAGS_ENABLE_SMPS_MSK); /* firmware supports LPRX for beacons at rate 1 Mbps or 6 Mbps only */ if (link_conf->beacon_rate &&