Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iwlwifi: add support for quz firmwares

Add a new configuration with a new firmware name for quz devices.
And, since these devices have the same PCI device and subsystem IDs,
we need to add some code to switch from a normal qu firmware to the
quz firmware.

Signed-off-by: Luca Coelho <luciano.coelho@intel.com>

+22 -2
+16 -2
drivers/net/wireless/intel/iwlwifi/cfg/22000.c
··· 82 82 #define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-" 83 83 #define IWL_22000_SU_Z0_FW_PRE "iwlwifi-su-z0-" 84 84 #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-" 85 + #define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-" 85 86 #define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-" 86 87 #define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-" 87 88 #define IWL_22000_SO_A_JF_B_FW_PRE "iwlwifi-so-a0-jf-b0-" ··· 106 105 IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode" 107 106 #define IWL_22000_SU_Z0_MODULE_FIRMWARE(api) \ 108 107 IWL_22000_SU_Z0_FW_PRE __stringify(api) ".ucode" 109 - #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \ 110 - IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode" 108 + #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \ 109 + IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode" 111 110 #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \ 112 111 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode" 113 112 #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \ ··· 227 226 const struct iwl_cfg iwl_ax101_cfg_qu_hr = { 228 227 .name = "Intel(R) Wi-Fi 6 AX101", 229 228 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE, 229 + IWL_DEVICE_22500, 230 + /* 231 + * This device doesn't support receiving BlockAck with a large bitmap 232 + * so we need to restrict the size of transmitted aggregation to the 233 + * HT size; mac80211 would otherwise pick the HE max (256) by default. 234 + */ 235 + .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 236 + }; 237 + 238 + const struct iwl_cfg iwl_ax101_cfg_quz_hr = { 239 + .name = "Intel(R) Wi-Fi 6 AX101", 240 + .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, 230 241 IWL_DEVICE_22500, 231 242 /* 232 243 * This device doesn't support receiving BlockAck with a large bitmap ··· 457 444 MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 458 445 MODULE_FIRMWARE(IWL_22000_SU_Z0_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 459 446 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 447 + MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 460 448 MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 461 449 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 462 450 MODULE_FIRMWARE(IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+1
drivers/net/wireless/intel/iwlwifi/iwl-config.h
··· 549 549 extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb; 550 550 extern const struct iwl_cfg iwl22000_2ac_cfg_jf; 551 551 extern const struct iwl_cfg iwl_ax101_cfg_qu_hr; 552 + extern const struct iwl_cfg iwl_ax101_cfg_quz_hr; 552 553 extern const struct iwl_cfg iwl22000_2ax_cfg_hr; 553 554 extern const struct iwl_cfg iwl_ax200_cfg_cc; 554 555 extern const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0;
+1
drivers/net/wireless/intel/iwlwifi/iwl-csr.h
··· 327 327 #define CSR_HW_REV_TYPE_NONE (0x00001F0) 328 328 #define CSR_HW_REV_TYPE_QNJ (0x0000360) 329 329 #define CSR_HW_REV_TYPE_QNJ_B0 (0x0000364) 330 + #define CSR_HW_REV_TYPE_QUZ (0x0000354) 330 331 #define CSR_HW_REV_TYPE_HR_CDB (0x0000340) 331 332 #define CSR_HW_REV_TYPE_SO (0x0000370) 332 333 #define CSR_HW_REV_TYPE_TY (0x0000420)
+4
drivers/net/wireless/intel/iwlwifi/pcie/trans.c
··· 3543 3543 } 3544 3544 } else if (cfg == &iwl_ax101_cfg_qu_hr) { 3545 3545 if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) == 3546 + CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR) && 3547 + trans->hw_rev == CSR_HW_REV_TYPE_QNJ_B0) { 3548 + trans->cfg = &iwl22000_2ax_cfg_qnj_hr_b0; 3549 + } else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) == 3546 3550 CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR)) { 3547 3551 trans->cfg = &iwl_ax101_cfg_qu_hr; 3548 3552 } else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==