]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: assign a FW API range for HR
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 9 Jul 2025 20:05:39 +0000 (23:05 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Thu, 10 Jul 2025 16:48:38 +0000 (19:48 +0300)
HR device is frozen on API 100, so it is not allowed to use FW APIs
higher than that. Make sure of that by assigning a MIN and MAX API range
for HR.

Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250709230308.ea54c00de44d.I47340ecaefbf40bb0bd254485d242b7f39df85b1@changeid
drivers/net/wireless/intel/iwlwifi/cfg/22000.c
drivers/net/wireless/intel/iwlwifi/cfg/ax210.c
drivers/net/wireless/intel/iwlwifi/cfg/bz.c
drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c
drivers/net/wireless/intel/iwlwifi/cfg/sc.c

index 57af51a3ee0b55d10b761d817f5904f0e7395301..ca488931a33c5e62624692d0f26e32aec1b0758c 100644 (file)
 #define IWL_22000_SMEM_OFFSET          0x400000
 #define IWL_22000_SMEM_LEN             0xD0000
 
-#define IWL_QU_B_HR_B_FW_PRE           "iwlwifi-Qu-b0-hr-b0"
-#define IWL_QU_C_HR_B_FW_PRE           "iwlwifi-Qu-c0-hr-b0"
-#define IWL_QUZ_A_HR_B_FW_PRE          "iwlwifi-QuZ-a0-hr-b0"
 #define IWL_CC_A_FW_PRE                        "iwlwifi-cc-a0"
 
-#define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
-       IWL_QU_B_HR_B_FW_PRE "-" __stringify(api) ".ucode"
-#define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
-       IWL_QUZ_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
-#define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
-       IWL_QU_C_HR_B_FW_PRE "-" __stringify(api) ".ucode"
 #define IWL_CC_A_MODULE_FIRMWARE(api)                  \
        IWL_CC_A_FW_PRE "-" __stringify(api) ".ucode"
 
@@ -123,7 +114,4 @@ const char iwl_ax201_killer_1650s_name[] =
 const char iwl_ax201_killer_1650i_name[] =
        "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
 
-MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
-MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
-MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
index 467c45ed9af2598c5d80d9b8dcffb9e7e4b89d94..cf7d91894ab9c9d423402cf6319aecbf9ff0c69d 100644 (file)
 #define IWL_AX210_SMEM_OFFSET          0x400000
 #define IWL_AX210_SMEM_LEN             0xD0000
 
-#define IWL_SO_A_HR_B_FW_PRE           "iwlwifi-so-a0-hr-b0"
 #define IWL_SO_A_GF_A_FW_PRE           "iwlwifi-so-a0-gf-a0"
 #define IWL_TY_A_GF_A_FW_PRE           "iwlwifi-ty-a0-gf-a0"
 #define IWL_SO_A_GF4_A_FW_PRE          "iwlwifi-so-a0-gf4-a0"
-#define IWL_MA_A_HR_B_FW_PRE           "iwlwifi-ma-a0-hr-b0"
 #define IWL_MA_A_GF_A_FW_PRE           "iwlwifi-ma-a0-gf-a0"
 #define IWL_MA_A_GF4_A_FW_PRE          "iwlwifi-ma-a0-gf4-a0"
-#define IWL_MA_B_HR_B_FW_PRE           "iwlwifi-ma-b0-hr-b0"
 #define IWL_MA_B_GF_A_FW_PRE           "iwlwifi-ma-b0-gf-a0"
 #define IWL_MA_B_GF4_A_FW_PRE          "iwlwifi-ma-b0-gf4-a0"
 
-#define IWL_SO_A_HR_B_MODULE_FIRMWARE(api) \
-       IWL_SO_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
-#define IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(api)          \
-       IWL_MA_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
-#define IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(api)          \
-       IWL_MA_B_HR_B_FW_PRE "-" __stringify(api) ".ucode"
-
 static const struct iwl_family_base_params iwl_ax210_base = {
        .num_of_queues = 512,
        .max_tfd_queue_size = 65536,
@@ -141,12 +131,9 @@ const struct iwl_mac_cfg iwl_ma_mac_cfg = {
        .umac_prph_offset = 0x300000
 };
 
-MODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_AX210_UCODE_API_MAX));
 IWL_FW_AND_PNVM(IWL_SO_A_GF_A_FW_PRE, IWL_AX210_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_TY_A_GF_A_FW_PRE, IWL_AX210_UCODE_API_MAX);
-MODULE_FIRMWARE(IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(IWL_AX210_UCODE_API_MAX));
 IWL_FW_AND_PNVM(IWL_MA_A_GF_A_FW_PRE, IWL_AX210_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_MA_A_GF4_A_FW_PRE, IWL_AX210_UCODE_API_MAX);
-MODULE_FIRMWARE(IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(IWL_AX210_UCODE_API_MAX));
 IWL_FW_AND_PNVM(IWL_MA_B_GF_A_FW_PRE, IWL_AX210_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_MA_B_GF4_A_FW_PRE, IWL_AX210_UCODE_API_MAX);
index 50d454514fe5a62693403cb98622b5dcd78f0b22..02d6df7fa7a8e9205dca4732c0666cb4410f967b 100644 (file)
@@ -19,7 +19,6 @@
 #define IWL_BZ_SMEM_OFFSET             0x400000
 #define IWL_BZ_SMEM_LEN                        0xD0000
 
-#define IWL_BZ_A_HR_B_FW_PRE           "iwlwifi-bz-a0-hr-b0"
 #define IWL_BZ_A_GF_A_FW_PRE           "iwlwifi-bz-a0-gf-a0"
 #define IWL_BZ_A_GF4_A_FW_PRE          "iwlwifi-bz-a0-gf4-a0"
 #define IWL_BZ_A_FM_B_FW_PRE           "iwlwifi-bz-a0-fm-b0"
@@ -28,9 +27,6 @@
 #define IWL_GL_B_FM_B_FW_PRE           "iwlwifi-gl-b0-fm-b0"
 #define IWL_GL_C_FM_C_FW_PRE           "iwlwifi-gl-c0-fm-c0"
 
-#define IWL_BZ_A_HR_B_MODULE_FIRMWARE(api) \
-       IWL_BZ_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
-
 static const struct iwl_family_base_params iwl_bz_base = {
        .num_of_queues = 512,
        .max_tfd_queue_size = 65536,
@@ -107,7 +103,6 @@ const struct iwl_mac_cfg iwl_gl_mac_cfg = {
        .low_latency_xtal = true,
 };
 
-MODULE_FIRMWARE(IWL_BZ_A_HR_B_MODULE_FIRMWARE(IWL_BZ_UCODE_API_MAX));
 IWL_FW_AND_PNVM(IWL_BZ_A_GF_A_FW_PRE, IWL_BZ_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_BZ_A_GF4_A_FW_PRE, IWL_BZ_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_BZ_A_FM_B_FW_PRE, IWL_BZ_UCODE_API_MAX);
index db02664e391791918878c9e0ad450f484155f4ec..9f408d276ce943a346a328c1476b1f7c4e50a625 100644 (file)
@@ -5,6 +5,41 @@
  */
 #include "iwl-config.h"
 
+/* Highest firmware API version supported */
+#define IWL_HR_UCODE_API_MAX   100
+
+/* Lowest firmware API version supported */
+#define IWL_HR_UCODE_API_MIN   98
+
+#define IWL_QU_B_HR_B_FW_PRE           "iwlwifi-Qu-b0-hr-b0"
+#define IWL_QU_C_HR_B_FW_PRE           "iwlwifi-Qu-c0-hr-b0"
+#define IWL_QUZ_A_HR_B_FW_PRE          "iwlwifi-QuZ-a0-hr-b0"
+#define IWL_SO_A_HR_B_FW_PRE           "iwlwifi-so-a0-hr-b0"
+#define IWL_MA_A_HR_B_FW_PRE           "iwlwifi-ma-a0-hr-b0"
+#define IWL_MA_B_HR_B_FW_PRE           "iwlwifi-ma-b0-hr-b0"
+#define IWL_BZ_A_HR_B_FW_PRE           "iwlwifi-bz-a0-hr-b0"
+#define IWL_SC_A_HR_A_FW_PRE           "iwlwifi-sc-a0-hr-b0"
+#define IWL_SC_A_HR_B_FW_PRE           "iwlwifi-sc-a0-hr-b0"
+
+#define IWL_QU_B_HR_B_MODULE_FIRMWARE(api)     \
+       IWL_QU_B_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api)    \
+       IWL_QUZ_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_QU_C_HR_B_MODULE_FIRMWARE(api)     \
+       IWL_QU_C_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_SO_A_HR_B_MODULE_FIRMWARE(api)     \
+       IWL_SO_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(api)  \
+       IWL_MA_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(api)  \
+       IWL_MA_B_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_BZ_A_HR_B_MODULE_FIRMWARE(api)     \
+       IWL_BZ_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_SC_A_HR_A_FW_MODULE_FIRMWARE(api)  \
+       IWL_SC_A_HR_A_FW_PRE "-" __stringify(api) ".ucode"
+#define IWL_SC_A_HR_B_FW_MODULE_FIRMWARE(api)  \
+       IWL_SC_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
+
 /* NVM versions */
 #define IWL_HR_NVM_VERSION             0x0a1d
 
@@ -20,7 +55,9 @@
        },                                                              \
        .num_rbds = IWL_NUM_RBDS_HE,                                    \
        .nvm_ver = IWL_HR_NVM_VERSION,                                  \
-       .nvm_type = IWL_NVM_EXT
+       .nvm_type = IWL_NVM_EXT,                                        \
+       .ucode_api_min = IWL_HR_UCODE_API_MIN,                          \
+       .ucode_api_max = IWL_HR_UCODE_API_MAX
 
 const struct iwl_rf_cfg iwl_rf_hr1 = {
        IWL_DEVICE_HR,
@@ -40,3 +77,13 @@ const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
 const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
 const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
 const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
+
+MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_BZ_A_HR_B_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_SC_A_HR_A_FW_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL_SC_A_HR_B_FW_MODULE_FIRMWARE(IWL_HR_UCODE_API_MAX));
index 97e503a25eaeaf207d865286c270d1a56a385365..ab44298d421eea01a3e63ab3555f5ce77b1b4b6e 100644 (file)
@@ -24,8 +24,6 @@
 
 #define IWL_SC_A_FM_B_FW_PRE           "iwlwifi-sc-a0-fm-b0"
 #define IWL_SC_A_FM_C_FW_PRE           "iwlwifi-sc-a0-fm-c0"
-#define IWL_SC_A_HR_A_FW_PRE           "iwlwifi-sc-a0-hr-b0"
-#define IWL_SC_A_HR_B_FW_PRE           "iwlwifi-sc-a0-hr-b0"
 #define IWL_SC_A_GF_A_FW_PRE           "iwlwifi-sc-a0-gf-a0"
 #define IWL_SC_A_GF4_A_FW_PRE          "iwlwifi-sc-a0-gf4-a0"
 #define IWL_SC_A_WH_A_FW_PRE           "iwlwifi-sc-a0-wh-a0"
 #define IWL_SC2F_A_FM_C_FW_PRE         "iwlwifi-sc2f-a0-fm-c0"
 #define IWL_SC2F_A_WH_A_FW_PRE         "iwlwifi-sc2f-a0-wh-a0"
 
-#define IWL_SC_A_HR_A_FW_MODULE_FIRMWARE(api) \
-       IWL_SC_A_HR_A_FW_PRE "-" __stringify(api) ".ucode"
-#define IWL_SC_A_HR_B_FW_MODULE_FIRMWARE(api) \
-       IWL_SC_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
-
 static const struct iwl_family_base_params iwl_sc_base = {
        .num_of_queues = 512,
        .max_tfd_queue_size = 65536,
@@ -107,8 +100,6 @@ const struct iwl_mac_cfg iwl_sc_mac_cfg = {
 
 IWL_FW_AND_PNVM(IWL_SC_A_FM_B_FW_PRE, IWL_SC_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_SC_A_FM_C_FW_PRE, IWL_SC_UCODE_API_MAX);
-MODULE_FIRMWARE(IWL_SC_A_HR_A_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX));
-MODULE_FIRMWARE(IWL_SC_A_HR_B_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX));
 IWL_FW_AND_PNVM(IWL_SC_A_GF_A_FW_PRE, IWL_SC_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_SC_A_GF4_A_FW_PRE, IWL_SC_UCODE_API_MAX);
 IWL_FW_AND_PNVM(IWL_SC_A_WH_A_FW_PRE, IWL_SC_UCODE_API_MAX);