Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 368bd88e authored by Kalle Valo's avatar Kalle Valo
Browse files

Merge tag 'iwlwifi-for-kalle-2017-08-02' of...

Merge tag 'iwlwifi-for-kalle-2017-08-02' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes

Some fixes in iwlwifi for 4.13

* Some simple PCI HW ID fix-ups and additions for family 9000;
* A couple of bugzilla fixes:
  - Remove a bogus warning message with new FWs (196915)
  - Don't allow illegal channel options to be used (195299)
* A fix for checksum offload in family 9000;
* A fix serious throughput degradation in 11ac with multiple streams;
* An old bug in SMPS where the firmware was not aware of SMPS changes;
parents 5f5d0314 558f479f
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ static const struct iwl_tt_params iwl9000_tt_params = {
const struct iwl_cfg iwl9160_2ac_cfg = {
	.name = "Intel(R) Dual Band Wireless AC 9160",
	.fw_name_pre = IWL9260A_FW_PRE,
	.fw_name_pre_next_step = IWL9260B_FW_PRE,
	.fw_name_pre_b_or_c_step = IWL9260B_FW_PRE,
	IWL_DEVICE_9000,
	.ht_params = &iwl9000_ht_params,
	.nvm_ver = IWL9000_NVM_VERSION,
@@ -165,7 +165,7 @@ const struct iwl_cfg iwl9160_2ac_cfg = {
const struct iwl_cfg iwl9260_2ac_cfg = {
	.name = "Intel(R) Dual Band Wireless AC 9260",
	.fw_name_pre = IWL9260A_FW_PRE,
	.fw_name_pre_next_step = IWL9260B_FW_PRE,
	.fw_name_pre_b_or_c_step = IWL9260B_FW_PRE,
	IWL_DEVICE_9000,
	.ht_params = &iwl9000_ht_params,
	.nvm_ver = IWL9000_NVM_VERSION,
@@ -176,7 +176,7 @@ const struct iwl_cfg iwl9260_2ac_cfg = {
const struct iwl_cfg iwl9270_2ac_cfg = {
	.name = "Intel(R) Dual Band Wireless AC 9270",
	.fw_name_pre = IWL9260A_FW_PRE,
	.fw_name_pre_next_step = IWL9260B_FW_PRE,
	.fw_name_pre_b_or_c_step = IWL9260B_FW_PRE,
	IWL_DEVICE_9000,
	.ht_params = &iwl9000_ht_params,
	.nvm_ver = IWL9000_NVM_VERSION,
@@ -186,8 +186,8 @@ const struct iwl_cfg iwl9270_2ac_cfg = {

const struct iwl_cfg iwl9460_2ac_cfg = {
	.name = "Intel(R) Dual Band Wireless AC 9460",
	.fw_name_pre = IWL9000_FW_PRE,
	.fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
	.fw_name_pre = IWL9260A_FW_PRE,
	.fw_name_pre_b_or_c_step = IWL9260B_FW_PRE,
	IWL_DEVICE_9000,
	.ht_params = &iwl9000_ht_params,
	.nvm_ver = IWL9000_NVM_VERSION,
@@ -198,8 +198,8 @@ const struct iwl_cfg iwl9460_2ac_cfg = {

const struct iwl_cfg iwl9560_2ac_cfg = {
	.name = "Intel(R) Dual Band Wireless AC 9560",
	.fw_name_pre = IWL9000_FW_PRE,
	.fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
	.fw_name_pre = IWL9260A_FW_PRE,
	.fw_name_pre_b_or_c_step = IWL9260B_FW_PRE,
	IWL_DEVICE_9000,
	.ht_params = &iwl9000_ht_params,
	.nvm_ver = IWL9000_NVM_VERSION,
+2 −0
Original line number Diff line number Diff line
@@ -328,6 +328,7 @@ typedef unsigned int __bitwise iwl_ucode_tlv_capa_t;
 * @IWL_UCODE_TLV_CAPA_TX_POWER_ACK: reduced TX power API has larger
 *	command size (command version 4) that supports toggling ACK TX
 *	power reduction.
 * @IWL_UCODE_TLV_CAPA_MLME_OFFLOAD: supports MLME offload
 *
 * @NUM_IWL_UCODE_TLV_CAPA: number of bits used
 */
@@ -373,6 +374,7 @@ enum iwl_ucode_tlv_capa {
	IWL_UCODE_TLV_CAPA_EXTEND_SHARED_MEM_CFG	= (__force iwl_ucode_tlv_capa_t)80,
	IWL_UCODE_TLV_CAPA_LQM_SUPPORT			= (__force iwl_ucode_tlv_capa_t)81,
	IWL_UCODE_TLV_CAPA_TX_POWER_ACK			= (__force iwl_ucode_tlv_capa_t)84,
	IWL_UCODE_TLV_CAPA_MLME_OFFLOAD			= (__force iwl_ucode_tlv_capa_t)96,

	NUM_IWL_UCODE_TLV_CAPA
#ifdef __CHECKER__
+4 −4
Original line number Diff line number Diff line
@@ -276,10 +276,10 @@ struct iwl_pwr_tx_backoff {
 * @fw_name_pre: Firmware filename prefix. The api version and extension
 *	(.ucode) will be added to filename before loading from disk. The
 *	filename is constructed as fw_name_pre<api>.ucode.
 * @fw_name_pre_next_step: same as @fw_name_pre, only for next step
 * @fw_name_pre_b_or_c_step: same as @fw_name_pre, only for b or c steps
 *	(if supported)
 * @fw_name_pre_rf_next_step: same as @fw_name_pre_next_step, only for rf next
 *	step. Supported only in integrated solutions.
 * @fw_name_pre_rf_next_step: same as @fw_name_pre_b_or_c_step, only for rf
 *	next step. Supported only in integrated solutions.
 * @ucode_api_max: Highest version of uCode API supported by driver.
 * @ucode_api_min: Lowest version of uCode API supported by driver.
 * @max_inst_size: The maximal length of the fw inst section
@@ -330,7 +330,7 @@ struct iwl_cfg {
	/* params specific to an individual device within a device family */
	const char *name;
	const char *fw_name_pre;
	const char *fw_name_pre_next_step;
	const char *fw_name_pre_b_or_c_step;
	const char *fw_name_pre_rf_next_step;
	/* params not likely to change within a device family */
	const struct iwl_base_params *base_params;
+3 −2
Original line number Diff line number Diff line
@@ -216,8 +216,9 @@ static int iwl_request_firmware(struct iwl_drv *drv, bool first)
	const char *fw_pre_name;

	if (drv->trans->cfg->device_family == IWL_DEVICE_FAMILY_9000 &&
	    CSR_HW_REV_STEP(drv->trans->hw_rev) == SILICON_B_STEP)
		fw_pre_name = cfg->fw_name_pre_next_step;
	    (CSR_HW_REV_STEP(drv->trans->hw_rev) == SILICON_B_STEP ||
	     CSR_HW_REV_STEP(drv->trans->hw_rev) == SILICON_C_STEP))
		fw_pre_name = cfg->fw_name_pre_b_or_c_step;
	else if (drv->trans->cfg->integrated &&
		 CSR_HW_RFID_STEP(drv->trans->hw_rf_id) == SILICON_B_STEP &&
		 cfg->fw_name_pre_rf_next_step)
+11 −8
Original line number Diff line number Diff line
@@ -785,7 +785,8 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
		       int num_of_ch, __le32 *channels, u16 fw_mcc)
{
	int ch_idx;
	u16 ch_flags, prev_ch_flags = 0;
	u16 ch_flags;
	u32 reg_rule_flags, prev_reg_rule_flags = 0;
	const u8 *nvm_chan = cfg->ext_nvm ?
			     iwl_ext_nvm_channels : iwl_nvm_channels;
	struct ieee80211_regdomain *regd;
@@ -834,8 +835,11 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
			continue;
		}

		reg_rule_flags = iwl_nvm_get_regdom_bw_flags(nvm_chan, ch_idx,
							     ch_flags, cfg);

		/* we can't continue the same rule */
		if (ch_idx == 0 || prev_ch_flags != ch_flags ||
		if (ch_idx == 0 || prev_reg_rule_flags != reg_rule_flags ||
		    center_freq - prev_center_freq > 20) {
			valid_rules++;
			new_rule = true;
@@ -854,18 +858,17 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
		rule->power_rule.max_eirp =
			DBM_TO_MBM(IWL_DEFAULT_MAX_TX_POWER);

		rule->flags = iwl_nvm_get_regdom_bw_flags(nvm_chan, ch_idx,
							  ch_flags, cfg);
		rule->flags = reg_rule_flags;

		/* rely on auto-calculation to merge BW of contiguous chans */
		rule->flags |= NL80211_RRF_AUTO_BW;
		rule->freq_range.max_bandwidth_khz = 0;

		prev_ch_flags = ch_flags;
		prev_center_freq = center_freq;
		prev_reg_rule_flags = reg_rule_flags;

		IWL_DEBUG_DEV(dev, IWL_DL_LAR,
			      "Ch. %d [%sGHz] %s%s%s%s%s%s%s%s%s(0x%02x): Ad-Hoc %ssupported\n",
			      "Ch. %d [%sGHz] %s%s%s%s%s%s%s%s%s(0x%02x) reg_flags 0x%x: %s\n",
			      center_freq,
			      band == NL80211_BAND_5GHZ ? "5.2" : "2.4",
			      CHECK_AND_PRINT_I(VALID),
@@ -877,10 +880,10 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
			      CHECK_AND_PRINT_I(160MHZ),
			      CHECK_AND_PRINT_I(INDOOR_ONLY),
			      CHECK_AND_PRINT_I(GO_CONCURRENT),
			      ch_flags,
			      ch_flags, reg_rule_flags,
			      ((ch_flags & NVM_CHANNEL_ACTIVE) &&
			       !(ch_flags & NVM_CHANNEL_RADAR))
					 ? "" : "not ");
					 ? "Ad-Hoc" : "");
	}

	regd->n_reg_rules = valid_rules;
Loading