diff options
author | Luca Coelho <luciano.coelho@intel.com> | 2019-07-08 11:55:34 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2019-07-15 13:46:00 -0400 |
commit | a7d544d63120061f89459585f06ca44d30842a22 (patch) | |
tree | 700b153e30950690546fc888b2e454187642bf03 /drivers/net/wireless | |
parent | ffcb60a54f245528e1d49f957ca2d20d6079577c (diff) |
iwlwifi: pcie: add support for qu c-step devices
Add support for C-step devices. Currently we don't have a nice way of
matching the step and choosing the proper configuration, so we need to
switch the config structs one by one.
Cc: stable@vger.kernel.org
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/cfg/22000.c | 53 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/iwl-config.h | 7 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/iwl-csr.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 21 |
4 files changed, 83 insertions, 0 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c index 93526dfaf791..1f500cddb3a7 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c | |||
@@ -80,7 +80,9 @@ | |||
80 | #define IWL_22000_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-" | 80 | #define IWL_22000_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-" |
81 | #define IWL_22000_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-" | 81 | #define IWL_22000_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-" |
82 | #define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-" | 82 | #define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-" |
83 | #define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-" | ||
83 | #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-" | 84 | #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-" |
85 | #define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-" | ||
84 | #define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-" | 86 | #define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-" |
85 | #define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-" | 87 | #define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-" |
86 | #define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-" | 88 | #define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-" |
@@ -109,6 +111,8 @@ | |||
109 | IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode" | 111 | IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode" |
110 | #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \ | 112 | #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \ |
111 | IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode" | 113 | IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode" |
114 | #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \ | ||
115 | IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode" | ||
112 | #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \ | 116 | #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \ |
113 | IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode" | 117 | IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode" |
114 | #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \ | 118 | #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \ |
@@ -256,6 +260,30 @@ const struct iwl_cfg iwl_ax201_cfg_qu_hr = { | |||
256 | .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, | 260 | .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, |
257 | }; | 261 | }; |
258 | 262 | ||
263 | const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0 = { | ||
264 | .name = "Intel(R) Wi-Fi 6 AX101", | ||
265 | .fw_name_pre = IWL_QU_C_HR_B_FW_PRE, | ||
266 | IWL_DEVICE_22500, | ||
267 | /* | ||
268 | * This device doesn't support receiving BlockAck with a large bitmap | ||
269 | * so we need to restrict the size of transmitted aggregation to the | ||
270 | * HT size; mac80211 would otherwise pick the HE max (256) by default. | ||
271 | */ | ||
272 | .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, | ||
273 | }; | ||
274 | |||
275 | const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = { | ||
276 | .name = "Intel(R) Wi-Fi 6 AX201 160MHz", | ||
277 | .fw_name_pre = IWL_QU_C_HR_B_FW_PRE, | ||
278 | IWL_DEVICE_22500, | ||
279 | /* | ||
280 | * This device doesn't support receiving BlockAck with a large bitmap | ||
281 | * so we need to restrict the size of transmitted aggregation to the | ||
282 | * HT size; mac80211 would otherwise pick the HE max (256) by default. | ||
283 | */ | ||
284 | .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, | ||
285 | }; | ||
286 | |||
259 | const struct iwl_cfg iwl_ax101_cfg_quz_hr = { | 287 | const struct iwl_cfg iwl_ax101_cfg_quz_hr = { |
260 | .name = "Intel(R) Wi-Fi 6 AX101", | 288 | .name = "Intel(R) Wi-Fi 6 AX101", |
261 | .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, | 289 | .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, |
@@ -372,6 +400,30 @@ const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0 = { | |||
372 | IWL_DEVICE_22500, | 400 | IWL_DEVICE_22500, |
373 | }; | 401 | }; |
374 | 402 | ||
403 | const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0 = { | ||
404 | .name = "Intel(R) Wireless-AC 9461", | ||
405 | .fw_name_pre = IWL_QU_C_JF_B_FW_PRE, | ||
406 | IWL_DEVICE_22500, | ||
407 | }; | ||
408 | |||
409 | const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0 = { | ||
410 | .name = "Intel(R) Wireless-AC 9462", | ||
411 | .fw_name_pre = IWL_QU_C_JF_B_FW_PRE, | ||
412 | IWL_DEVICE_22500, | ||
413 | }; | ||
414 | |||
415 | const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0 = { | ||
416 | .name = "Intel(R) Wireless-AC 9560", | ||
417 | .fw_name_pre = IWL_QU_C_JF_B_FW_PRE, | ||
418 | IWL_DEVICE_22500, | ||
419 | }; | ||
420 | |||
421 | const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0 = { | ||
422 | .name = "Intel(R) Wireless-AC 9560 160MHz", | ||
423 | .fw_name_pre = IWL_QU_C_JF_B_FW_PRE, | ||
424 | IWL_DEVICE_22500, | ||
425 | }; | ||
426 | |||
375 | const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = { | 427 | const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = { |
376 | .name = "Intel(R) Wireless-AC 9560 160MHz", | 428 | .name = "Intel(R) Wireless-AC 9560 160MHz", |
377 | .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE, | 429 | .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE, |
@@ -590,6 +642,7 @@ MODULE_FIRMWARE(IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | |||
590 | MODULE_FIRMWARE(IWL_22000_HR_B_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | 642 | MODULE_FIRMWARE(IWL_22000_HR_B_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
591 | MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | 643 | MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
592 | MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | 644 | MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
645 | MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | ||
593 | MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | 646 | MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
594 | MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | 647 | MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
595 | MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | 648 | MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h index bc267bd2c3b0..1c1bf1b281cd 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h | |||
@@ -565,10 +565,13 @@ extern const struct iwl_cfg iwl22000_2ac_cfg_hr; | |||
565 | extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb; | 565 | extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb; |
566 | extern const struct iwl_cfg iwl22000_2ac_cfg_jf; | 566 | extern const struct iwl_cfg iwl22000_2ac_cfg_jf; |
567 | extern const struct iwl_cfg iwl_ax101_cfg_qu_hr; | 567 | extern const struct iwl_cfg iwl_ax101_cfg_qu_hr; |
568 | extern const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0; | ||
568 | extern const struct iwl_cfg iwl_ax101_cfg_quz_hr; | 569 | extern const struct iwl_cfg iwl_ax101_cfg_quz_hr; |
569 | extern const struct iwl_cfg iwl22000_2ax_cfg_hr; | 570 | extern const struct iwl_cfg iwl22000_2ax_cfg_hr; |
570 | extern const struct iwl_cfg iwl_ax200_cfg_cc; | 571 | extern const struct iwl_cfg iwl_ax200_cfg_cc; |
571 | extern const struct iwl_cfg iwl_ax201_cfg_qu_hr; | 572 | extern const struct iwl_cfg iwl_ax201_cfg_qu_hr; |
573 | extern const struct iwl_cfg iwl_ax201_cfg_qu_hr; | ||
574 | extern const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0; | ||
572 | extern const struct iwl_cfg iwl_ax201_cfg_quz_hr; | 575 | extern const struct iwl_cfg iwl_ax201_cfg_quz_hr; |
573 | extern const struct iwl_cfg iwl_ax1650i_cfg_quz_hr; | 576 | extern const struct iwl_cfg iwl_ax1650i_cfg_quz_hr; |
574 | extern const struct iwl_cfg iwl_ax1650s_cfg_quz_hr; | 577 | extern const struct iwl_cfg iwl_ax1650s_cfg_quz_hr; |
@@ -580,6 +583,10 @@ extern const struct iwl_cfg iwl9461_2ac_cfg_qu_b0_jf_b0; | |||
580 | extern const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0; | 583 | extern const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0; |
581 | extern const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0; | 584 | extern const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0; |
582 | extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0; | 585 | extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0; |
586 | extern const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0; | ||
587 | extern const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0; | ||
588 | extern const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0; | ||
589 | extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0; | ||
583 | extern const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0; | 590 | extern const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0; |
584 | extern const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0; | 591 | extern const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0; |
585 | extern const struct iwl_cfg iwl22000_2ax_cfg_jf; | 592 | extern const struct iwl_cfg iwl22000_2ax_cfg_jf; |
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-csr.h b/drivers/net/wireless/intel/iwlwifi/iwl-csr.h index 93da96a7247c..cb4c5514a556 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-csr.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-csr.h | |||
@@ -328,6 +328,8 @@ enum { | |||
328 | #define CSR_HW_REV_TYPE_NONE (0x00001F0) | 328 | #define CSR_HW_REV_TYPE_NONE (0x00001F0) |
329 | #define CSR_HW_REV_TYPE_QNJ (0x0000360) | 329 | #define CSR_HW_REV_TYPE_QNJ (0x0000360) |
330 | #define CSR_HW_REV_TYPE_QNJ_B0 (0x0000364) | 330 | #define CSR_HW_REV_TYPE_QNJ_B0 (0x0000364) |
331 | #define CSR_HW_REV_TYPE_QU_B0 (0x0000334) | ||
332 | #define CSR_HW_REV_TYPE_QU_C0 (0x0000338) | ||
331 | #define CSR_HW_REV_TYPE_QUZ (0x0000354) | 333 | #define CSR_HW_REV_TYPE_QUZ (0x0000354) |
332 | #define CSR_HW_REV_TYPE_HR_CDB (0x0000340) | 334 | #define CSR_HW_REV_TYPE_HR_CDB (0x0000340) |
333 | #define CSR_HW_REV_TYPE_SO (0x0000370) | 335 | #define CSR_HW_REV_TYPE_SO (0x0000370) |
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index fe645380bd2f..ea2a03d4bf55 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c | |||
@@ -1039,6 +1039,27 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1039 | } | 1039 | } |
1040 | iwl_trans->cfg = cfg; | 1040 | iwl_trans->cfg = cfg; |
1041 | } | 1041 | } |
1042 | |||
1043 | /* | ||
1044 | * This is a hack to switch from Qu B0 to Qu C0. We need to | ||
1045 | * do this for all cfgs that use Qu B0. All this code is in | ||
1046 | * urgent need for a refactor, but for now this is the easiest | ||
1047 | * thing to do to support Qu C-step. | ||
1048 | */ | ||
1049 | if (iwl_trans->hw_rev == CSR_HW_REV_TYPE_QU_C0) { | ||
1050 | if (iwl_trans->cfg == &iwl_ax101_cfg_qu_hr) | ||
1051 | iwl_trans->cfg = &iwl_ax101_cfg_qu_c0_hr_b0; | ||
1052 | else if (iwl_trans->cfg == &iwl_ax201_cfg_qu_hr) | ||
1053 | iwl_trans->cfg = &iwl_ax201_cfg_qu_c0_hr_b0; | ||
1054 | else if (iwl_trans->cfg == &iwl9461_2ac_cfg_qu_b0_jf_b0) | ||
1055 | iwl_trans->cfg = &iwl9461_2ac_cfg_qu_c0_jf_b0; | ||
1056 | else if (iwl_trans->cfg == &iwl9462_2ac_cfg_qu_b0_jf_b0) | ||
1057 | iwl_trans->cfg = &iwl9462_2ac_cfg_qu_c0_jf_b0; | ||
1058 | else if (iwl_trans->cfg == &iwl9560_2ac_cfg_qu_b0_jf_b0) | ||
1059 | iwl_trans->cfg = &iwl9560_2ac_cfg_qu_c0_jf_b0; | ||
1060 | else if (iwl_trans->cfg == &iwl9560_2ac_160_cfg_qu_b0_jf_b0) | ||
1061 | iwl_trans->cfg = &iwl9560_2ac_160_cfg_qu_c0_jf_b0; | ||
1062 | } | ||
1042 | #endif | 1063 | #endif |
1043 | 1064 | ||
1044 | pci_set_drvdata(pdev, iwl_trans); | 1065 | pci_set_drvdata(pdev, iwl_trans); |