wlan-ap-Telecominfraproject/feeds/ipq807x/mac80211/patches/112-ath11k-fix-parsing-pktlog-lite.patch
John Crispin 3affbc1cad QualComm/AX: add Hawkeye and Cypress support
This series is based on
* 2020-07-10 ipq6018-ilq-11-0_qca_oem-034672b0676c37b1f4519e5720e18e95fe6236ef

Add support for
* qsdk kernel/v4.4
* qsdk ethernet subsystem
* v5.7 ath11k backport + QualComm staging patches (wlan_ap_1.0)
* ath11k-firmware
* hostapd/iw/...

Feature support
* full boot, system detection
* sysupgrade to nand
* HE support via latest hostapd
* driver support for usb, crypto, hwmon, cpufreq, ...

Missing
* NSS/HW flow offloading - FW blob is not redistributable

Using the qsdk v4.4 is an intermediate solution while the vanilla is being
tested. Vanilla kernel is almost on feature par. Work has already started
to upstream the ethernet and switch drivers. Once complete the target will
be fully upstream.

Signed-off-by: John Crispin <john@phrozen.org>
2020-07-23 18:54:03 +02:00

160 lines
6.0 KiB
Diff

Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/debug.c
===================================================================
--- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/debug.c
+++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/debug.c
@@ -1226,7 +1226,7 @@ static ssize_t ath11k_write_pktlog_filte
struct htt_rx_ring_tlv_filter tlv_filter = {0};
u32 rx_filter = 0, ring_id, filter, mode;
u8 buf[128] = {0};
- int ret;
+ int ret, rx_buf_sz;
ssize_t rc;
mutex_lock(&ar->conf_mutex);
@@ -1264,6 +1264,17 @@ static ssize_t ath11k_write_pktlog_filte
}
}
+ /* Clear rx filter set for monitor mode and rx status */
+ ring_id = ar->dp.rx_mon_status_refill_ring.refill_buf_ring.ring_id;
+ ret = ath11k_dp_tx_htt_rx_filter_setup(ar->ab, ring_id, ar->dp.mac_id,
+ HAL_RXDMA_MONITOR_STATUS,
+ rx_buf_sz, &tlv_filter);
+ if (ret) {
+ ath11k_warn(ar->ab, "failed to set rx filter for monitor status ring\n");
+ goto out;
+ }
+
+
#define HTT_RX_FILTER_TLV_LITE_MODE \
(HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \
HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \
@@ -1279,6 +1290,7 @@ static ssize_t ath11k_write_pktlog_filte
HTT_RX_FILTER_TLV_FLAGS_MPDU_END |
HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER |
HTT_RX_FILTER_TLV_FLAGS_ATTENTION;
+ rx_buf_sz = DP_RX_BUFFER_SIZE;
} else if (mode == ATH11K_PKTLOG_MODE_LITE) {
ret = ath11k_dp_tx_htt_h2t_ppdu_stats_req(ar,
HTT_PPDU_STATS_TAG_PKTLOG);
@@ -1288,7 +1300,12 @@ static ssize_t ath11k_write_pktlog_filte
}
rx_filter = HTT_RX_FILTER_TLV_LITE_MODE;
+ rx_buf_sz = DP_RX_BUFFER_SIZE_LITE;
} else {
+ rx_buf_sz = DP_RX_BUFFER_SIZE;
+ tlv_filter = ath11k_mac_mon_status_filter_default;
+ rx_filter = tlv_filter.rx_filter;
+
ret = ath11k_dp_tx_htt_h2t_ppdu_stats_req(ar,
HTT_PPDU_STATS_TAG_DEFAULT);
if (ret) {
@@ -1309,14 +1326,14 @@ static ssize_t ath11k_write_pktlog_filte
ring_id = ar->dp.rx_mon_status_refill_ring.refill_buf_ring.ring_id;
ret = ath11k_dp_tx_htt_rx_filter_setup(ar->ab, ring_id, ar->dp.mac_id,
HAL_RXDMA_MONITOR_STATUS,
- DP_RX_BUFFER_SIZE, &tlv_filter);
+ rx_buf_sz, &tlv_filter);
if (ret) {
ath11k_warn(ar->ab, "failed to set rx filter for monitor status ring\n");
goto out;
}
- ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "pktlog filter %d mode %s\n",
- filter, ((mode == ATH11K_PKTLOG_MODE_FULL) ? "full" : "lite"));
+ ath11k_info(ar->ab, "pktlog mode %s\n",
+ ((mode == ATH11K_PKTLOG_MODE_FULL) ? "full" : "lite"));
ar->debug.pktlog_filter = filter;
ar->debug.pktlog_mode = mode;
Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp.h
===================================================================
--- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/dp.h
+++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp.h
@@ -190,6 +190,7 @@ struct ath11k_pdev_dp {
#define DP_RXDMA_MONITOR_DESC_RING_SIZE 4096
#define DP_RX_BUFFER_SIZE 2048
+#define DP_RX_BUFFER_SIZE_LITE 1024
#define DP_RX_BUFFER_ALIGN_SIZE 128
#define DP_RXDMA_BUF_COOKIE_BUF_ID GENMASK(17, 0)
Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp_rx.c
===================================================================
--- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/dp_rx.c
+++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp_rx.c
@@ -3260,6 +3260,8 @@ int ath11k_dp_rx_process_mon_status(stru
struct ath11k_peer *peer;
struct ath11k_sta *arsta;
int num_buffs_reaped = 0;
+ u32 rx_buf_sz;
+ u16 log_type = 0;
__skb_queue_head_init(&skb_list);
@@ -3272,10 +3274,18 @@ int ath11k_dp_rx_process_mon_status(stru
memset(&ppdu_info, 0, sizeof(ppdu_info));
ppdu_info.peer_id = HAL_INVALID_PEERID;
- if (ath11k_debug_is_pktlog_rx_stats_enabled(ar)) {
- trace_ath11k_htt_rxdesc(ar, skb->data, DP_RX_BUFFER_SIZE);
+ if (ath11k_debug_is_pktlog_lite_mode_enabled(ar)) {
+ log_type = ATH11K_PKTLOG_TYPE_LITE_RX;
+ rx_buf_sz = DP_RX_BUFFER_SIZE_LITE;
+ } else if (ath11k_debug_is_pktlog_rx_stats_enabled(ar)) {
+ log_type = ATH11K_PKTLOG_TYPE_RX_STATBUF;
+ rx_buf_sz = DP_RX_BUFFER_SIZE;
+ }
+
+ if (log_type) {
+ trace_ath11k_htt_rxdesc(ar, skb->data, log_type, rx_buf_sz);
ath11k_rx_stats_buf_pktlog_process(ar, skb->data,
- DP_RX_BUFFER_SIZE);
+ log_type, rx_buf_sz);
}
hal_status = ath11k_hal_rx_parse_mon_status(ab, &ppdu_info, skb);
@@ -3312,9 +3322,8 @@ int ath11k_dp_rx_process_mon_status(stru
}
if (ath11k_debug_is_pktlog_peer_valid(ar, peer->addr)) {
- trace_ath11k_htt_rxdesc(ar, skb->data, DP_RX_BUFFER_SIZE);
- ath11k_rx_stats_buf_pktlog_process(ar, skb->data,
- DP_RX_BUFFER_SIZE);
+ trace_ath11k_htt_rxdesc(ar, skb->data, log_type, rx_buf_sz);
+ ath11k_rx_stats_buf_pktlog_process(ar, skb->data, log_type, rx_buf_sz);
}
spin_unlock_bh(&ab->base_lock);
Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/trace.h
===================================================================
--- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/trace.h
+++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/trace.h
@@ -79,14 +79,15 @@ TRACE_EVENT(ath11k_htt_ppdu_stats,
);
TRACE_EVENT(ath11k_htt_rxdesc,
- TP_PROTO(struct ath11k *ar, const void *data, size_t len),
+ TP_PROTO(struct ath11k *ar, const void *data, size_t type, size_t len),
- TP_ARGS(ar, data, len),
+ TP_ARGS(ar, data, type, len),
TP_STRUCT__entry(
__string(device, dev_name(ar->ab->dev))
__string(driver, dev_driver_string(ar->ab->dev))
__field(u16, len)
+ __field(u16, type)
__dynamic_array(u8, rxdesc, len)
),
@@ -94,6 +95,7 @@ TRACE_EVENT(ath11k_htt_rxdesc,
__assign_str(device, dev_name(ar->ab->dev));
__assign_str(driver, dev_driver_string(ar->ab->dev));
__entry->len = len;
+ __entry->type = type;
memcpy(__get_dynamic_array(rxdesc), data, len);
),