iwlwifi: don't disable SCD chain extension on newer devices
7000 device series have a fix for this hardware feature. Stop disabling it, and get an improvement in Tx throughput. This feature allows the scheduler to fetch more frames on the fly while an A-MPDU is being built - which means that we can get larger A-MPDU. This, of course, give an improvement in the Tx throughput. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
c6e37a686e
commit
e03bbb62cf
|
@ -62,6 +62,7 @@ static const struct iwl_base_params iwl1000_base_params = {
|
||||||
.led_compensation = 51,
|
.led_compensation = 51,
|
||||||
.wd_timeout = IWL_WATCHDOG_DISABLED,
|
.wd_timeout = IWL_WATCHDOG_DISABLED,
|
||||||
.max_event_log_size = 128,
|
.max_event_log_size = 128,
|
||||||
|
.scd_chain_ext_wa = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iwl_ht_params iwl1000_ht_params = {
|
static const struct iwl_ht_params iwl1000_ht_params = {
|
||||||
|
|
|
@ -75,6 +75,7 @@ static const struct iwl_base_params iwl2000_base_params = {
|
||||||
.wd_timeout = IWL_DEF_WD_TIMEOUT,
|
.wd_timeout = IWL_DEF_WD_TIMEOUT,
|
||||||
.max_event_log_size = 512,
|
.max_event_log_size = 512,
|
||||||
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
||||||
|
.scd_chain_ext_wa = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,6 +89,7 @@ static const struct iwl_base_params iwl2030_base_params = {
|
||||||
.wd_timeout = IWL_LONG_WD_TIMEOUT,
|
.wd_timeout = IWL_LONG_WD_TIMEOUT,
|
||||||
.max_event_log_size = 512,
|
.max_event_log_size = 512,
|
||||||
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
||||||
|
.scd_chain_ext_wa = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iwl_ht_params iwl2000_ht_params = {
|
static const struct iwl_ht_params iwl2000_ht_params = {
|
||||||
|
|
|
@ -61,6 +61,7 @@ static const struct iwl_base_params iwl5000_base_params = {
|
||||||
.led_compensation = 51,
|
.led_compensation = 51,
|
||||||
.wd_timeout = IWL_WATCHDOG_DISABLED,
|
.wd_timeout = IWL_WATCHDOG_DISABLED,
|
||||||
.max_event_log_size = 512,
|
.max_event_log_size = 512,
|
||||||
|
.scd_chain_ext_wa = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iwl_ht_params iwl5000_ht_params = {
|
static const struct iwl_ht_params iwl5000_ht_params = {
|
||||||
|
|
|
@ -85,6 +85,7 @@ static const struct iwl_base_params iwl6000_base_params = {
|
||||||
.wd_timeout = IWL_DEF_WD_TIMEOUT,
|
.wd_timeout = IWL_DEF_WD_TIMEOUT,
|
||||||
.max_event_log_size = 512,
|
.max_event_log_size = 512,
|
||||||
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
||||||
|
.scd_chain_ext_wa = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iwl_base_params iwl6050_base_params = {
|
static const struct iwl_base_params iwl6050_base_params = {
|
||||||
|
@ -97,6 +98,7 @@ static const struct iwl_base_params iwl6050_base_params = {
|
||||||
.wd_timeout = IWL_DEF_WD_TIMEOUT,
|
.wd_timeout = IWL_DEF_WD_TIMEOUT,
|
||||||
.max_event_log_size = 1024,
|
.max_event_log_size = 1024,
|
||||||
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
||||||
|
.scd_chain_ext_wa = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iwl_base_params iwl6000_g2_base_params = {
|
static const struct iwl_base_params iwl6000_g2_base_params = {
|
||||||
|
@ -109,6 +111,7 @@ static const struct iwl_base_params iwl6000_g2_base_params = {
|
||||||
.wd_timeout = IWL_LONG_WD_TIMEOUT,
|
.wd_timeout = IWL_LONG_WD_TIMEOUT,
|
||||||
.max_event_log_size = 512,
|
.max_event_log_size = 512,
|
||||||
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
|
||||||
|
.scd_chain_ext_wa = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iwl_ht_params iwl6000_ht_params = {
|
static const struct iwl_ht_params iwl6000_ht_params = {
|
||||||
|
|
|
@ -148,6 +148,7 @@ static inline u8 num_of_ant(u8 mask)
|
||||||
* @shadow_reg_enable: HW shadow register support
|
* @shadow_reg_enable: HW shadow register support
|
||||||
* @apmg_wake_up_wa: should the MAC access REQ be asserted when a command
|
* @apmg_wake_up_wa: should the MAC access REQ be asserted when a command
|
||||||
* is in flight. This is due to a HW bug in 7260, 3160 and 7265.
|
* is in flight. This is due to a HW bug in 7260, 3160 and 7265.
|
||||||
|
* @scd_chain_ext_wa: should the chain extension feature in SCD be disabled.
|
||||||
*/
|
*/
|
||||||
struct iwl_base_params {
|
struct iwl_base_params {
|
||||||
int eeprom_size;
|
int eeprom_size;
|
||||||
|
@ -163,6 +164,7 @@ struct iwl_base_params {
|
||||||
const bool shadow_reg_enable;
|
const bool shadow_reg_enable;
|
||||||
const bool pcie_l1_allowed;
|
const bool pcie_l1_allowed;
|
||||||
const bool apmg_wake_up_wa;
|
const bool apmg_wake_up_wa;
|
||||||
|
const bool scd_chain_ext_wa;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -696,7 +696,8 @@ void iwl_pcie_tx_start(struct iwl_trans *trans, u32 scd_base_addr)
|
||||||
/* The chain extension of the SCD doesn't work well. This feature is
|
/* The chain extension of the SCD doesn't work well. This feature is
|
||||||
* enabled by default by the HW, so we need to disable it manually.
|
* enabled by default by the HW, so we need to disable it manually.
|
||||||
*/
|
*/
|
||||||
iwl_write_prph(trans, SCD_CHAINEXT_EN, 0);
|
if (trans->cfg->base_params->scd_chain_ext_wa)
|
||||||
|
iwl_write_prph(trans, SCD_CHAINEXT_EN, 0);
|
||||||
|
|
||||||
iwl_trans_ac_txq_enable(trans, trans_pcie->cmd_queue,
|
iwl_trans_ac_txq_enable(trans, trans_pcie->cmd_queue,
|
||||||
trans_pcie->cmd_fifo);
|
trans_pcie->cmd_fifo);
|
||||||
|
|
Loading…
Reference in New Issue