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

Merge tag 'wireless-drivers-next-2020-05-07' of...

Merge tag 'wireless-drivers-next-2020-05-07' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next



Kalle Valo says:

====================
wireless-drivers-next patches for v5.8

First set of patches for v5.8. Changes all over, ath10k apparently
seeing most new features this time. rtw88 also had lots of changes due
to preparation for new hardware support.

In this pull request there's also a new macro to include/linux/iopoll:
read_poll_timeout_atomic(). This is needed by rtw88 for atomic
polling.

Major changes:

ath11k

* add debugfs file for testing ADDBA and DELBA

* add 802.11 encapsulation offload on hardware support

* add htt_peer_stats_reset debugfs file

ath10k

* enable VHT160 and VHT80+80 modes

* enable radar detection in secondary segment

* sdio: disable TX complete indication to improve throughput

* sdio: decrease power consumption

* sdio: add HTT TX bundle support to increase throughput

* sdio: add rx bitrate reporting

ath9k

* improvements to AR9002 calibration logic

carl9170

* remove buggy P2P_GO support

p54usb

* add support for AirVasT USB stick

rtw88

* add support for antenna configuration

ti wlcore

* add support for AES_CMAC cipher

iwlwifi

* support for a few new FW API versions

* new hw configs
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 3031a86e 7f65f611
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -96,6 +96,17 @@ Optional properties:
- qcom,coexist-gpio-pin : gpio pin number  information to support coex
			  which will be used by wifi firmware.

* Subnodes
The ath10k wifi node can contain one optional firmware subnode.
Firmware subnode is needed when the platform does not have TustZone.
The firmware subnode must have:

- iommus:
	Usage: required
	Value type: <prop-encoded-array>
	Definition: A list of phandle and IOMMU specifier pairs.


Example (to supply PCI based wifi block details):

In this example, the node is defined as child node of the PCI controller.
@@ -196,4 +207,7 @@ wifi@18000000 {
		memory-region = <&wifi_msa_mem>;
		iommus = <&apps_smmu 0x0040 0x1>;
		qcom,msa-fixed-perm;
		wifi-firmware {
			iommus = <&apps_iommu 0xc22 0x1>;
		};
};
+1 −0
Original line number Diff line number Diff line
@@ -380,6 +380,7 @@ static int ath10k_bmi_lz_data_large(struct ath10k *ar, const void *buffer, u32 l
						  NULL, NULL);
		if (ret) {
			ath10k_warn(ar, "unable to write to the device\n");
			kfree(cmd);
			return ret;
		}

+1 −1
Original line number Diff line number Diff line
@@ -419,7 +419,7 @@ struct ce_pipe_config {
#define PIPEDIR_INOUT   3  /* bidirectional */

/* Establish a mapping between a service/direction and a pipe. */
struct service_to_pipe {
struct ce_service_to_pipe {
	__le32 service_id;
	__le32 pipedir;
	__le32 pipenum;
+19 −12
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
		.uart_pin_workaround = true,
		.tx_stats_over_pktlog = false,
		.bmi_large_size_download = true,
		.supports_peer_stats_info = true,
	},
	{
		.id = QCA6174_HW_2_1_VERSION,
@@ -723,14 +724,11 @@ static int ath10k_init_sdio(struct ath10k *ar, enum ath10k_firmware_mode mode)
	if (ret)
		return ret;

	/* Data transfer is not initiated, when reduced Tx completion
	 * is used for SDIO. disable it until fixed
	 */
	param &= ~HI_ACS_FLAGS_SDIO_REDUCE_TX_COMPL_SET;
	param |= HI_ACS_FLAGS_SDIO_REDUCE_TX_COMPL_SET;

	/* Alternate credit size of 1544 as used by SDIO firmware is
	 * not big enough for mac80211 / native wifi frames. disable it
	 */
	if (mode == ATH10K_FIRMWARE_MODE_NORMAL)
		param |= HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE;
	else
		param &= ~HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE;

	if (mode == ATH10K_FIRMWARE_MODE_UTF)
@@ -2717,7 +2715,7 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
		goto err_hif_stop;
	}

	status = ath10k_hif_swap_mailbox(ar);
	status = ath10k_hif_start_post(ar);
	if (status) {
		ath10k_err(ar, "failed to swap mailbox: %d\n", status);
		goto err_hif_stop;
@@ -3280,6 +3278,7 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
	init_completion(&ar->thermal.wmi_sync);
	init_completion(&ar->bss_survey_done);
	init_completion(&ar->peer_delete_done);
	init_completion(&ar->peer_stats_info_complete);

	INIT_DELAYED_WORK(&ar->scan.timeout, ath10k_scan_timeout_work);

@@ -3291,6 +3290,11 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
	if (!ar->workqueue_aux)
		goto err_free_wq;

	ar->workqueue_tx_complete =
		create_singlethread_workqueue("ath10k_tx_complete_wq");
	if (!ar->workqueue_tx_complete)
		goto err_free_aux_wq;

	mutex_init(&ar->conf_mutex);
	mutex_init(&ar->dump_mutex);
	spin_lock_init(&ar->data_lock);
@@ -3318,7 +3322,7 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,

	ret = ath10k_coredump_create(ar);
	if (ret)
		goto err_free_aux_wq;
		goto err_free_tx_complete;

	ret = ath10k_debug_create(ar);
	if (ret)
@@ -3328,12 +3332,12 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,

err_free_coredump:
	ath10k_coredump_destroy(ar);

err_free_tx_complete:
	destroy_workqueue(ar->workqueue_tx_complete);
err_free_aux_wq:
	destroy_workqueue(ar->workqueue_aux);
err_free_wq:
	destroy_workqueue(ar->workqueue);

err_free_mac:
	ath10k_mac_destroy(ar);

@@ -3349,6 +3353,9 @@ void ath10k_core_destroy(struct ath10k *ar)
	flush_workqueue(ar->workqueue_aux);
	destroy_workqueue(ar->workqueue_aux);

	flush_workqueue(ar->workqueue_tx_complete);
	destroy_workqueue(ar->workqueue_tx_complete);

	ath10k_debug_destroy(ar);
	ath10k_coredump_destroy(ar);
	ath10k_htt_tx_destroy(&ar->htt);
+35 −1
Original line number Diff line number Diff line
@@ -149,6 +149,26 @@ static inline u32 host_interest_item_address(u32 item_offset)
	return QCA988X_HOST_INTEREST_ADDRESS + item_offset;
}

enum ath10k_phy_mode {
	ATH10K_PHY_MODE_LEGACY = 0,
	ATH10K_PHY_MODE_HT = 1,
	ATH10K_PHY_MODE_VHT = 2,
};

/* Data rate 100KBPS based on IE Index */
struct ath10k_index_ht_data_rate_type {
	u8   beacon_rate_index;
	u16  supported_rate[4];
};

/* Data rate 100KBPS based on IE Index */
struct ath10k_index_vht_data_rate_type {
	u8   beacon_rate_index;
	u16  supported_VHT80_rate[2];
	u16  supported_VHT40_rate[2];
	u16  supported_VHT20_rate[2];
};

struct ath10k_bmi {
	bool done_sent;
};
@@ -500,8 +520,14 @@ struct ath10k_sta {
	u16 peer_id;
	struct rate_info txrate;
	struct ieee80211_tx_info tx_info;
	u32 tx_retries;
	u32 tx_failed;
	u32 last_tx_bitrate;

	u32 rx_rate_code;
	u32 rx_bitrate_kbps;
	u32 tx_rate_code;
	u32 tx_bitrate_kbps;
	struct work_struct update_wk;
	u64 rx_duration;
	struct ath10k_htt_tx_stats *tx_stats;
@@ -949,6 +975,11 @@ struct ath10k {
	struct ieee80211_hw *hw;
	struct ieee80211_ops *ops;
	struct device *dev;
	struct msa_region {
		dma_addr_t paddr;
		u32 mem_size;
		void *vaddr;
	} msa;
	u8 mac_addr[ETH_ALEN];

	enum ath10k_hw_rev hw_rev;
@@ -1087,11 +1118,12 @@ struct ath10k {
	int last_wmi_vdev_start_status;
	struct completion vdev_setup_done;
	struct completion vdev_delete_done;
	struct completion peer_stats_info_complete;

	struct workqueue_struct *workqueue;
	/* Auxiliary workqueue */
	struct workqueue_struct *workqueue_aux;

	struct workqueue_struct *workqueue_tx_complete;
	/* prevents concurrent FW reconfiguration */
	struct mutex conf_mutex;

@@ -1132,6 +1164,8 @@ struct ath10k {

	struct work_struct register_work;
	struct work_struct restart_work;
	struct work_struct bundle_tx_work;
	struct work_struct tx_complete_work;

	/* cycle count is reported twice for each visited channel during scan.
	 * access protected by data_lock
Loading