From: Johannes Berg Date: Thu, 15 May 2025 11:56:38 +0000 (+0200) Subject: Merge tag 'iwlwifi-next-2025-05-15' of https://git.kernel.org/pub/scm/linux/kernel... X-Git-Tag: v6.16-rc1~132^2~46^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=06c4b2036818585542a16f286d88ad8e7b7a8252;p=thirdparty%2Fkernel%2Flinux.git Merge tag 'iwlwifi-next-2025-05-15' of https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next Miri Korenblit says: ==================== iwlwifi features, notably a rework of the transport configuration ==================== Link: https://patch.msgid.link/MW5PR11MB5810DD2655DE461E98A618DDA390A@MW5PR11MB5810.namprd11.prod.outlook.com/ Signed-off-by: Johannes Berg --- 06c4b2036818585542a16f286d88ad8e7b7a8252 diff --cc drivers/net/wireless/intel/iwlwifi/iwl-trans.c index e7b2e08645efa,59c5ea1727f4c..8a40801cf0dde --- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c +++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c @@@ -132,14 -183,8 +185,14 @@@ iwl_trans_determine_restart_mode(struc data->restart_count = 0; index = data->restart_count; - if (index >= ARRAY_SIZE(escalation_list)) { - index = ARRAY_SIZE(escalation_list) - 1; - if (index >= escalation_list_size) ++ if (index >= escalation_list_size) { + index = escalation_list_size - 1; + if (!data->backoff) { + data->backoff = true; + return IWL_RESET_MODE_BACKOFF; + } + data->backoff = false; + } return max(at_least, escalation_list[index]); } @@@ -148,11 -195,14 +203,15 @@@ static void iwl_trans_restart_wk(struct work_struct *wk) { - struct iwl_trans *trans = container_of(wk, typeof(*trans), restart.wk); + struct iwl_trans *trans = container_of(wk, typeof(*trans), + restart.wk.work); - struct iwl_trans_reprobe *reprobe; enum iwl_reset_mode mode; + if (trans->restart.mode.type == IWL_ERR_TYPE_TOP_RESET_BY_BT) { + iwl_trans_schedule_reprobe(trans, IWL_TRANS_TOP_FOLLOWER_WAIT); + return; + } + if (!trans->op_mode) return; @@@ -240,9 -272,8 +287,8 @@@ struct iwl_trans *iwl_trans_alloc(unsig #endif trans->dev = dev; - trans->num_rx_queues = 1; - INIT_WORK(&trans->restart.wk, iwl_trans_restart_wk); + INIT_DELAYED_WORK(&trans->restart.wk, iwl_trans_restart_wk); return trans; } @@@ -418,9 -433,10 +448,10 @@@ void iwl_trans_op_mode_leave(struct iwl iwl_trans_pcie_op_mode_leave(trans); - cancel_work_sync(&trans->restart.wk); + cancel_delayed_work_sync(&trans->restart.wk); trans->op_mode = NULL; + memset(&trans->conf, 0, sizeof(trans->conf)); trans->state = IWL_TRANS_NO_FW; } diff --cc drivers/net/wireless/intel/iwlwifi/iwl-trans.h index 44a249a753ecf,57a7747c92c44..012b1e44bce38 --- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h @@@ -1,6 -1,6 +1,6 @@@ /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* - * Copyright (C) 2005-2014, 2018-2023 Intel Corporation - * Copyright (C) 2005-2014, 2018-2023, 2025 Intel Corporation ++ * Copyright (C) 2005-2014, 2018-2025 Intel Corporation * Copyright (C) 2013-2015 Intel Mobile Communications GmbH * Copyright (C) 2016-2017 Intel Deutschland GmbH */ @@@ -951,18 -926,8 +926,8 @@@ struct iwl_trans struct iwl_trans_debug dbg; struct iwl_self_init_dram init_dram; - enum iwl_plat_pm_mode system_pm_mode; - - const char *name; - u32 mbx_addr_0_step; - u32 mbx_addr_1_step; - - u8 pcie_link_speed; - - struct iwl_dma_ptr invalid_tx_cmd; - struct { - struct work_struct wk; + struct delayed_work wk; struct iwl_fw_error_dump_mode mode; bool during_reset; } restart; diff --cc drivers/net/wireless/intel/iwlwifi/mld/mlo.c index da16fff1ce86d,71edfb1cf68e6..dba5379ed0090 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@@ -789,10 -847,9 +847,9 @@@ iwl_mld_channel_load_allows_emlsr(struc return false; } - EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_mld_channel_load_allows_emlsr); - static bool - iwl_mld_valid_emlsr_pair(struct ieee80211_vif *vif, -VISIBLE_IF_KUNIT u32 ++VISIBLE_IF_IWLWIFI_KUNIT u32 + iwl_mld_emlsr_pair_state(struct ieee80211_vif *vif, struct iwl_mld_link_sel_data *a, struct iwl_mld_link_sel_data *b) { diff --cc drivers/net/wireless/intel/iwlwifi/pcie/internal.h index 114a9195ad7f7,026401c939bbf..3b7c12fc4f9e4 --- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h +++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h @@@ -1105,13 -1101,15 +1101,16 @@@ void iwl_trans_pcie_set_bits_mask(struc int iwl_trans_pcie_read_config32(struct iwl_trans *trans, u32 ofs, u32 *val); bool iwl_trans_pcie_grab_nic_access(struct iwl_trans *trans); -void iwl_trans_pcie_release_nic_access(struct iwl_trans *trans); +void __releases(nic_access_nobh) +iwl_trans_pcie_release_nic_access(struct iwl_trans *trans); + void iwl_pcie_alloc_fw_monitor(struct iwl_trans *trans, u8 max_power); /* transport gen 1 exported functions */ - void iwl_trans_pcie_fw_alive(struct iwl_trans *trans, u32 scd_addr); + void iwl_trans_pcie_fw_alive(struct iwl_trans *trans); int iwl_trans_pcie_start_fw(struct iwl_trans *trans, - const struct fw_img *fw, bool run_in_rfkill); + const struct iwl_fw *fw, + const struct fw_img *img, + bool run_in_rfkill); void iwl_trans_pcie_stop_device(struct iwl_trans *trans); /* common functions that are used by gen2 transport */