mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	mac80211: ath11k: sync with ath-next
Synchronize the ath11k backports with the current ath-next tree. All of the changes are various bugfixes, there is no new major feature. Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
		
							parent
							
								
									10eea40f7b
								
							
						
					
					
						commit
						b33bfcf9fa
					
				@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					From 72c8caf904aed2caed5d6e75233294b6159ddb5d Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Aditya Kumar Singh <quic_adisi@quicinc.com>
 | 
				
			||||||
 | 
					Date: Wed, 26 Jul 2023 10:16:24 +0530
 | 
				
			||||||
 | 
					Subject: [PATCH 1/5] wifi: ath11k: fix band selection for ppdu received in
 | 
				
			||||||
 | 
					 channel 177 of 5 GHz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					5 GHz band channel 177 support was added with the commit e5e94d10c856 ("wifi:
 | 
				
			||||||
 | 
					ath11k: add channel 177 into 5 GHz channel list"). However, during processing
 | 
				
			||||||
 | 
					for the received ppdu in ath11k_dp_rx_h_ppdu(), channel number is checked only
 | 
				
			||||||
 | 
					till 173. This leads to driver code checking for channel and then fetching the
 | 
				
			||||||
 | 
					band from it which is extra effort since firmware has already given the channel
 | 
				
			||||||
 | 
					number in the metadata.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fix this issue by checking the channel number till 177 since we support
 | 
				
			||||||
 | 
					it now.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Found via code review. Compile tested only.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fixes: e5e94d10c856 ("wifi: ath11k: add channel 177 into 5 GHz channel list")
 | 
				
			||||||
 | 
					Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230726044624.20507-1-quic_adisi@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/dp_rx.c | 2 +-
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
 | 
				
			||||||
 | 
					@@ -2408,7 +2408,7 @@ static void ath11k_dp_rx_h_ppdu(struct a
 | 
				
			||||||
 | 
					 		rx_status->freq = center_freq;
 | 
				
			||||||
 | 
					 	} else if (channel_num >= 1 && channel_num <= 14) {
 | 
				
			||||||
 | 
					 		rx_status->band = NL80211_BAND_2GHZ;
 | 
				
			||||||
 | 
					-	} else if (channel_num >= 36 && channel_num <= 173) {
 | 
				
			||||||
 | 
					+	} else if (channel_num >= 36 && channel_num <= 177) {
 | 
				
			||||||
 | 
					 		rx_status->band = NL80211_BAND_5GHZ;
 | 
				
			||||||
 | 
					 	} else {
 | 
				
			||||||
 | 
					 		spin_lock_bh(&ar->data_lock);
 | 
				
			||||||
@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					From 6f092c98dcfa1e4cf37d45f9b8e4d4a3cbeb79d4 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Dmitry Antipov <dmantipov@yandex.ru>
 | 
				
			||||||
 | 
					Date: Wed, 26 Jul 2023 12:21:02 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH 2/5] wifi: ath11k: simplify
 | 
				
			||||||
 | 
					 ath11k_mac_validate_vht_he_fixed_rate_settings()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In ath11k_mac_validate_vht_he_fixed_rate_settings() ar->ab->peers
 | 
				
			||||||
 | 
					list is not altered so list_for_each_entry() should be safe.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Compile tested only.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230726092113.78794-1-dmantipov@yandex.ru
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/mac.c | 4 ++--
 | 
				
			||||||
 | 
					 1 file changed, 2 insertions(+), 2 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/mac.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/mac.c
 | 
				
			||||||
 | 
					@@ -8255,7 +8255,7 @@ ath11k_mac_validate_vht_he_fixed_rate_se
 | 
				
			||||||
 | 
					 					       const struct cfg80211_bitrate_mask *mask)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	bool he_fixed_rate = false, vht_fixed_rate = false;
 | 
				
			||||||
 | 
					-	struct ath11k_peer *peer, *tmp;
 | 
				
			||||||
 | 
					+	struct ath11k_peer *peer;
 | 
				
			||||||
 | 
					 	const u16 *vht_mcs_mask, *he_mcs_mask;
 | 
				
			||||||
 | 
					 	struct ieee80211_link_sta *deflink;
 | 
				
			||||||
 | 
					 	u8 vht_nss, he_nss;
 | 
				
			||||||
 | 
					@@ -8278,7 +8278,7 @@ ath11k_mac_validate_vht_he_fixed_rate_se
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	rcu_read_lock();
 | 
				
			||||||
 | 
					 	spin_lock_bh(&ar->ab->base_lock);
 | 
				
			||||||
 | 
					-	list_for_each_entry_safe(peer, tmp, &ar->ab->peers, list) {
 | 
				
			||||||
 | 
					+	list_for_each_entry(peer, &ar->ab->peers, list) {
 | 
				
			||||||
 | 
					 		if (peer->sta) {
 | 
				
			||||||
 | 
					 			deflink = &peer->sta->deflink;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
@ -0,0 +1,180 @@
 | 
				
			|||||||
 | 
					From 011e5a3052a22d3758d17442bf0c04c68bf79bea Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
 | 
				
			||||||
 | 
					Date: Wed, 26 Jul 2023 19:40:30 +0530
 | 
				
			||||||
 | 
					Subject: [PATCH 3/5] wifi: ath11k: Split coldboot calibration hw_param
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCN9074 enables coldboot calibration only in Factory Test Mode (FTM).
 | 
				
			||||||
 | 
					Hence, split cold_boot_calib to two hw_params for mission and FTM
 | 
				
			||||||
 | 
					mode.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230726141032.3061-2-quic_rajkbhag@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/ahb.c  |  3 +--
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/core.c | 36 ++++++++++++++++++++------
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/core.h |  1 +
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/hw.h   |  3 ++-
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/qmi.c  |  6 ++---
 | 
				
			||||||
 | 
					 5 files changed, 35 insertions(+), 14 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					@@ -422,8 +422,7 @@ static int ath11k_ahb_fwreset_from_cold_
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	int timeout;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (ath11k_cold_boot_cal == 0 || ab->qmi.cal_done ||
 | 
				
			||||||
 | 
					-	    ab->hw_params.cold_boot_calib == 0 ||
 | 
				
			||||||
 | 
					+	if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
 | 
				
			||||||
 | 
					 	    ab->hw_params.cbcal_restart_fw == 0)
 | 
				
			||||||
 | 
					 		return 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/core.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/core.c
 | 
				
			||||||
 | 
					@@ -86,7 +86,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_shadow_regs = false,
 | 
				
			||||||
 | 
					 		.idle_ps = false,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = false,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = true,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = true,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 0,
 | 
				
			||||||
 | 
					 		.num_vdevs = 16 + 1,
 | 
				
			||||||
 | 
					@@ -167,7 +168,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_shadow_regs = false,
 | 
				
			||||||
 | 
					 		.idle_ps = false,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = false,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = true,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = true,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 0,
 | 
				
			||||||
 | 
					 		.num_vdevs = 16 + 1,
 | 
				
			||||||
 | 
					@@ -248,7 +250,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_shadow_regs = true,
 | 
				
			||||||
 | 
					 		.idle_ps = true,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = true,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = false,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = false,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 0,
 | 
				
			||||||
 | 
					 		.num_vdevs = 16 + 1,
 | 
				
			||||||
 | 
					@@ -332,7 +335,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_shadow_regs = false,
 | 
				
			||||||
 | 
					 		.idle_ps = false,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = false,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = false,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = false,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 2,
 | 
				
			||||||
 | 
					 		.num_vdevs = 8,
 | 
				
			||||||
 | 
					@@ -413,7 +417,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_shadow_regs = true,
 | 
				
			||||||
 | 
					 		.idle_ps = true,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = true,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = false,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = false,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 0,
 | 
				
			||||||
 | 
					 		.num_vdevs = 16 + 1,
 | 
				
			||||||
 | 
					@@ -495,7 +500,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_shadow_regs = true,
 | 
				
			||||||
 | 
					 		.idle_ps = true,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = true,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = false,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = false,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 0,
 | 
				
			||||||
 | 
					 		.num_vdevs = 16 + 1,
 | 
				
			||||||
 | 
					@@ -578,7 +584,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_shadow_regs = true,
 | 
				
			||||||
 | 
					 		.idle_ps = true,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = true,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = true,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = false,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 0,
 | 
				
			||||||
 | 
					 		.num_vdevs = 16 + 1,
 | 
				
			||||||
 | 
					@@ -667,7 +674,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.supports_suspend = false,
 | 
				
			||||||
 | 
					 		.hal_params = &ath11k_hw_hal_params_ipq8074,
 | 
				
			||||||
 | 
					 		.single_pdev_only = false,
 | 
				
			||||||
 | 
					-		.cold_boot_calib = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = true,
 | 
				
			||||||
 | 
					 		.cbcal_restart_fw = true,
 | 
				
			||||||
 | 
					 		.fix_l1ss = true,
 | 
				
			||||||
 | 
					 		.supports_dynamic_smps_6ghz = false,
 | 
				
			||||||
 | 
					@@ -749,6 +757,18 @@ void ath11k_fw_stats_free(struct ath11k_
 | 
				
			||||||
 | 
					 	ath11k_fw_stats_bcn_free(&stats->bcn);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+bool ath11k_core_coldboot_cal_support(struct ath11k_base *ab)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	if (!ath11k_cold_boot_cal)
 | 
				
			||||||
 | 
					+		return false;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (ath11k_ftm_mode)
 | 
				
			||||||
 | 
					+		return ab->hw_params.coldboot_cal_ftm;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	else
 | 
				
			||||||
 | 
					+		return ab->hw_params.coldboot_cal_mm;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 int ath11k_core_suspend(struct ath11k_base *ab)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/core.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/core.h
 | 
				
			||||||
 | 
					@@ -1186,6 +1186,7 @@ void ath11k_core_halt(struct ath11k *ar)
 | 
				
			||||||
 | 
					 int ath11k_core_resume(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 int ath11k_core_suspend(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 void ath11k_core_pre_reconfigure_recovery(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					+bool ath11k_core_coldboot_cal_support(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
 | 
				
			||||||
 | 
					 						    const char *filename);
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/hw.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/hw.h
 | 
				
			||||||
 | 
					@@ -187,7 +187,8 @@ struct ath11k_hw_params {
 | 
				
			||||||
 | 
					 	bool supports_shadow_regs;
 | 
				
			||||||
 | 
					 	bool idle_ps;
 | 
				
			||||||
 | 
					 	bool supports_sta_ps;
 | 
				
			||||||
 | 
					-	bool cold_boot_calib;
 | 
				
			||||||
 | 
					+	bool coldboot_cal_mm;
 | 
				
			||||||
 | 
					+	bool coldboot_cal_ftm;
 | 
				
			||||||
 | 
					 	bool cbcal_restart_fw;
 | 
				
			||||||
 | 
					 	int fw_mem_mode;
 | 
				
			||||||
 | 
					 	u32 num_vdevs;
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/qmi.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/qmi.c
 | 
				
			||||||
 | 
					@@ -2079,7 +2079,7 @@ static int ath11k_qmi_assign_target_mem_
 | 
				
			||||||
 | 
					 				return -EINVAL;
 | 
				
			||||||
 | 
					 			}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-			if (ath11k_cold_boot_cal && ab->hw_params.cold_boot_calib) {
 | 
				
			||||||
 | 
					+			if (ath11k_core_coldboot_cal_support(ab)) {
 | 
				
			||||||
 | 
					 				if (hremote_node) {
 | 
				
			||||||
 | 
					 					ab->qmi.target_mem[idx].paddr =
 | 
				
			||||||
 | 
					 							res.start + host_ddr_sz;
 | 
				
			||||||
 | 
					@@ -3209,8 +3209,8 @@ static void ath11k_qmi_driver_event_work
 | 
				
			||||||
 | 
					 				break;
 | 
				
			||||||
 | 
					 			}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-			if (ath11k_cold_boot_cal && ab->qmi.cal_done == 0 &&
 | 
				
			||||||
 | 
					-			    ab->hw_params.cold_boot_calib) {
 | 
				
			||||||
 | 
					+			if (ab->qmi.cal_done == 0 &&
 | 
				
			||||||
 | 
					+			    ath11k_core_coldboot_cal_support(ab)) {
 | 
				
			||||||
 | 
					 				ath11k_qmi_process_coldboot_calibration(ab);
 | 
				
			||||||
 | 
					 			} else {
 | 
				
			||||||
 | 
					 				clear_bit(ATH11K_FLAG_CRASH_FLUSH,
 | 
				
			||||||
@ -0,0 +1,176 @@
 | 
				
			|||||||
 | 
					From bdfc967bf5fcd762473a01d39edb81f1165ba290 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Anilkumar Kolli <quic_akolli@quicinc.com>
 | 
				
			||||||
 | 
					Date: Wed, 26 Jul 2023 19:40:31 +0530
 | 
				
			||||||
 | 
					Subject: [PATCH 4/5] wifi: ath11k: Add coldboot calibration support for
 | 
				
			||||||
 | 
					 QCN9074
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCN9074 supports 6 GHz, which has increased number of channels
 | 
				
			||||||
 | 
					compared to 5 GHz/2 GHz. So, to support coldboot calibration in
 | 
				
			||||||
 | 
					QCN9074 ATH11K_COLD_BOOT_FW_RESET_DELAY extended to 60 seconds. To
 | 
				
			||||||
 | 
					avoid code redundancy, fwreset_from_cold_boot moved to QMI and made
 | 
				
			||||||
 | 
					common for both ahb and pci. Coldboot calibration is enabled only in
 | 
				
			||||||
 | 
					FTM mode for QCN9074. QCN9074 requires firmware restart after coldboot,
 | 
				
			||||||
 | 
					hence enable cbcal_restart_fw in hw_params.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This support can be enabled/disabled using hw params for different
 | 
				
			||||||
 | 
					hardware. Currently it is not enabled for QCA6390.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Anilkumar Kolli <quic_akolli@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230726141032.3061-3-quic_rajkbhag@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/ahb.c  | 28 ++------------------------
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/core.c |  4 ++--
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/pci.c  |  2 ++
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/qmi.c  | 28 ++++++++++++++++++++++++++
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/qmi.h  |  3 ++-
 | 
				
			||||||
 | 
					 5 files changed, 36 insertions(+), 29 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					@@ -14,6 +14,7 @@
 | 
				
			||||||
 | 
					 #include "ahb.h"
 | 
				
			||||||
 | 
					 #include "debug.h"
 | 
				
			||||||
 | 
					 #include "hif.h"
 | 
				
			||||||
 | 
					+#include "qmi.h"
 | 
				
			||||||
 | 
					 #include <linux/remoteproc.h>
 | 
				
			||||||
 | 
					 #include "pcic.h"
 | 
				
			||||||
 | 
					 #include <linux/soc/qcom/smem.h>
 | 
				
			||||||
 | 
					@@ -418,31 +419,6 @@ static void ath11k_ahb_power_down(struct
 | 
				
			||||||
 | 
					 	rproc_shutdown(ab_ahb->tgt_rproc);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-static int ath11k_ahb_fwreset_from_cold_boot(struct ath11k_base *ab)
 | 
				
			||||||
 | 
					-{
 | 
				
			||||||
 | 
					-	int timeout;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-	if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
 | 
				
			||||||
 | 
					-	    ab->hw_params.cbcal_restart_fw == 0)
 | 
				
			||||||
 | 
					-		return 0;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-	ath11k_dbg(ab, ATH11K_DBG_AHB, "wait for cold boot done\n");
 | 
				
			||||||
 | 
					-	timeout = wait_event_timeout(ab->qmi.cold_boot_waitq,
 | 
				
			||||||
 | 
					-				     (ab->qmi.cal_done  == 1),
 | 
				
			||||||
 | 
					-				     ATH11K_COLD_BOOT_FW_RESET_DELAY);
 | 
				
			||||||
 | 
					-	if (timeout <= 0) {
 | 
				
			||||||
 | 
					-		ath11k_cold_boot_cal = 0;
 | 
				
			||||||
 | 
					-		ath11k_warn(ab, "Coldboot Calibration failed timed out\n");
 | 
				
			||||||
 | 
					-	}
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-	/* reset the firmware */
 | 
				
			||||||
 | 
					-	ath11k_ahb_power_down(ab);
 | 
				
			||||||
 | 
					-	ath11k_ahb_power_up(ab);
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-	ath11k_dbg(ab, ATH11K_DBG_AHB, "exited from cold boot mode\n");
 | 
				
			||||||
 | 
					-	return 0;
 | 
				
			||||||
 | 
					-}
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					 static void ath11k_ahb_init_qmi_ce_config(struct ath11k_base *ab)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
 | 
				
			||||||
 | 
					@@ -1225,7 +1201,7 @@ static int ath11k_ahb_probe(struct platf
 | 
				
			||||||
 | 
					 		goto err_ce_free;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	ath11k_ahb_fwreset_from_cold_boot(ab);
 | 
				
			||||||
 | 
					+	ath11k_qmi_fwreset_from_cold_boot(ab);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	return 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/core.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/core.c
 | 
				
			||||||
 | 
					@@ -336,8 +336,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 | 
					 		.idle_ps = false,
 | 
				
			||||||
 | 
					 		.supports_sta_ps = false,
 | 
				
			||||||
 | 
					 		.coldboot_cal_mm = false,
 | 
				
			||||||
 | 
					-		.coldboot_cal_ftm = false,
 | 
				
			||||||
 | 
					-		.cbcal_restart_fw = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = true,
 | 
				
			||||||
 | 
					+		.cbcal_restart_fw = true,
 | 
				
			||||||
 | 
					 		.fw_mem_mode = 2,
 | 
				
			||||||
 | 
					 		.num_vdevs = 8,
 | 
				
			||||||
 | 
					 		.num_peers = 128,
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/pci.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/pci.c
 | 
				
			||||||
 | 
					@@ -15,6 +15,7 @@
 | 
				
			||||||
 | 
					 #include "mhi.h"
 | 
				
			||||||
 | 
					 #include "debug.h"
 | 
				
			||||||
 | 
					 #include "pcic.h"
 | 
				
			||||||
 | 
					+#include "qmi.h"
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #define ATH11K_PCI_BAR_NUM		0
 | 
				
			||||||
 | 
					 #define ATH11K_PCI_DMA_MASK		32
 | 
				
			||||||
 | 
					@@ -897,6 +898,7 @@ unsupported_wcn6855_soc:
 | 
				
			||||||
 | 
					 		ath11k_err(ab, "failed to init core: %d\n", ret);
 | 
				
			||||||
 | 
					 		goto err_irq_affinity_cleanup;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					+	ath11k_qmi_fwreset_from_cold_boot(ab);
 | 
				
			||||||
 | 
					 	return 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 err_irq_affinity_cleanup:
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/qmi.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/qmi.c
 | 
				
			||||||
 | 
					@@ -9,6 +9,7 @@
 | 
				
			||||||
 | 
					 #include "qmi.h"
 | 
				
			||||||
 | 
					 #include "core.h"
 | 
				
			||||||
 | 
					 #include "debug.h"
 | 
				
			||||||
 | 
					+#include "hif.h"
 | 
				
			||||||
 | 
					 #include <linux/of.h>
 | 
				
			||||||
 | 
					 #include <linux/of_address.h>
 | 
				
			||||||
 | 
					 #include <linux/ioport.h>
 | 
				
			||||||
 | 
					@@ -2839,6 +2840,33 @@ int ath11k_qmi_firmware_start(struct ath
 | 
				
			||||||
 | 
					 	return 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+int ath11k_qmi_fwreset_from_cold_boot(struct ath11k_base *ab)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	int timeout;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
 | 
				
			||||||
 | 
					+	    ab->hw_params.cbcal_restart_fw == 0)
 | 
				
			||||||
 | 
					+		return 0;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	ath11k_dbg(ab, ATH11K_DBG_QMI, "wait for cold boot done\n");
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	timeout = wait_event_timeout(ab->qmi.cold_boot_waitq,
 | 
				
			||||||
 | 
					+				     (ab->qmi.cal_done == 1),
 | 
				
			||||||
 | 
					+				     ATH11K_COLD_BOOT_FW_RESET_DELAY);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (timeout <= 0) {
 | 
				
			||||||
 | 
					+		ath11k_warn(ab, "Coldboot Calibration timed out\n");
 | 
				
			||||||
 | 
					+		return -ETIMEDOUT;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	/* reset the firmware */
 | 
				
			||||||
 | 
					+	ath11k_hif_power_down(ab);
 | 
				
			||||||
 | 
					+	ath11k_hif_power_up(ab);
 | 
				
			||||||
 | 
					+	ath11k_dbg(ab, ATH11K_DBG_QMI, "exit wait for cold boot done\n");
 | 
				
			||||||
 | 
					+	return 0;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+EXPORT_SYMBOL(ath11k_qmi_fwreset_from_cold_boot);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 static int ath11k_qmi_process_coldboot_calibration(struct ath11k_base *ab)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	int timeout;
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/qmi.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/qmi.h
 | 
				
			||||||
 | 
					@@ -37,7 +37,7 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #define QMI_WLANFW_MAX_DATA_SIZE_V01		6144
 | 
				
			||||||
 | 
					 #define ATH11K_FIRMWARE_MODE_OFF		4
 | 
				
			||||||
 | 
					-#define ATH11K_COLD_BOOT_FW_RESET_DELAY		(40 * HZ)
 | 
				
			||||||
 | 
					+#define ATH11K_COLD_BOOT_FW_RESET_DELAY		(60 * HZ)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #define ATH11K_QMI_DEVICE_BAR_SIZE		0x200000
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -519,5 +519,6 @@ void ath11k_qmi_msg_recv_work(struct wor
 | 
				
			||||||
 | 
					 void ath11k_qmi_deinit_service(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 int ath11k_qmi_init_service(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 void ath11k_qmi_free_resource(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					+int ath11k_qmi_fwreset_from_cold_boot(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #endif
 | 
				
			||||||
@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					From 13329d0cb7212b058bd8451a99d215a8f97645ea Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
 | 
				
			||||||
 | 
					Date: Wed, 26 Jul 2023 19:40:32 +0530
 | 
				
			||||||
 | 
					Subject: [PATCH 5/5] wifi: ath11k: Remove cal_done check during probe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In some race conditions, calibration done QMI message is received even
 | 
				
			||||||
 | 
					before host wait starts for calibration to be done.
 | 
				
			||||||
 | 
					Due to this, resetting firmware was not performed after calibration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Hence, remove cal_done check in ath11k_qmi_fwreset_from_cold_boot()
 | 
				
			||||||
 | 
					as this is called only from probe.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230726141032.3061-4-quic_rajkbhag@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/qmi.c | 2 +-
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/qmi.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/qmi.c
 | 
				
			||||||
 | 
					@@ -2844,7 +2844,7 @@ int ath11k_qmi_fwreset_from_cold_boot(st
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	int timeout;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
 | 
				
			||||||
 | 
					+	if (!ath11k_core_coldboot_cal_support(ab) ||
 | 
				
			||||||
 | 
					 	    ab->hw_params.cbcal_restart_fw == 0)
 | 
				
			||||||
 | 
					 		return 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					From 400ece6c7f346b0a30867bd00b03b5b2563d4357 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Sven Eckelmann <sven@narfation.org>
 | 
				
			||||||
 | 
					Date: Tue, 22 Aug 2023 16:42:24 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: Don't drop tx_status when peer cannot be found
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When a station idles for a long time, hostapd will try to send a QoS Null
 | 
				
			||||||
 | 
					frame to the station as "poll". NL80211_CMD_PROBE_CLIENT is used for this
 | 
				
			||||||
 | 
					purpose. And the skb will be added to ack_status_frame - waiting for a
 | 
				
			||||||
 | 
					completion via ieee80211_report_ack_skb().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					But when the peer was already removed before the tx_complete arrives, the
 | 
				
			||||||
 | 
					peer will be missing. And when using dev_kfree_skb_any (instead of going
 | 
				
			||||||
 | 
					through mac80211), the entry will stay inside ack_status_frames. This IDR
 | 
				
			||||||
 | 
					will therefore run full after 8K request were generated for such clients.
 | 
				
			||||||
 | 
					At this point, the access point will then just stall and not allow any new
 | 
				
			||||||
 | 
					clients because idr_alloc() for ack_status_frame will fail.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ieee80211_free_txskb() on the other hand will (when required) call
 | 
				
			||||||
 | 
					ieee80211_report_ack_skb() and make sure that (when required) remove the
 | 
				
			||||||
 | 
					entry from the ack_status_frame.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested-on: IPQ6018 hw1.0 WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fixes: 6257c702264c ("wifi: ath11k: fix tx status reporting in encap offload mode")
 | 
				
			||||||
 | 
					Fixes: 94739d45c388 ("ath11k: switch to using ieee80211_tx_status_ext()")
 | 
				
			||||||
 | 
					Cc: stable@vger.kernel.org
 | 
				
			||||||
 | 
					Signed-off-by: Sven Eckelmann <sven@narfation.org>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230802-ath11k-ack_status_leak-v2-1-c0af729d6229@narfation.org
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/dp_tx.c | 4 ++--
 | 
				
			||||||
 | 
					 1 file changed, 2 insertions(+), 2 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
 | 
				
			||||||
 | 
					@@ -369,7 +369,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
 | 
				
			||||||
 | 
					 			   "dp_tx: failed to find the peer with peer_id %d\n",
 | 
				
			||||||
 | 
					 			    ts->peer_id);
 | 
				
			||||||
 | 
					 		spin_unlock_bh(&ab->base_lock);
 | 
				
			||||||
 | 
					-		dev_kfree_skb_any(msdu);
 | 
				
			||||||
 | 
					+		ieee80211_free_txskb(ar->hw, msdu);
 | 
				
			||||||
 | 
					 		return;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 	spin_unlock_bh(&ab->base_lock);
 | 
				
			||||||
 | 
					@@ -624,7 +624,7 @@ static void ath11k_dp_tx_complete_msdu(s
 | 
				
			||||||
 | 
					 			   "dp_tx: failed to find the peer with peer_id %d\n",
 | 
				
			||||||
 | 
					 			    ts->peer_id);
 | 
				
			||||||
 | 
					 		spin_unlock_bh(&ab->base_lock);
 | 
				
			||||||
 | 
					-		dev_kfree_skb_any(msdu);
 | 
				
			||||||
 | 
					+		ieee80211_free_txskb(ar->hw, msdu);
 | 
				
			||||||
 | 
					 		return;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 	arsta = (struct ath11k_sta *)peer->sta->drv_priv;
 | 
				
			||||||
@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					From 29d15589f084d71a4ea8c544039c5839db0236e2 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Sven Eckelmann <sven@narfation.org>
 | 
				
			||||||
 | 
					Date: Tue, 22 Aug 2023 16:42:24 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: Cleanup mac80211 references on failure during
 | 
				
			||||||
 | 
					 tx_complete
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When a function is using functions from mac80211 to free an skb then it
 | 
				
			||||||
 | 
					should do it consistently and not switch to the generic dev_kfree_skb_any
 | 
				
			||||||
 | 
					(or similar functions). Otherwise (like in the error handlers), mac80211
 | 
				
			||||||
 | 
					will will not be aware of the freed skb and thus not clean up related
 | 
				
			||||||
 | 
					information in its internal data structures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Not doing so lead in the past to filled up structure which then prevented
 | 
				
			||||||
 | 
					new clients to connect.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
 | 
				
			||||||
 | 
					Fixes: 6257c702264c ("wifi: ath11k: fix tx status reporting in encap offload mode")
 | 
				
			||||||
 | 
					Cc: stable@vger.kernel.org
 | 
				
			||||||
 | 
					Signed-off-by: Sven Eckelmann <sven@narfation.org>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230802-ath11k-ack_status_leak-v2-2-c0af729d6229@narfation.org
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/dp_tx.c | 6 +++---
 | 
				
			||||||
 | 
					 1 file changed, 3 insertions(+), 3 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
 | 
				
			||||||
 | 
					@@ -344,7 +344,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
 | 
				
			||||||
 | 
					 	dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (!skb_cb->vif) {
 | 
				
			||||||
 | 
					-		dev_kfree_skb_any(msdu);
 | 
				
			||||||
 | 
					+		ieee80211_free_txskb(ar->hw, msdu);
 | 
				
			||||||
 | 
					 		return;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -566,12 +566,12 @@ static void ath11k_dp_tx_complete_msdu(s
 | 
				
			||||||
 | 
					 	dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (unlikely(!rcu_access_pointer(ab->pdevs_active[ar->pdev_idx]))) {
 | 
				
			||||||
 | 
					-		dev_kfree_skb_any(msdu);
 | 
				
			||||||
 | 
					+		ieee80211_free_txskb(ar->hw, msdu);
 | 
				
			||||||
 | 
					 		return;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (unlikely(!skb_cb->vif)) {
 | 
				
			||||||
 | 
					-		dev_kfree_skb_any(msdu);
 | 
				
			||||||
 | 
					+		ieee80211_free_txskb(ar->hw, msdu);
 | 
				
			||||||
 | 
					 		return;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
@ -0,0 +1,316 @@
 | 
				
			|||||||
 | 
					From 9476cda44c136089f14f8951ae5197d63e91735c Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Date: Mon, 21 Aug 2023 07:13:36 -0700
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: Consistently use ath11k_vif_to_arvif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Helper function ath11k_vif_to_arvif() exists to retrieve a struct
 | 
				
			||||||
 | 
					ath11k_vif from a struct ieee80211_vif. However, in multiple places
 | 
				
			||||||
 | 
					this logic is open-coded with inline typecasting. Since the
 | 
				
			||||||
 | 
					typecasting prevents the compiler from type-checking the source and
 | 
				
			||||||
 | 
					destination, update the driver to consistently use the helper
 | 
				
			||||||
 | 
					function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					No functional changes, compile tested only.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230821-ath11k_vif_to_arvif-v1-1-fa2c3b60b5cf@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/mac.c      | 64 +++++++++++-----------
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/testmode.c |  2 +-
 | 
				
			||||||
 | 
					 2 files changed, 33 insertions(+), 33 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/mac.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/mac.c
 | 
				
			||||||
 | 
					@@ -566,7 +566,7 @@ static void ath11k_get_arvif_iter(void *
 | 
				
			||||||
 | 
					 				  struct ieee80211_vif *vif)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k_vif_iter *arvif_iter = data;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (arvif->vdev_id == arvif_iter->vdev_id)
 | 
				
			||||||
 | 
					 		arvif_iter->arvif = arvif;
 | 
				
			||||||
 | 
					@@ -1464,7 +1464,7 @@ static int ath11k_mac_setup_bcn_tmpl_ema
 | 
				
			||||||
 | 
					 	u32 params = 0;
 | 
				
			||||||
 | 
					 	u8 i = 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	tx_arvif = (void *)arvif->vif->mbssid_tx_vif->drv_priv;
 | 
				
			||||||
 | 
					+	tx_arvif = ath11k_vif_to_arvif(arvif->vif->mbssid_tx_vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	beacons = ieee80211_beacon_get_template_ema_list(tx_arvif->ar->hw,
 | 
				
			||||||
 | 
					 							 tx_arvif->vif, 0);
 | 
				
			||||||
 | 
					@@ -1520,8 +1520,8 @@ static int ath11k_mac_setup_bcn_tmpl_mbs
 | 
				
			||||||
 | 
					 	struct sk_buff *bcn;
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (arvif->vif->mbssid_tx_vif) {
 | 
				
			||||||
 | 
					-		tx_arvif = (void *)arvif->vif->mbssid_tx_vif->drv_priv;
 | 
				
			||||||
 | 
					+	if (vif->mbssid_tx_vif) {
 | 
				
			||||||
 | 
					+		tx_arvif = ath11k_vif_to_arvif(vif->mbssid_tx_vif);
 | 
				
			||||||
 | 
					 		if (tx_arvif != arvif) {
 | 
				
			||||||
 | 
					 			ar = tx_arvif->ar;
 | 
				
			||||||
 | 
					 			ab = ar->ab;
 | 
				
			||||||
 | 
					@@ -1562,7 +1562,7 @@ static int ath11k_mac_setup_bcn_tmpl(str
 | 
				
			||||||
 | 
					 	 * non-transmitting interfaces, and results in a crash if sent.
 | 
				
			||||||
 | 
					 	 */
 | 
				
			||||||
 | 
					 	if (vif->mbssid_tx_vif &&
 | 
				
			||||||
 | 
					-	    arvif != (void *)vif->mbssid_tx_vif->drv_priv && arvif->is_up)
 | 
				
			||||||
 | 
					+	    arvif != ath11k_vif_to_arvif(vif->mbssid_tx_vif) && arvif->is_up)
 | 
				
			||||||
 | 
					 		return 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (vif->bss_conf.ema_ap && vif->mbssid_tx_vif)
 | 
				
			||||||
 | 
					@@ -1626,7 +1626,7 @@ static void ath11k_control_beaconing(str
 | 
				
			||||||
 | 
					 	ether_addr_copy(arvif->bssid, info->bssid);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (arvif->vif->mbssid_tx_vif)
 | 
				
			||||||
 | 
					-		tx_arvif = (struct ath11k_vif *)arvif->vif->mbssid_tx_vif->drv_priv;
 | 
				
			||||||
 | 
					+		tx_arvif = ath11k_vif_to_arvif(arvif->vif->mbssid_tx_vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
 | 
				
			||||||
 | 
					 				 arvif->bssid,
 | 
				
			||||||
 | 
					@@ -1649,7 +1649,7 @@ static void ath11k_mac_handle_beacon_ite
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct sk_buff *skb = data;
 | 
				
			||||||
 | 
					 	struct ieee80211_mgmt *mgmt = (void *)skb->data;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (vif->type != NL80211_IFTYPE_STATION)
 | 
				
			||||||
 | 
					 		return;
 | 
				
			||||||
 | 
					@@ -1672,7 +1672,7 @@ static void ath11k_mac_handle_beacon_mis
 | 
				
			||||||
 | 
					 					       struct ieee80211_vif *vif)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	u32 *vdev_id = data;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct ath11k *ar = arvif->ar;
 | 
				
			||||||
 | 
					 	struct ieee80211_hw *hw = ar->hw;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -1718,7 +1718,7 @@ static void ath11k_peer_assoc_h_basic(st
 | 
				
			||||||
 | 
					 				      struct ieee80211_sta *sta,
 | 
				
			||||||
 | 
					 				      struct peer_assoc_params *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	u32 aid;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	lockdep_assert_held(&ar->conf_mutex);
 | 
				
			||||||
 | 
					@@ -1746,7 +1746,7 @@ static void ath11k_peer_assoc_h_crypto(s
 | 
				
			||||||
 | 
					 	struct ieee80211_bss_conf *info = &vif->bss_conf;
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					 	struct cfg80211_bss *bss;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (struct ath11k_vif *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	const u8 *rsnie = NULL;
 | 
				
			||||||
 | 
					 	const u8 *wpaie = NULL;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -1804,7 +1804,7 @@ static void ath11k_peer_assoc_h_rates(st
 | 
				
			||||||
 | 
					 				      struct ieee80211_sta *sta,
 | 
				
			||||||
 | 
					 				      struct peer_assoc_params *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					 	const struct ieee80211_supported_band *sband;
 | 
				
			||||||
 | 
					@@ -1867,7 +1867,7 @@ static void ath11k_peer_assoc_h_ht(struc
 | 
				
			||||||
 | 
					 				   struct peer_assoc_params *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	const struct ieee80211_sta_ht_cap *ht_cap = &sta->deflink.ht_cap;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					 	enum nl80211_band band;
 | 
				
			||||||
 | 
					 	const u8 *ht_mcs_mask;
 | 
				
			||||||
 | 
					@@ -2064,7 +2064,7 @@ static void ath11k_peer_assoc_h_vht(stru
 | 
				
			||||||
 | 
					 				    struct peer_assoc_params *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	const struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					 	enum nl80211_band band;
 | 
				
			||||||
 | 
					 	u16 *vht_mcs_mask;
 | 
				
			||||||
 | 
					@@ -2261,7 +2261,7 @@ static void ath11k_peer_assoc_h_he(struc
 | 
				
			||||||
 | 
					 				   struct ieee80211_sta *sta,
 | 
				
			||||||
 | 
					 				   struct peer_assoc_params *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					 	const struct ieee80211_sta_he_cap *he_cap = &sta->deflink.he_cap;
 | 
				
			||||||
 | 
					 	enum nl80211_band band;
 | 
				
			||||||
 | 
					@@ -2584,7 +2584,7 @@ static void ath11k_peer_assoc_h_qos(stru
 | 
				
			||||||
 | 
					 				    struct ieee80211_sta *sta,
 | 
				
			||||||
 | 
					 				    struct peer_assoc_params *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	switch (arvif->vdev_type) {
 | 
				
			||||||
 | 
					 	case WMI_VDEV_TYPE_AP:
 | 
				
			||||||
 | 
					@@ -2747,7 +2747,7 @@ static void ath11k_peer_assoc_h_phymode(
 | 
				
			||||||
 | 
					 					struct ieee80211_sta *sta,
 | 
				
			||||||
 | 
					 					struct peer_assoc_params *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					 	enum nl80211_band band;
 | 
				
			||||||
 | 
					 	const u8 *ht_mcs_mask;
 | 
				
			||||||
 | 
					@@ -2933,7 +2933,7 @@ static bool ath11k_mac_vif_recalc_sta_he
 | 
				
			||||||
 | 
					 					      struct ieee80211_vif *vif,
 | 
				
			||||||
 | 
					 					      struct ieee80211_sta_he_cap *he_cap)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct ieee80211_he_cap_elem he_cap_elem = {0};
 | 
				
			||||||
 | 
					 	struct ieee80211_sta_he_cap *cap_band = NULL;
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					@@ -2995,7 +2995,7 @@ static void ath11k_bss_assoc(struct ieee
 | 
				
			||||||
 | 
					 			     struct ieee80211_bss_conf *bss_conf)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct peer_assoc_params peer_arg;
 | 
				
			||||||
 | 
					 	struct ieee80211_sta *ap_sta;
 | 
				
			||||||
 | 
					 	struct ath11k_peer *peer;
 | 
				
			||||||
 | 
					@@ -3111,7 +3111,7 @@ static void ath11k_bss_disassoc(struct i
 | 
				
			||||||
 | 
					 				struct ieee80211_vif *vif)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	lockdep_assert_held(&ar->conf_mutex);
 | 
				
			||||||
 | 
					@@ -3160,7 +3160,7 @@ static void ath11k_recalculate_mgmt_rate
 | 
				
			||||||
 | 
					 					 struct ieee80211_vif *vif,
 | 
				
			||||||
 | 
					 					 struct cfg80211_chan_def *def)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	const struct ieee80211_supported_band *sband;
 | 
				
			||||||
 | 
					 	u8 basic_rate_idx;
 | 
				
			||||||
 | 
					 	int hw_rate_code;
 | 
				
			||||||
 | 
					@@ -4632,7 +4632,7 @@ static int ath11k_station_disassoc(struc
 | 
				
			||||||
 | 
					 				   struct ieee80211_vif *vif,
 | 
				
			||||||
 | 
					 				   struct ieee80211_sta *sta)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	int ret = 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	lockdep_assert_held(&ar->conf_mutex);
 | 
				
			||||||
 | 
					@@ -5160,7 +5160,7 @@ static int ath11k_mac_op_sta_set_txpwr(s
 | 
				
			||||||
 | 
					 				       struct ieee80211_sta *sta)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	int ret = 0;
 | 
				
			||||||
 | 
					 	s16 txpwr;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -5210,7 +5210,7 @@ static void ath11k_mac_op_sta_rc_update(
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					 	struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct ath11k_peer *peer;
 | 
				
			||||||
 | 
					 	u32 bw, smps;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -5337,7 +5337,7 @@ static int ath11k_mac_op_conf_tx(struct
 | 
				
			||||||
 | 
					 				 const struct ieee80211_tx_queue_params *params)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct wmi_wmm_params_arg *p = NULL;
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -6455,7 +6455,7 @@ static int ath11k_mac_setup_vdev_params_
 | 
				
			||||||
 | 
					 		return 0;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	tx_arvif = (void *)tx_vif->drv_priv;
 | 
				
			||||||
 | 
					+	tx_arvif = ath11k_vif_to_arvif(tx_vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (arvif->vif->bss_conf.nontransmitted) {
 | 
				
			||||||
 | 
					 		if (ar->hw->wiphy != ieee80211_vif_to_wdev(tx_vif)->wiphy)
 | 
				
			||||||
 | 
					@@ -7408,7 +7408,7 @@ ath11k_mac_update_vif_chan(struct ath11k
 | 
				
			||||||
 | 
					 	/* TODO: Update ar->rx_channel */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	for (i = 0; i < n_vifs; i++) {
 | 
				
			||||||
 | 
					-		arvif = (void *)vifs[i].vif->drv_priv;
 | 
				
			||||||
 | 
					+		arvif = ath11k_vif_to_arvif(vifs[i].vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 		if (WARN_ON(!arvif->is_started))
 | 
				
			||||||
 | 
					 			continue;
 | 
				
			||||||
 | 
					@@ -7450,7 +7450,7 @@ ath11k_mac_update_vif_chan(struct ath11k
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 		mbssid_tx_vif = arvif->vif->mbssid_tx_vif;
 | 
				
			||||||
 | 
					 		if (mbssid_tx_vif)
 | 
				
			||||||
 | 
					-			tx_arvif = (struct ath11k_vif *)mbssid_tx_vif->drv_priv;
 | 
				
			||||||
 | 
					+			tx_arvif = ath11k_vif_to_arvif(mbssid_tx_vif);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 		ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
 | 
				
			||||||
 | 
					 					 arvif->bssid,
 | 
				
			||||||
 | 
					@@ -7546,7 +7546,7 @@ static int ath11k_start_vdev_delay(struc
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					 	struct ath11k_base *ab = ar->ab;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (WARN_ON(arvif->is_started))
 | 
				
			||||||
 | 
					@@ -7596,7 +7596,7 @@ ath11k_mac_op_assign_vif_chanctx(struct
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					 	struct ath11k_base *ab = ar->ab;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					 	struct peer_create_params param;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -7686,7 +7686,7 @@ ath11k_mac_op_unassign_vif_chanctx(struc
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					 	struct ath11k_base *ab = ar->ab;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct ath11k_peer *peer;
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -8307,7 +8307,7 @@ ath11k_mac_op_set_bitrate_mask(struct ie
 | 
				
			||||||
 | 
					 			       struct ieee80211_vif *vif,
 | 
				
			||||||
 | 
					 			       const struct cfg80211_bitrate_mask *mask)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct cfg80211_chan_def def;
 | 
				
			||||||
 | 
					 	struct ath11k_pdev_cap *cap;
 | 
				
			||||||
 | 
					 	struct ath11k *ar = arvif->ar;
 | 
				
			||||||
 | 
					@@ -8904,7 +8904,7 @@ static int ath11k_mac_op_remain_on_chann
 | 
				
			||||||
 | 
					 					   enum ieee80211_roc_type type)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct ath11k *ar = hw->priv;
 | 
				
			||||||
 | 
					-	struct ath11k_vif *arvif = (void *)vif->drv_priv;
 | 
				
			||||||
 | 
					+	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 	struct scan_req_params arg;
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					 	u32 scan_time_msec;
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/testmode.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/testmode.c
 | 
				
			||||||
 | 
					@@ -350,7 +350,7 @@ static int ath11k_tm_cmd_wmi(struct ath1
 | 
				
			||||||
 | 
					 	if (ar->ab->fw_mode != ATH11K_FIRMWARE_MODE_FTM &&
 | 
				
			||||||
 | 
					 	    (tag == WMI_TAG_VDEV_SET_PARAM_CMD || tag == WMI_TAG_UNIT_TEST_CMD)) {
 | 
				
			||||||
 | 
					 		if (vif) {
 | 
				
			||||||
 | 
					-			arvif = (struct ath11k_vif *)vif->drv_priv;
 | 
				
			||||||
 | 
					+			arvif = ath11k_vif_to_arvif(vif);
 | 
				
			||||||
 | 
					 			*ptr = arvif->vdev_id;
 | 
				
			||||||
 | 
					 		} else {
 | 
				
			||||||
 | 
					 			ret = -EINVAL;
 | 
				
			||||||
@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					From d68a283bfc39aeed2a51c67804e014bf4b35c7e1 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Date: Tue, 22 Aug 2023 07:50:49 -0700
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: Fix a few spelling errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fix a few issues flagged by 'codespell'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Acked-by: Randy Dunlap <rdunlap@infradead.org>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230822-ath_spelling-v1-2-8e2698759564@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/dp.h    | 2 +-
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/dp_rx.c | 2 +-
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/dp_tx.c | 2 +-
 | 
				
			||||||
 | 
					 3 files changed, 3 insertions(+), 3 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/dp.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/dp.h
 | 
				
			||||||
 | 
					@@ -635,7 +635,7 @@ enum htt_ppdu_stats_tag_type {
 | 
				
			||||||
 | 
					  *          b'24    - status_swap: 1 is to swap status TLV
 | 
				
			||||||
 | 
					  *          b'25    - pkt_swap:  1 is to swap packet TLV
 | 
				
			||||||
 | 
					  *          b'26:31 - rsvd1:  reserved for future use
 | 
				
			||||||
 | 
					- * dword1 - b'0:16  - ring_buffer_size: size of bufferes referenced by rx ring,
 | 
				
			||||||
 | 
					+ * dword1 - b'0:16  - ring_buffer_size: size of buffers referenced by rx ring,
 | 
				
			||||||
 | 
					  *                    in byte units.
 | 
				
			||||||
 | 
					  *                    Valid only for HW_TO_SW_RING and SW_TO_HW_RING
 | 
				
			||||||
 | 
					  *        - b'16:31 - rsvd2: Reserved for future use
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
 | 
				
			||||||
 | 
					@@ -3423,7 +3423,7 @@ static int ath11k_dp_rx_h_defrag_reo_rei
 | 
				
			||||||
 | 
					 	ath11k_hal_rx_buf_addr_info_set(msdu0, paddr, cookie,
 | 
				
			||||||
 | 
					 					ab->hw_params.hal_params->rx_buf_rbm);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	/* Fill mpdu details into reo entrace ring */
 | 
				
			||||||
 | 
					+	/* Fill mpdu details into reo entrance ring */
 | 
				
			||||||
 | 
					 	srng = &ab->hal.srng_list[ab->dp.reo_reinject_ring.ring_id];
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	spin_lock_bh(&srng->lock);
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
 | 
				
			||||||
 | 
					@@ -238,7 +238,7 @@ tcl_ring_sel:
 | 
				
			||||||
 | 
					 		spin_unlock_bh(&tcl_ring->lock);
 | 
				
			||||||
 | 
					 		ret = -ENOMEM;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-		/* Checking for available tcl descritors in another ring in
 | 
				
			||||||
 | 
					+		/* Checking for available tcl descriptors in another ring in
 | 
				
			||||||
 | 
					 		 * case of failure due to full tcl ring now, is better than
 | 
				
			||||||
 | 
					 		 * checking this ring earlier for each pkt tx.
 | 
				
			||||||
 | 
					 		 * Restart ring selection if some rings are not checked yet.
 | 
				
			||||||
@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					From 749a660b39030bfbacc366cd8670df2ee0e878b2 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Yang Yingliang <yangyingliang@huawei.com>
 | 
				
			||||||
 | 
					Date: Fri, 4 Aug 2023 17:12:55 +0800
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: simplify the code with module_platform_driver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The init/exit() of driver only calls platform_driver_register/unregister,
 | 
				
			||||||
 | 
					it can be simpilfied with module_platform_driver.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230804091255.1347178-1-yangyingliang@huawei.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/ahb.c | 12 +-----------
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+), 11 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					@@ -1306,17 +1306,7 @@ static struct platform_driver ath11k_ahb
 | 
				
			||||||
 | 
					 	.shutdown = ath11k_ahb_shutdown,
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-static int ath11k_ahb_init(void)
 | 
				
			||||||
 | 
					-{
 | 
				
			||||||
 | 
					-	return platform_driver_register(&ath11k_ahb_driver);
 | 
				
			||||||
 | 
					-}
 | 
				
			||||||
 | 
					-module_init(ath11k_ahb_init);
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-static void ath11k_ahb_exit(void)
 | 
				
			||||||
 | 
					-{
 | 
				
			||||||
 | 
					-	platform_driver_unregister(&ath11k_ahb_driver);
 | 
				
			||||||
 | 
					-}
 | 
				
			||||||
 | 
					-module_exit(ath11k_ahb_exit);
 | 
				
			||||||
 | 
					+module_platform_driver(ath11k_ahb_driver);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 MODULE_DESCRIPTION("Driver support for Qualcomm Technologies 802.11ax WLAN AHB devices");
 | 
				
			||||||
 | 
					 MODULE_LICENSE("Dual BSD/GPL");
 | 
				
			||||||
@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					From 6763ef191d672ff3c2db0622652d49b0c0a60c4a Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
 | 
				
			||||||
 | 
					Date: Thu, 10 Aug 2023 11:12:23 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: fix Wvoid-pointer-to-enum-cast warning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					'hw_rev' is an enum, thus cast of pointer on 64-bit compile test with W=1
 | 
				
			||||||
 | 
					causes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  h11k/ahb.c:1124:11: error: cast to smaller integer type 'enum ath11k_hw_rev' from 'const void *' [-Werror,-Wvoid-pointer-to-enum-cast]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
 | 
				
			||||||
 | 
					Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230810091224.70088-1-krzysztof.kozlowski@linaro.org
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/ahb.c | 2 +-
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/ahb.c
 | 
				
			||||||
 | 
					@@ -1096,7 +1096,7 @@ static int ath11k_ahb_probe(struct platf
 | 
				
			||||||
 | 
					 		return -EINVAL;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	hw_rev = (enum ath11k_hw_rev)of_id->data;
 | 
				
			||||||
 | 
					+	hw_rev = (uintptr_t)of_id->data;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	switch (hw_rev) {
 | 
				
			||||||
 | 
					 	case ATH11K_HW_IPQ8074:
 | 
				
			||||||
@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					From adb0b206709f4f2f1256a1ea20619ab98e99f2e7 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Yue Haibing <yuehaibing@huawei.com>
 | 
				
			||||||
 | 
					Date: Fri, 11 Aug 2023 18:44:13 +0800
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: Remove unused declarations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Commit 2c3960c2253d ("ath11k: setup ce tasklet for control path")
 | 
				
			||||||
 | 
					declared but never implemented ath11k_ce_map_service_to_pipe().
 | 
				
			||||||
 | 
					Commit e3396b8bddd2 ("ath11k: ce: support different CE configurations")
 | 
				
			||||||
 | 
					declared but never implemented ath11k_ce_attr_attach().
 | 
				
			||||||
 | 
					Commit d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
 | 
				
			||||||
 | 
					declared but never implemented ath11k_qmi_event_work()/ath11k_qmi_msg_recv_work().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
 | 
				
			||||||
 | 
					Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230811104413.33668-1-yuehaibing@huawei.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/ce.h  | 3 ---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/qmi.h | 2 --
 | 
				
			||||||
 | 
					 2 files changed, 5 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/ce.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/ce.h
 | 
				
			||||||
 | 
					@@ -203,9 +203,6 @@ int ath11k_ce_alloc_pipes(struct ath11k_
 | 
				
			||||||
 | 
					 void ath11k_ce_free_pipes(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 int ath11k_ce_get_attr_flags(struct ath11k_base *ab, int ce_id);
 | 
				
			||||||
 | 
					 void ath11k_ce_poll_send_completed(struct ath11k_base *ab, u8 pipe_id);
 | 
				
			||||||
 | 
					-int ath11k_ce_map_service_to_pipe(struct ath11k_base *ab, u16 service_id,
 | 
				
			||||||
 | 
					-				  u8 *ul_pipe, u8 *dl_pipe);
 | 
				
			||||||
 | 
					-int ath11k_ce_attr_attach(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 void ath11k_ce_get_shadow_config(struct ath11k_base *ab,
 | 
				
			||||||
 | 
					 				 u32 **shadow_cfg, u32 *shadow_cfg_len);
 | 
				
			||||||
 | 
					 void ath11k_ce_stop_shadow_timers(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/qmi.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/qmi.h
 | 
				
			||||||
 | 
					@@ -514,8 +514,6 @@ struct qmi_wlanfw_wlan_ini_resp_msg_v01
 | 
				
			||||||
 | 
					 int ath11k_qmi_firmware_start(struct ath11k_base *ab,
 | 
				
			||||||
 | 
					 			      u32 mode);
 | 
				
			||||||
 | 
					 void ath11k_qmi_firmware_stop(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					-void ath11k_qmi_event_work(struct work_struct *work);
 | 
				
			||||||
 | 
					-void ath11k_qmi_msg_recv_work(struct work_struct *work);
 | 
				
			||||||
 | 
					 void ath11k_qmi_deinit_service(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 int ath11k_qmi_init_service(struct ath11k_base *ab);
 | 
				
			||||||
 | 
					 void ath11k_qmi_free_resource(struct ath11k_base *ab);
 | 
				
			||||||
@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					From 4a93b554cf9fa64faa7cf164c0d32fc3ce67108b Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Arowa Suliman <arowa@chromium.org>
 | 
				
			||||||
 | 
					Date: Sat, 26 Aug 2023 08:42:42 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: mhi: add a warning message for MHI_CB_EE_RDDM
 | 
				
			||||||
 | 
					 crash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Currently, the ath11k driver does not print a crash signature when a
 | 
				
			||||||
 | 
					MHI_CB_EE_RDDM crash happens. Checked by triggering a simulated crash using the
 | 
				
			||||||
 | 
					command and checking dmesg for logs:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo assert > /sys/kernel/debug/ath11k/../simulate_fw_crash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Add a warning when firmware crash MHI_CB_EE_RDDM happens.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Arowa Suliman <arowa@chromium.org>
 | 
				
			||||||
 | 
					Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/20230714001126.463127-1-arowa@chromium.org
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/mhi.c | 1 +
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/mhi.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/mhi.c
 | 
				
			||||||
 | 
					@@ -333,6 +333,7 @@ static void ath11k_mhi_op_status_cb(stru
 | 
				
			||||||
 | 
					 		ath11k_warn(ab, "firmware crashed: MHI_CB_SYS_ERROR\n");
 | 
				
			||||||
 | 
					 		break;
 | 
				
			||||||
 | 
					 	case MHI_CB_EE_RDDM:
 | 
				
			||||||
 | 
					+		ath11k_warn(ab, "firmware crashed: MHI_CB_EE_RDDM\n");
 | 
				
			||||||
 | 
					 		if (!(test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags)))
 | 
				
			||||||
 | 
					 			queue_work(ab->workqueue_aux, &ab->reset_work);
 | 
				
			||||||
 | 
					 		break;
 | 
				
			||||||
@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					From 5bd2ced044bb95029d5c44cf7d23ced73e0fc05b Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Muna Sinada <quic_msinada@quicinc.com>
 | 
				
			||||||
 | 
					Date: Sat, 26 Aug 2023 08:42:46 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: move references from rsvd2 to info fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Remove references to reserved fields and add new info fields for
 | 
				
			||||||
 | 
					struct hal_rx_ppdu_end_user_stats. Reserved fields should not be
 | 
				
			||||||
 | 
					accessed, therefore existing references to it are to be changed to
 | 
				
			||||||
 | 
					referencing specific info fields.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
 | 
				
			||||||
 | 
					Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/1692827868-15667-1-git-send-email-quic_msinada@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/hal_rx.c | 10 +++++-----
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/hal_rx.h | 11 ++++++++---
 | 
				
			||||||
 | 
					 2 files changed, 13 insertions(+), 8 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
 | 
				
			||||||
 | 
					@@ -814,7 +814,7 @@ ath11k_hal_rx_handle_ofdma_info(void *rx
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	rx_user_status->ul_ofdma_user_v0_word0 = __le32_to_cpu(ppdu_end_user->info6);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->rsvd2[10]);
 | 
				
			||||||
 | 
					+	rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info9);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 static inline void
 | 
				
			||||||
 | 
					@@ -825,11 +825,11 @@ ath11k_hal_rx_populate_byte_count(void *
 | 
				
			||||||
 | 
					 		(struct hal_rx_ppdu_end_user_stats *)rx_tlv;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	rx_user_status->mpdu_ok_byte_count =
 | 
				
			||||||
 | 
					-		FIELD_GET(HAL_RX_PPDU_END_USER_STATS_RSVD2_6_MPDU_OK_BYTE_COUNT,
 | 
				
			||||||
 | 
					-			  __le32_to_cpu(ppdu_end_user->rsvd2[6]));
 | 
				
			||||||
 | 
					+		FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT,
 | 
				
			||||||
 | 
					+			  __le32_to_cpu(ppdu_end_user->info7));
 | 
				
			||||||
 | 
					 	rx_user_status->mpdu_err_byte_count =
 | 
				
			||||||
 | 
					-		FIELD_GET(HAL_RX_PPDU_END_USER_STATS_RSVD2_8_MPDU_ERR_BYTE_COUNT,
 | 
				
			||||||
 | 
					-			  __le32_to_cpu(ppdu_end_user->rsvd2[8]));
 | 
				
			||||||
 | 
					+		FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT,
 | 
				
			||||||
 | 
					+			  __le32_to_cpu(ppdu_end_user->info8));
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 static inline void
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
 | 
				
			||||||
 | 
					@@ -222,8 +222,8 @@ struct hal_rx_ppdu_start {
 | 
				
			||||||
 | 
					 #define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP		GENMASK(15, 0)
 | 
				
			||||||
 | 
					 #define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP	GENMASK(31, 16)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-#define HAL_RX_PPDU_END_USER_STATS_RSVD2_6_MPDU_OK_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					-#define HAL_RX_PPDU_END_USER_STATS_RSVD2_8_MPDU_ERR_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					+#define HAL_RX_PPDU_END_USER_STATS_INFO7_MPDU_OK_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					+#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_ERR_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 struct hal_rx_ppdu_end_user_stats {
 | 
				
			||||||
 | 
					 	__le32 rsvd0[2];
 | 
				
			||||||
 | 
					@@ -236,7 +236,12 @@ struct hal_rx_ppdu_end_user_stats {
 | 
				
			||||||
 | 
					 	__le32 info4;
 | 
				
			||||||
 | 
					 	__le32 info5;
 | 
				
			||||||
 | 
					 	__le32 info6;
 | 
				
			||||||
 | 
					-	__le32 rsvd2[11];
 | 
				
			||||||
 | 
					+	__le32 rsvd2[5];
 | 
				
			||||||
 | 
					+	__le32 info7;
 | 
				
			||||||
 | 
					+	__le32 rsvd3;
 | 
				
			||||||
 | 
					+	__le32 info8;
 | 
				
			||||||
 | 
					+	__le32 rsvd3[2];
 | 
				
			||||||
 | 
					+	__le32 info9;
 | 
				
			||||||
 | 
					 } __packed;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 struct hal_rx_ppdu_end_user_stats_ext {
 | 
				
			||||||
@ -0,0 +1,100 @@
 | 
				
			|||||||
 | 
					From 7791487cd16cafd018cba0bf73789111a9f16843 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Muna Sinada <quic_msinada@quicinc.com>
 | 
				
			||||||
 | 
					Date: Sat, 26 Aug 2023 08:42:46 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] wifi: ath11k: fix tid bitmap is 0 in peer rx mu stats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Correct parsing of reading offset for rx tid 16 bit bitmap. Incorrect
 | 
				
			||||||
 | 
					offset caused peer rx mu stats tid bitmap to always be zero. This
 | 
				
			||||||
 | 
					correction is in the software context and does not affect the
 | 
				
			||||||
 | 
					firmware interface.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
 | 
				
			||||||
 | 
					Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
 | 
				
			||||||
 | 
					Link: https://lore.kernel.org/r/1692827868-15667-2-git-send-email-quic_msinada@quicinc.com
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/hal_rx.c | 10 +++++-----
 | 
				
			||||||
 | 
					 drivers/net/wireless/ath/ath11k/hal_rx.h | 17 +++++++++--------
 | 
				
			||||||
 | 
					 2 files changed, 14 insertions(+), 13 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
 | 
				
			||||||
 | 
					@@ -814,7 +814,7 @@ ath11k_hal_rx_handle_ofdma_info(void *rx
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	rx_user_status->ul_ofdma_user_v0_word0 = __le32_to_cpu(ppdu_end_user->info6);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info9);
 | 
				
			||||||
 | 
					+	rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info10);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 static inline void
 | 
				
			||||||
 | 
					@@ -826,10 +826,10 @@ ath11k_hal_rx_populate_byte_count(void *
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	rx_user_status->mpdu_ok_byte_count =
 | 
				
			||||||
 | 
					 		FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT,
 | 
				
			||||||
 | 
					-			  __le32_to_cpu(ppdu_end_user->info7));
 | 
				
			||||||
 | 
					+			  __le32_to_cpu(ppdu_end_user->info8));
 | 
				
			||||||
 | 
					 	rx_user_status->mpdu_err_byte_count =
 | 
				
			||||||
 | 
					 		FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT,
 | 
				
			||||||
 | 
					-			  __le32_to_cpu(ppdu_end_user->info8));
 | 
				
			||||||
 | 
					+			  __le32_to_cpu(ppdu_end_user->info9));
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 static inline void
 | 
				
			||||||
 | 
					@@ -903,8 +903,8 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
 | 
				
			||||||
 | 
					 			FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX,
 | 
				
			||||||
 | 
					 				  __le32_to_cpu(eu_stats->info2));
 | 
				
			||||||
 | 
					 		ppdu_info->tid =
 | 
				
			||||||
 | 
					-			ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP,
 | 
				
			||||||
 | 
					-				      __le32_to_cpu(eu_stats->info6))) - 1;
 | 
				
			||||||
 | 
					+			ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO7_TID_BITMAP,
 | 
				
			||||||
 | 
					+				      __le32_to_cpu(eu_stats->info7))) - 1;
 | 
				
			||||||
 | 
					 		ppdu_info->tcp_msdu_count =
 | 
				
			||||||
 | 
					 			FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT,
 | 
				
			||||||
 | 
					 				  __le32_to_cpu(eu_stats->info4));
 | 
				
			||||||
 | 
					--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
 | 
				
			||||||
 | 
					+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
 | 
				
			||||||
 | 
					@@ -149,7 +149,7 @@ struct hal_rx_mon_ppdu_info {
 | 
				
			||||||
 | 
					 	u8 beamformed;
 | 
				
			||||||
 | 
					 	u8 rssi_comb;
 | 
				
			||||||
 | 
					 	u8 rssi_chain_pri20[HAL_RX_MAX_NSS];
 | 
				
			||||||
 | 
					-	u8 tid;
 | 
				
			||||||
 | 
					+	u16 tid;
 | 
				
			||||||
 | 
					 	u16 ht_flags;
 | 
				
			||||||
 | 
					 	u16 vht_flags;
 | 
				
			||||||
 | 
					 	u16 he_flags;
 | 
				
			||||||
 | 
					@@ -219,11 +219,11 @@ struct hal_rx_ppdu_start {
 | 
				
			||||||
 | 
					 #define HAL_RX_PPDU_END_USER_STATS_INFO5_OTHER_MSDU_CNT		GENMASK(15, 0)
 | 
				
			||||||
 | 
					 #define HAL_RX_PPDU_END_USER_STATS_INFO5_TCP_ACK_MSDU_CNT	GENMASK(31, 16)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP		GENMASK(15, 0)
 | 
				
			||||||
 | 
					-#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP	GENMASK(31, 16)
 | 
				
			||||||
 | 
					+#define HAL_RX_PPDU_END_USER_STATS_INFO7_TID_BITMAP		GENMASK(15, 0)
 | 
				
			||||||
 | 
					+#define HAL_RX_PPDU_END_USER_STATS_INFO7_TID_EOSP_BITMAP	GENMASK(31, 16)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-#define HAL_RX_PPDU_END_USER_STATS_INFO7_MPDU_OK_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					-#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_ERR_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					+#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					+#define HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT	GENMASK(24, 0)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 struct hal_rx_ppdu_end_user_stats {
 | 
				
			||||||
 | 
					 	__le32 rsvd0[2];
 | 
				
			||||||
 | 
					@@ -236,12 +236,13 @@ struct hal_rx_ppdu_end_user_stats {
 | 
				
			||||||
 | 
					 	__le32 info4;
 | 
				
			||||||
 | 
					 	__le32 info5;
 | 
				
			||||||
 | 
					 	__le32 info6;
 | 
				
			||||||
 | 
					-	__le32 rsvd2[5];
 | 
				
			||||||
 | 
					 	__le32 info7;
 | 
				
			||||||
 | 
					-	__le32 rsvd3;
 | 
				
			||||||
 | 
					+	__le32 rsvd2[4];
 | 
				
			||||||
 | 
					 	__le32 info8;
 | 
				
			||||||
 | 
					-	__le32 rsvd3[2];
 | 
				
			||||||
 | 
					+	__le32 rsvd3;
 | 
				
			||||||
 | 
					 	__le32 info9;
 | 
				
			||||||
 | 
					+	__le32 rsvd4[2];
 | 
				
			||||||
 | 
					+	__le32 info10;
 | 
				
			||||||
 | 
					 } __packed;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 struct hal_rx_ppdu_end_user_stats_ext {
 | 
				
			||||||
@ -93,7 +93,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
				
			|||||||
 	default:
 | 
					 	default:
 | 
				
			||||||
 		return "UNKNOWN";
 | 
					 		return "UNKNOWN";
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
@@ -336,27 +366,14 @@ static void ath11k_mhi_op_status_cb(stru
 | 
					@@ -337,27 +367,14 @@ static void ath11k_mhi_op_status_cb(stru
 | 
				
			||||||
 		if (!(test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags)))
 | 
					 		if (!(test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags)))
 | 
				
			||||||
 			queue_work(ab->workqueue_aux, &ab->reset_work);
 | 
					 			queue_work(ab->workqueue_aux, &ab->reset_work);
 | 
				
			||||||
 		break;
 | 
					 		break;
 | 
				
			||||||
@ -138,7 +138,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
				
			|||||||
 int ath11k_mhi_register(struct ath11k_pci *ar_pci);
 | 
					 int ath11k_mhi_register(struct ath11k_pci *ar_pci);
 | 
				
			||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
 | 
					--- a/drivers/net/wireless/ath/ath11k/pci.c
 | 
				
			||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
 | 
					+++ b/drivers/net/wireless/ath/ath11k/pci.c
 | 
				
			||||||
@@ -370,13 +370,20 @@ static void ath11k_pci_sw_reset(struct a
 | 
					@@ -371,13 +371,20 @@ static void ath11k_pci_sw_reset(struct a
 | 
				
			||||||
 static void ath11k_pci_init_qmi_ce_config(struct ath11k_base *ab)
 | 
					 static void ath11k_pci_init_qmi_ce_config(struct ath11k_base *ab)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
 | 
					 	struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
 | 
					--- a/drivers/net/wireless/ath/ath11k/pci.c
 | 
				
			||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
 | 
					+++ b/drivers/net/wireless/ath/ath11k/pci.c
 | 
				
			||||||
@@ -458,7 +458,11 @@ static int ath11k_pci_alloc_msi(struct a
 | 
					@@ -459,7 +459,11 @@ static int ath11k_pci_alloc_msi(struct a
 | 
				
			||||||
 	pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO,
 | 
					 	pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO,
 | 
				
			||||||
 			      &ab->pci.msi.addr_lo);
 | 
					 			      &ab->pci.msi.addr_lo);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -8,17 +8,19 @@ so until that is resolved disabled it to allow using the radio.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
					Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 drivers/net/wireless/ath/ath11k/core.c | 2 +-
 | 
					 drivers/net/wireless/ath/ath11k/core.c | 4 ++--
 | 
				
			||||||
 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
					 1 file changed, 2 insertions(+), 2 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- a/drivers/net/wireless/ath/ath11k/core.c
 | 
					--- a/drivers/net/wireless/ath/ath11k/core.c
 | 
				
			||||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
 | 
					+++ b/drivers/net/wireless/ath/ath11k/core.c
 | 
				
			||||||
@@ -86,7 +86,7 @@ static const struct ath11k_hw_params ath
 | 
					@@ -86,8 +86,8 @@ static const struct ath11k_hw_params ath
 | 
				
			||||||
 		.supports_shadow_regs = false,
 | 
					 		.supports_shadow_regs = false,
 | 
				
			||||||
 		.idle_ps = false,
 | 
					 		.idle_ps = false,
 | 
				
			||||||
 		.supports_sta_ps = false,
 | 
					 		.supports_sta_ps = false,
 | 
				
			||||||
-		.cold_boot_calib = true,
 | 
					-		.coldboot_cal_mm = true,
 | 
				
			||||||
+		.cold_boot_calib = false,
 | 
					-		.coldboot_cal_ftm = true,
 | 
				
			||||||
 | 
					+		.coldboot_cal_mm = false,
 | 
				
			||||||
 | 
					+		.coldboot_cal_ftm = false,
 | 
				
			||||||
 		.cbcal_restart_fw = true,
 | 
					 		.cbcal_restart_fw = true,
 | 
				
			||||||
 		.fw_mem_mode = 0,
 | 
					 		.fw_mem_mode = 0,
 | 
				
			||||||
 		.num_vdevs = 16 + 1,
 | 
					 		.num_vdevs = 16 + 1,
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
				
			|||||||
 	{
 | 
					 	{
 | 
				
			||||||
 		.hw_rev = ATH11K_HW_IPQ8074,
 | 
					 		.hw_rev = ATH11K_HW_IPQ8074,
 | 
				
			||||||
 		.name = "ipq8074 hw2.0",
 | 
					 		.name = "ipq8074 hw2.0",
 | 
				
			||||||
@@ -1954,7 +1954,8 @@ static void ath11k_core_reset(struct wor
 | 
					@@ -1974,7 +1974,8 @@ static void ath11k_core_reset(struct wor
 | 
				
			||||||
 static int ath11k_init_hw_params(struct ath11k_base *ab)
 | 
					 static int ath11k_init_hw_params(struct ath11k_base *ab)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	const struct ath11k_hw_params *hw_params = NULL;
 | 
					 	const struct ath11k_hw_params *hw_params = NULL;
 | 
				
			||||||
@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
 | 
					 	for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
 | 
				
			||||||
 		hw_params = &ath11k_hw_params[i];
 | 
					 		hw_params = &ath11k_hw_params[i];
 | 
				
			||||||
@@ -1970,7 +1971,30 @@ static int ath11k_init_hw_params(struct
 | 
					@@ -1990,7 +1991,31 @@ static int ath11k_init_hw_params(struct
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	ab->hw_params = *hw_params;
 | 
					 	ab->hw_params = *hw_params;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -62,7 +62,8 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
 | 
				
			|||||||
+			ab->hw_params.fw_mem_mode = 2;
 | 
					+			ab->hw_params.fw_mem_mode = 2;
 | 
				
			||||||
+			ab->hw_params.num_vdevs = 8;
 | 
					+			ab->hw_params.num_vdevs = 8;
 | 
				
			||||||
+			ab->hw_params.num_peers = 128;
 | 
					+			ab->hw_params.num_peers = 128;
 | 
				
			||||||
+			ab->hw_params.cold_boot_calib = false;
 | 
					+			ab->hw_params.coldboot_cal_mm = false;
 | 
				
			||||||
 | 
					+			ab->hw_params.coldboot_cal_ftm = false;
 | 
				
			||||||
+		} else
 | 
					+		} else
 | 
				
			||||||
+			ath11k_info(ab, "Unsupported FW memory mode: %u\n", fw_mem_mode);
 | 
					+			ath11k_info(ab, "Unsupported FW memory mode: %u\n", fw_mem_mode);
 | 
				
			||||||
+	}
 | 
					+	}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user