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

Commit a44acf90 authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'wireless-drivers-for-davem-2019-04-15' of...

Merge tag 'wireless-drivers-for-davem-2019-04-15' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers



Kalle Valo says:

====================
wireless-drivers fixes for 5.1

Second set of fixes for 5.1.

iwlwifi

* add some new PCI IDs (plus a struct name change they depend on)

* fix crypto with new devices, namely 22560 and above

* fix for a potential deadlock in the TX path

* a fix for offloaded rate-control

* support new PCI HW IDs which use a new FW

mt76

* fix lock initialisation and a possible deadlock

* aggregation fixes

rt2x00

* fix sequence numbering during retransmits
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 73248801 832bc250
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@
#define IWL_22000_HR_A0_FW_PRE		"iwlwifi-QuQnj-a0-hr-a0-"
#define IWL_22000_SU_Z0_FW_PRE		"iwlwifi-su-z0-"
#define IWL_QU_B_JF_B_FW_PRE		"iwlwifi-Qu-b0-jf-b0-"
#define IWL_QUZ_A_HR_B_FW_PRE		"iwlwifi-QuZ-a0-hr-b0-"
#define IWL_QNJ_B_JF_B_FW_PRE		"iwlwifi-QuQnj-b0-jf-b0-"
#define IWL_CC_A_FW_PRE			"iwlwifi-cc-a0-"
#define IWL_22000_SO_A_JF_B_FW_PRE	"iwlwifi-so-a0-jf-b0-"
@@ -105,8 +106,8 @@
	IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode"
#define IWL_22000_SU_Z0_MODULE_FIRMWARE(api) \
	IWL_22000_SU_Z0_FW_PRE __stringify(api) ".ucode"
#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
	IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
#define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
	IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
	IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
#define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api)		\
@@ -235,8 +236,20 @@ const struct iwl_cfg iwl_ax101_cfg_qu_hr = {
	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
};

const struct iwl_cfg iwl22260_2ax_cfg = {
	.name = "Intel(R) Wireless-AX 22260",
const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
	.name = "Intel(R) Wi-Fi 6 AX101",
	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
	IWL_DEVICE_22500,
	/*
	 * This device doesn't support receiving BlockAck with a large bitmap
	 * so we need to restrict the size of transmitted aggregation to the
	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
	 */
	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
};

const struct iwl_cfg iwl_ax200_cfg_cc = {
	.name = "Intel(R) Wi-Fi 6 AX200 160MHz",
	.fw_name_pre = IWL_CC_A_FW_PRE,
	IWL_DEVICE_22500,
	/*
@@ -249,7 +262,7 @@ const struct iwl_cfg iwl22260_2ax_cfg = {
};

const struct iwl_cfg killer1650x_2ax_cfg = {
	.name = "Killer(R) Wireless-AX 1650x Wireless Network Adapter (200NGW)",
	.name = "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)",
	.fw_name_pre = IWL_CC_A_FW_PRE,
	IWL_DEVICE_22500,
	/*
@@ -262,7 +275,7 @@ const struct iwl_cfg killer1650x_2ax_cfg = {
};

const struct iwl_cfg killer1650w_2ax_cfg = {
	.name = "Killer(R) Wireless-AX 1650w Wireless Network Adapter (200D2W)",
	.name = "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)",
	.fw_name_pre = IWL_CC_A_FW_PRE,
	IWL_DEVICE_22500,
	/*
@@ -328,7 +341,7 @@ const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0 = {
};

const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
	.name = "Killer(R) Wireless-AX 1650i Wireless Network Adapter (22560NGW)",
	.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
	.fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
	IWL_DEVICE_22500,
	/*
@@ -340,7 +353,7 @@ const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
};

const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
	.name = "Killer(R) Wireless-AX 1650s Wireless Network Adapter (22560D2W)",
	.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
	.fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
	IWL_DEVICE_22500,
	/*
@@ -444,6 +457,7 @@ MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL_22000_SU_Z0_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+8 −26
Original line number Diff line number Diff line
@@ -1614,6 +1614,7 @@ iwl_dump_ini_mem(struct iwl_fw_runtime *fwrt,
	if (!range) {
		IWL_ERR(fwrt, "Failed to fill region header: id=%d, type=%d\n",
			le32_to_cpu(reg->region_id), type);
		memset(*data, 0, le32_to_cpu((*data)->len));
		return;
	}

@@ -1623,6 +1624,7 @@ iwl_dump_ini_mem(struct iwl_fw_runtime *fwrt,
		if (range_size < 0) {
			IWL_ERR(fwrt, "Failed to dump region: id=%d, type=%d\n",
				le32_to_cpu(reg->region_id), type);
			memset(*data, 0, le32_to_cpu((*data)->len));
			return;
		}
		range = range + range_size;
@@ -1807,12 +1809,12 @@ _iwl_fw_error_ini_dump(struct iwl_fw_runtime *fwrt,

	trigger = fwrt->dump.active_trigs[id].trig;

	size = sizeof(*dump_file);
	size += iwl_fw_ini_get_trigger_len(fwrt, trigger);

	size = iwl_fw_ini_get_trigger_len(fwrt, trigger);
	if (!size)
		return NULL;

	size += sizeof(*dump_file);

	dump_file = vzalloc(size);
	if (!dump_file)
		return NULL;
@@ -1942,14 +1944,10 @@ int iwl_fw_dbg_error_collect(struct iwl_fw_runtime *fwrt,
	iwl_dump_error_desc->len = 0;

	ret = iwl_fw_dbg_collect_desc(fwrt, iwl_dump_error_desc, false, 0);
	if (ret) {
	if (ret)
		kfree(iwl_dump_error_desc);
	} else {
		set_bit(STATUS_FW_WAIT_DUMP, &fwrt->trans->status);

		/* trigger nmi to halt the fw */
		iwl_force_nmi(fwrt->trans);
	}
	else
		iwl_trans_sync_nmi(fwrt->trans);

	return ret;
}
@@ -2489,22 +2487,6 @@ IWL_EXPORT_SYMBOL(iwl_fw_dbg_apply_point);

void iwl_fwrt_stop_device(struct iwl_fw_runtime *fwrt)
{
	/* if the wait event timeout elapses instead of wake up then
	 * the driver did not receive NMI interrupt and can not assume the FW
	 * is halted
	 */
	int ret = wait_event_timeout(fwrt->trans->fw_halt_waitq,
				     !test_bit(STATUS_FW_WAIT_DUMP,
					       &fwrt->trans->status),
				     msecs_to_jiffies(2000));
	if (!ret) {
		/* failed to receive NMI interrupt, assuming the FW is stuck */
		set_bit(STATUS_FW_ERROR, &fwrt->trans->status);

		clear_bit(STATUS_FW_WAIT_DUMP, &fwrt->trans->status);
	}

	/* Assuming the op mode mutex is held at this point */
	iwl_fw_dbg_collect_sync(fwrt);

	iwl_trans_stop_device(fwrt->trans);
+0 −1
Original line number Diff line number Diff line
@@ -76,7 +76,6 @@ void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans,
	fwrt->ops_ctx = ops_ctx;
	INIT_DELAYED_WORK(&fwrt->dump.wk, iwl_fw_error_dump_wk);
	iwl_fwrt_dbgfs_register(fwrt, dbgfs_dir);
	init_waitqueue_head(&fwrt->trans->fw_halt_waitq);
}
IWL_EXPORT_SYMBOL(iwl_fw_runtime_init);

+2 −1
Original line number Diff line number Diff line
@@ -549,8 +549,9 @@ extern const struct iwl_cfg iwl22000_2ac_cfg_hr;
extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;
extern const struct iwl_cfg iwl22000_2ac_cfg_jf;
extern const struct iwl_cfg iwl_ax101_cfg_qu_hr;
extern const struct iwl_cfg iwl_ax101_cfg_quz_hr;
extern const struct iwl_cfg iwl22000_2ax_cfg_hr;
extern const struct iwl_cfg iwl22260_2ax_cfg;
extern const struct iwl_cfg iwl_ax200_cfg_cc;
extern const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0;
extern const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0;
extern const struct iwl_cfg killer1650x_2ax_cfg;
+1 −0
Original line number Diff line number Diff line
@@ -327,6 +327,7 @@ enum {
#define CSR_HW_REV_TYPE_NONE		(0x00001F0)
#define CSR_HW_REV_TYPE_QNJ		(0x0000360)
#define CSR_HW_REV_TYPE_QNJ_B0		(0x0000364)
#define CSR_HW_REV_TYPE_QUZ		(0x0000354)
#define CSR_HW_REV_TYPE_HR_CDB		(0x0000340)
#define CSR_HW_REV_TYPE_SO		(0x0000370)
#define CSR_HW_REV_TYPE_TY		(0x0000420)
Loading