summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath/ath10k/htc.h
diff options
context:
space:
mode:
authorWen Gong <wgong@codeaurora.org>2019-11-29 10:59:59 +0300
committerKalle Valo <kvalo@codeaurora.org>2019-12-02 13:06:56 +0300
commit4a99124516307e0fc4ed7517c0af796091a159d5 (patch)
tree4b5e3313f834acc0377369feb056b8b61ec467a0 /drivers/net/wireless/ath/ath10k/htc.h
parentcfee8793a74dc3afabb08fc9ed5bbe2045709dbb (diff)
downloadlinux-4a99124516307e0fc4ed7517c0af796091a159d5.tar.xz
ath10k: change bundle count for max rx bundle for sdio
For max bundle size 32, the bundle mask is not same with 8/16. Change it to match the max bundle size of htc. Otherwise it will not match with firmware, for example, when bundle count is 17, then flags of ath10k_htc_hdr is 0x4, if without this patch, it will be considered as non-bundled packet because it does not have mask 0xF0, then trigger error message later: payload length 56747 exceeds max htc length: 4088. htc->max_msgs_per_htc_bundle is the min value of HTC_HOST_MAX_MSG_PER_RX_BUNDLE and msg->ready_ext.max_msgs_per_htc_bundle of ath10k_htc_wait_target, it will be sent to firmware later in ath10k_htc_start, then firmware will use it as the final max rx bundle count, in WLAN.RMH.4.4.1-00029, msg->ready_ext.max_msgs_per_htc_bundle is 32, it is same with HTC_HOST_MAX_MSG_PER_RX_BUNDLE, so the final max rx bundle count will be set to 32 in firmware. This patch only effect sdio chips. Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00029. Signed-off-by: Wen Gong <wgong@codeaurora.org> Fixes: 224776520ead69e ("ath10k: change max RX bundle size from 8 to 32 for sdio") Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/htc.h')
-rw-r--r--drivers/net/wireless/ath/ath10k/htc.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
index 16102175e07a..065c82d9d689 100644
--- a/drivers/net/wireless/ath/ath10k/htc.h
+++ b/drivers/net/wireless/ath/ath10k/htc.h
@@ -58,13 +58,15 @@ enum ath10k_htc_rx_flags {
#define ATH10K_HTC_BUNDLE_EXTRA_MASK GENMASK(3, 2)
#define ATH10K_HTC_BUNDLE_EXTRA_SHIFT 4
-static inline unsigned int ath10k_htc_get_bundle_count(u8 flags)
+static inline unsigned int ath10k_htc_get_bundle_count(u8 max_msgs, u8 flags)
{
- unsigned int count, extra_count;
+ unsigned int count, extra_count = 0;
count = FIELD_GET(ATH10K_HTC_FLAG_BUNDLE_MASK, flags);
- extra_count = FIELD_GET(ATH10K_HTC_BUNDLE_EXTRA_MASK, flags) <<
- ATH10K_HTC_BUNDLE_EXTRA_SHIFT;
+
+ if (max_msgs > 16)
+ extra_count = FIELD_GET(ATH10K_HTC_BUNDLE_EXTRA_MASK, flags) <<
+ ATH10K_HTC_BUNDLE_EXTRA_SHIFT;
return count + extra_count;
}