diff mbox series

ath10k: enable rx duration report default for wmi tlv

Message ID 20200423022758.5365-1-wgong@codeaurora.org (mailing list archive)
State Accepted
Commit 4913e675630ec1a15c92651f426a63755c71b91b
Delegated to: Kalle Valo
Headers show
Series ath10k: enable rx duration report default for wmi tlv | expand

Commit Message

Wen Gong April 23, 2020, 2:27 a.m. UTC
When run command "iw dev wlan0 station dump", the rx duration is 0.
When firmware indicate WMI_UPDATE_STATS_EVENTID, extended flag of
statsis not set by default, so firmware do not report rx duration.

one sample:
localhost # iw wlan0 station dump
Station c4:04:15:5d:97:22 (on wlan0)
        inactive time:  48 ms
        rx bytes:       21670
        rx packets:     147
        tx bytes:       11529
        tx packets:     100
        tx retries:     88
        tx failed:      36
        beacon loss:    1
        beacon rx:      31
        rx drop misc:   47
        signal:         -72 [-74, -75] dBm
        signal avg:     -71 [-74, -75] dBm
        beacon signal avg:      -71 dBm
        tx bitrate:     54.0 MBit/s MCS 3 40MHz
        rx bitrate:     1.0 MBit/s
	rx duration:    0 us

This patch enable firmware's extened flag of stats by setting flag
WMI_TLV_STAT_PEER_EXTD of ar->fw_stats_req_mask which is set in
ath10k_core_init_firmware_features via WMI_REQUEST_STATS_CMDID.

After apply this patch, rx duration show value with the command:
Station c4:04:15:5d:97:22 (on wlan0)
        inactive time:  883 ms
        rx bytes:       44289
        rx packets:     265
        tx bytes:       10838
        tx packets:     93
        tx retries:     899
        tx failed:      103
        beacon loss:    0
        beacon rx:      78
        rx drop misc:   46
        signal:         -71 [-74, -76] dBm
        signal avg:     -70 [-74, -76] dBm
        beacon signal avg:      -70 dBm
        tx bitrate:     54.0 MBit/s MCS 3 40MHz
        rx bitrate:     1.0 MBit/s
        rx duration:    358004 us

This patch do not have side effect for all chips, because function
ath10k_debug_fw_stats_request is already exported to debugfs
"fw_stats" and WMI_REQUEST_STATS_CMDID is safely sent after condition
checked by ath10k_peer_stats_enabled in ath10k_sta_statistics.

Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00042.

Signed-off-by: Wen Gong <wgong@codeaurora.org>
---
 drivers/net/wireless/ath/ath10k/debug.c | 2 +-
 drivers/net/wireless/ath/ath10k/debug.h | 8 ++++++++
 drivers/net/wireless/ath/ath10k/mac.c   | 2 ++
 3 files changed, 11 insertions(+), 1 deletion(-)

Comments

Kalle Valo April 27, 2020, 5:01 a.m. UTC | #1
Wen Gong <wgong@codeaurora.org> wrote:

> When run command "iw dev wlan0 station dump", the rx duration is 0.
> When firmware indicate WMI_UPDATE_STATS_EVENTID, extended flag of
> statsis not set by default, so firmware do not report rx duration.
> 
> one sample:
> localhost # iw wlan0 station dump
> Station c4:04:15:5d:97:22 (on wlan0)
>         inactive time:  48 ms
>         rx bytes:       21670
>         rx packets:     147
>         tx bytes:       11529
>         tx packets:     100
>         tx retries:     88
>         tx failed:      36
>         beacon loss:    1
>         beacon rx:      31
>         rx drop misc:   47
>         signal:         -72 [-74, -75] dBm
>         signal avg:     -71 [-74, -75] dBm
>         beacon signal avg:      -71 dBm
>         tx bitrate:     54.0 MBit/s MCS 3 40MHz
>         rx bitrate:     1.0 MBit/s
> 	rx duration:    0 us
> 
> This patch enable firmware's extened flag of stats by setting flag
> WMI_TLV_STAT_PEER_EXTD of ar->fw_stats_req_mask which is set in
> ath10k_core_init_firmware_features via WMI_REQUEST_STATS_CMDID.
> 
> After apply this patch, rx duration show value with the command:
> Station c4:04:15:5d:97:22 (on wlan0)
>         inactive time:  883 ms
>         rx bytes:       44289
>         rx packets:     265
>         tx bytes:       10838
>         tx packets:     93
>         tx retries:     899
>         tx failed:      103
>         beacon loss:    0
>         beacon rx:      78
>         rx drop misc:   46
>         signal:         -71 [-74, -76] dBm
>         signal avg:     -70 [-74, -76] dBm
>         beacon signal avg:      -70 dBm
>         tx bitrate:     54.0 MBit/s MCS 3 40MHz
>         rx bitrate:     1.0 MBit/s
>         rx duration:    358004 us
> 
> This patch do not have side effect for all chips, because function
> ath10k_debug_fw_stats_request is already exported to debugfs
> "fw_stats" and WMI_REQUEST_STATS_CMDID is safely sent after condition
> checked by ath10k_peer_stats_enabled in ath10k_sta_statistics.
> 
> Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00042.
> 
> Signed-off-by: Wen Gong <wgong@codeaurora.org>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>

Patch applied to ath-next branch of ath.git, thanks.

4913e675630e ath10k: enable rx duration report default for wmi tlv
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
index 69139c2e6f82..e8250a665433 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -349,7 +349,7 @@  void ath10k_debug_fw_stats_process(struct ath10k *ar, struct sk_buff *skb)
 	spin_unlock_bh(&ar->data_lock);
 }
 
-static int ath10k_debug_fw_stats_request(struct ath10k *ar)
+int ath10k_debug_fw_stats_request(struct ath10k *ar)
 {
 	unsigned long timeout, time_left;
 	int ret;
diff --git a/drivers/net/wireless/ath/ath10k/debug.h b/drivers/net/wireless/ath/ath10k/debug.h
index 82f7eb8583d9..4cbfd9279d6f 100644
--- a/drivers/net/wireless/ath/ath10k/debug.h
+++ b/drivers/net/wireless/ath/ath10k/debug.h
@@ -125,6 +125,9 @@  static inline int ath10k_debug_is_extd_tx_stats_enabled(struct ath10k *ar)
 {
 	return ar->debug.enable_extd_tx_stats;
 }
+
+int ath10k_debug_fw_stats_request(struct ath10k *ar);
+
 #else
 
 static inline int ath10k_debug_start(struct ath10k *ar)
@@ -192,6 +195,11 @@  static inline int ath10k_debug_is_extd_tx_stats_enabled(struct ath10k *ar)
 	return 0;
 }
 
+static inline int ath10k_debug_fw_stats_request(struct ath10k *ar)
+{
+	return 0;
+}
+
 #define ATH10K_DFS_STAT_INC(ar, c) do { } while (0)
 
 #define ath10k_debug_get_et_strings NULL
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 6791c0035be0..ea5a26ea9b32 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -8306,6 +8306,8 @@  static void ath10k_sta_statistics(struct ieee80211_hw *hw,
 	if (!ath10k_peer_stats_enabled(ar))
 		return;
 
+	ath10k_debug_fw_stats_request(ar);
+
 	sinfo->rx_duration = arsta->rx_duration;
 	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_DURATION);