 drivers/net/wireless/ath/ath11k/dp_rx.c  | 3 ++-
 drivers/net/wireless/ath/ath11k/hal_rx.c | 3 +++
 drivers/net/wireless/ath/ath11k/hal_rx.h | 2 ++
 3 files changed, 7 insertions(+), 1 deletion(-)

--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
@@ -3224,8 +3224,11 @@ int ath11k_dp_rx_process_mon_status(stru
 			continue;
 		}
 
-		arsta = (struct ath11k_sta *)peer->sta->drv_priv;
-		ath11k_dp_rx_update_peer_stats(arsta, &ppdu_info);
+		if ((ppdu_info.fc_valid) &&
+		    (ppdu_info.ast_index != HAL_AST_IDX_INVALID)) {
+			arsta = (struct ath11k_sta *)peer->sta->drv_priv;
+			ath11k_dp_rx_update_peer_stats(arsta, &ppdu_info);
+		}
 
 		if (ath11k_debugfs_is_pktlog_peer_valid(ar, peer->addr)) {
 			trace_ath11k_htt_rxdesc(ar, skb->data, DP_RX_BUFFER_SIZE);
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
@@ -930,6 +930,9 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
 		ppdu_info->ast_index =
 			FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX,
 				   __le32_to_cpu(eu_stats->info2));
+		ppdu_info->fc_valid =
+			FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO1_FC_VALID,
+				   __le32_to_cpu(eu_stats->info1));
 		ppdu_info->tid =
 			ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP,
 				      __le32_to_cpu(eu_stats->info6))) - 1;
--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
@@ -90,6 +90,7 @@ enum hal_rx_legacy_rate {
 #define HAL_TLV_STATUS_BUF_DONE                 2
 #define HAL_TLV_STATUS_PPDU_NON_STD_DONE        3
 #define HAL_RX_FCS_LEN                          4
+#define HAL_AST_IDX_INVALID                     0xFFFF
 
 enum hal_rx_mon_status {
 	HAL_RX_MON_STATUS_PPDU_NOT_DONE,
@@ -157,6 +158,7 @@ struct hal_rx_mon_ppdu_info {
 	u8 beamformed;
 	u8 rssi_comb;
 	u8 tid;
+	u8 fc_valid;
 	u16 ht_flags;
 	u16 vht_flags;
 	u16 he_flags;
