iwlwifi: introduce device family 22560

Device 22560 have many different hw and sw features than 22000 family,
so introduce a new family of devices - 22560.

Signed-off-by: Golan Ben Ami <golan.ben.ami@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
Golan Ben Ami 2018-02-07 20:08:56 +02:00 committed by Luca Coelho
parent c8f1b51e50
commit 5f01df3f58
5 changed files with 55 additions and 60 deletions

View File

@ -116,10 +116,9 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ), .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
}; };
#define IWL_DEVICE_22000 \ #define IWL_DEVICE_22000_COMMON \
.ucode_api_max = IWL_22000_UCODE_API_MAX, \ .ucode_api_max = IWL_22000_UCODE_API_MAX, \
.ucode_api_min = IWL_22000_UCODE_API_MIN, \ .ucode_api_min = IWL_22000_UCODE_API_MIN, \
.device_family = IWL_DEVICE_FAMILY_22000, \
.base_params = &iwl_22000_base_params, \ .base_params = &iwl_22000_base_params, \
.led_mode = IWL_LED_RF_STATE, \ .led_mode = IWL_LED_RF_STATE, \
.nvm_hw_section_num = NVM_HW_SECTION_NUM_FAMILY_22000, \ .nvm_hw_section_num = NVM_HW_SECTION_NUM_FAMILY_22000, \
@ -135,6 +134,10 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
.mq_rx_supported = true, \ .mq_rx_supported = true, \
.vht_mu_mimo_supported = true, \ .vht_mu_mimo_supported = true, \
.mac_addr_from_csr = true, \ .mac_addr_from_csr = true, \
.ht_params = &iwl_22000_ht_params, \
.nvm_ver = IWL_22000_NVM_VERSION, \
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, \
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, \
.use_tfh = true, \ .use_tfh = true, \
.rf_id = true, \ .rf_id = true, \
.gen2 = true, \ .gen2 = true, \
@ -142,60 +145,51 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
.dbgc_supported = true, \ .dbgc_supported = true, \
.min_umac_error_event_table = 0x400000 .min_umac_error_event_table = 0x400000
#define IWL_DEVICE_22500 \
IWL_DEVICE_22000_COMMON, \
.device_family = IWL_DEVICE_FAMILY_22000, \
.csr = &iwl_csr_v1
#define IWL_DEVICE_22560 \
IWL_DEVICE_22000_COMMON, \
.device_family = IWL_DEVICE_FAMILY_22560, \
.csr = &iwl_csr_v2
const struct iwl_cfg iwl22000_2ac_cfg_hr = { const struct iwl_cfg iwl22000_2ac_cfg_hr = {
.name = "Intel(R) Dual Band Wireless AC 22000", .name = "Intel(R) Dual Band Wireless AC 22000",
.fw_name_pre = IWL_22000_HR_FW_PRE, .fw_name_pre = IWL_22000_HR_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1,
.ht_params = &iwl_22000_ht_params,
.nvm_ver = IWL_22000_NVM_VERSION,
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
}; };
const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb = { const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb = {
.name = "Intel(R) Dual Band Wireless AC 22000", .name = "Intel(R) Dual Band Wireless AC 22000",
.fw_name_pre = IWL_22000_HR_CDB_FW_PRE, .fw_name_pre = IWL_22000_HR_CDB_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1,
.ht_params = &iwl_22000_ht_params,
.nvm_ver = IWL_22000_NVM_VERSION,
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
.cdb = true, .cdb = true,
}; };
const struct iwl_cfg iwl22000_2ac_cfg_jf = { const struct iwl_cfg iwl22000_2ac_cfg_jf = {
.name = "Intel(R) Dual Band Wireless AC 22000", .name = "Intel(R) Dual Band Wireless AC 22000",
.fw_name_pre = IWL_22000_JF_FW_PRE, .fw_name_pre = IWL_22000_JF_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1,
.ht_params = &iwl_22000_ht_params,
.nvm_ver = IWL_22000_NVM_VERSION,
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
}; };
const struct iwl_cfg iwl22000_2ax_cfg_hr = { const struct iwl_cfg iwl22000_2ax_cfg_hr = {
.name = "Intel(R) Dual Band Wireless AX 22000", .name = "Intel(R) Dual Band Wireless AX 22000",
.fw_name_pre = IWL_22000_HR_FW_PRE, .fw_name_pre = IWL_22000_HR_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1, /*
.ht_params = &iwl_22000_ht_params, * This device doesn't support receiving BlockAck with a large bitmap
.nvm_ver = IWL_22000_NVM_VERSION, * so we need to restrict the size of transmitted aggregation to the
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, * HT size; mac80211 would otherwise pick the HE max (256) by default.
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, */
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
}; };
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = { const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
.name = "Intel(R) Dual Band Wireless AX 22000", .name = "Intel(R) Dual Band Wireless AX 22000",
.fw_name_pre = IWL_22000_HR_A_F0_FW_PRE, .fw_name_pre = IWL_22000_HR_A_F0_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1,
.ht_params = &iwl_22000_ht_params,
.nvm_ver = IWL_22000_NVM_VERSION,
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
/* /*
* This device doesn't support receiving BlockAck with a large bitmap * This device doesn't support receiving BlockAck with a large bitmap
* so we need to restrict the size of transmitted aggregation to the * so we need to restrict the size of transmitted aggregation to the
@ -207,45 +201,43 @@ const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = { const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = {
.name = "Intel(R) Dual Band Wireless AX 22000", .name = "Intel(R) Dual Band Wireless AX 22000",
.fw_name_pre = IWL_22000_HR_B_FW_PRE, .fw_name_pre = IWL_22000_HR_B_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1, /*
.ht_params = &iwl_22000_ht_params, * This device doesn't support receiving BlockAck with a large bitmap
.nvm_ver = IWL_22000_NVM_VERSION, * so we need to restrict the size of transmitted aggregation to the
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, * HT size; mac80211 would otherwise pick the HE max (256) by default.
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, */
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
}; };
const struct iwl_cfg iwl22000_2ax_cfg_qnj_jf_b0 = { const struct iwl_cfg iwl22000_2ax_cfg_qnj_jf_b0 = {
.name = "Intel(R) Dual Band Wireless AX 22000", .name = "Intel(R) Dual Band Wireless AX 22000",
.fw_name_pre = IWL_22000_JF_B0_FW_PRE, .fw_name_pre = IWL_22000_JF_B0_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1, /*
.ht_params = &iwl_22000_ht_params, * This device doesn't support receiving BlockAck with a large bitmap
.nvm_ver = IWL_22000_NVM_VERSION, * so we need to restrict the size of transmitted aggregation to the
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, * HT size; mac80211 would otherwise pick the HE max (256) by default.
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, */
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
}; };
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = { const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = {
.name = "Intel(R) Dual Band Wireless AX 22000", .name = "Intel(R) Dual Band Wireless AX 22000",
.fw_name_pre = IWL_22000_HR_A0_FW_PRE, .fw_name_pre = IWL_22000_HR_A0_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22500,
.csr = &iwl_csr_v1, /*
.ht_params = &iwl_22000_ht_params, * This device doesn't support receiving BlockAck with a large bitmap
.nvm_ver = IWL_22000_NVM_VERSION, * so we need to restrict the size of transmitted aggregation to the
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, * HT size; mac80211 would otherwise pick the HE max (256) by default.
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, */
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
}; };
const struct iwl_cfg iwl22560_2ax_cfg_su_cdb = { const struct iwl_cfg iwl22560_2ax_cfg_su_cdb = {
.name = "Intel(R) Dual Band Wireless AX 22560", .name = "Intel(R) Dual Band Wireless AX 22560",
.fw_name_pre = IWL_22000_SU_Z0_FW_PRE, .fw_name_pre = IWL_22000_SU_Z0_FW_PRE,
IWL_DEVICE_22000, IWL_DEVICE_22560,
.csr = &iwl_csr_v2,
.ht_params = &iwl_22000_ht_params,
.nvm_ver = IWL_22000_NVM_VERSION,
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
.cdb = true, .cdb = true,
/* /*
* This device doesn't support receiving BlockAck with a large bitmap * This device doesn't support receiving BlockAck with a large bitmap

View File

@ -8,6 +8,7 @@
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
* Copyright(c) 2018 Intel Corporation
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of version 2 of the GNU General Public License as * it under the terms of version 2 of the GNU General Public License as
@ -30,6 +31,7 @@
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
* Copyright(c) 2018 Intel Corporation
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -143,7 +145,7 @@ void iwl_get_shared_mem_conf(struct iwl_fw_runtime *fwrt)
return; return;
pkt = cmd.resp_pkt; pkt = cmd.resp_pkt;
if (fwrt->trans->cfg->device_family == IWL_DEVICE_FAMILY_22000) if (fwrt->trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000)
iwl_parse_shared_mem_22000(fwrt, pkt); iwl_parse_shared_mem_22000(fwrt, pkt);
else else
iwl_parse_shared_mem(fwrt, pkt); iwl_parse_shared_mem(fwrt, pkt);

View File

@ -93,6 +93,7 @@ enum iwl_device_family {
IWL_DEVICE_FAMILY_8000, IWL_DEVICE_FAMILY_8000,
IWL_DEVICE_FAMILY_9000, IWL_DEVICE_FAMILY_9000,
IWL_DEVICE_FAMILY_22000, IWL_DEVICE_FAMILY_22000,
IWL_DEVICE_FAMILY_22560,
}; };
/* /*

View File

@ -301,7 +301,7 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm,
if (ret) { if (ret) {
struct iwl_trans *trans = mvm->trans; struct iwl_trans *trans = mvm->trans;
if (trans->cfg->device_family == IWL_DEVICE_FAMILY_22000) if (trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000)
IWL_ERR(mvm, IWL_ERR(mvm,
"SecBoot CPU1 Status: 0x%x, CPU2 Status: 0x%x\n", "SecBoot CPU1 Status: 0x%x, CPU2 Status: 0x%x\n",
iwl_read_prph(trans, UMAG_SB_CPU_1_STATUS), iwl_read_prph(trans, UMAG_SB_CPU_1_STATUS),
@ -1009,7 +1009,7 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
/* Init RSS configuration */ /* Init RSS configuration */
/* TODO - remove 22000 disablement when we have RXQ config API */ /* TODO - remove 22000 disablement when we have RXQ config API */
if (iwl_mvm_has_new_rx_api(mvm) && if (iwl_mvm_has_new_rx_api(mvm) &&
mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_22000) { mvm->trans->cfg->device_family < IWL_DEVICE_FAMILY_22000) {
ret = iwl_send_rss_cfg_cmd(mvm); ret = iwl_send_rss_cfg_cmd(mvm);
if (ret) { if (ret) {
IWL_ERR(mvm, "Failed to configure RSS queues: %d\n", IWL_ERR(mvm, "Failed to configure RSS queues: %d\n",

View File

@ -4559,7 +4559,7 @@ void iwl_mvm_sync_rx_queues_internal(struct iwl_mvm *mvm,
mvm->trans->num_rx_queues); mvm->trans->num_rx_queues);
/* TODO - remove this when we have RXQ config API */ /* TODO - remove this when we have RXQ config API */
if (mvm->trans->cfg->device_family == IWL_DEVICE_FAMILY_22000) { if (mvm->trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000) {
qmask = BIT(0); qmask = BIT(0);
if (notif->sync) if (notif->sync)
atomic_set(&mvm->queue_sync_counter, 1); atomic_set(&mvm->queue_sync_counter, 1);