[PATCH ath-next v7 4/5] wifi: ath12k: correctly update bw for ofdma packets

Sarika Sharma quic_sarishar at quicinc.com
Tue Jul 1 01:50:15 PDT 2025


On 7/1/2025 1:02 PM, Vasanthakumar Thiagarajan wrote:
> 
> 
> On 6/30/2025 12:41 PM, Sarika Sharma wrote:
>> Currently, arsta->txrate.bw is filled from 
>> ath12k_mac_bw_to_mac80211_bw(bw)
>> during ath12k_update_per_peer_tx_stats(). But in tx_completion path bw
>> is filled differently if ppdu_type is ofdma for HE/EHT rates.
>>
>> Hence, update arsta->txrate.bw correctly if packet is ofdma for HE
>> and EHT rate.
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
>>
>> Signed-off-by: Sarika Sharma <quic_sarishar at quicinc.com>
>> ---
>>   drivers/net/wireless/ath/ath12k/dp.h    |  2 ++
>>   drivers/net/wireless/ath/ath12k/dp_rx.c | 15 ++++++++++++---
>>   2 files changed, 14 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath12k/dp.h b/drivers/net/ 
>> wireless/ath/ath12k/dp.h
>> index a353333f83b6..0c1fece27264 100644
>> --- a/drivers/net/wireless/ath/ath12k/dp.h
>> +++ b/drivers/net/wireless/ath/ath12k/dp.h
>> @@ -1559,6 +1559,8 @@ enum HTT_PPDU_STATS_PPDU_TYPE {
>>   #define HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M        BIT(28)
>>   #define HTT_PPDU_STATS_USER_RATE_FLAGS_LDPC_M        BIT(29)
>> +#define HTT_USR_RATE_PPDU_TYPE(_val) \
>> +        le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M)
>>   #define HTT_USR_RATE_PREAMBLE(_val) \
>>           le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M)
>>   #define HTT_USR_RATE_BW(_val) \
>> diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/ 
>> wireless/ath/ath12k/dp_rx.c
>> index 0f5edc81fc5d..ff92ec764ae5 100644
>> --- a/drivers/net/wireless/ath/ath12k/dp_rx.c
>> +++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
>> @@ -1423,12 +1423,12 @@ ath12k_update_per_peer_tx_stats(struct ath12k 
>> *ar,
>>       struct htt_ppdu_user_stats *usr_stats = &ppdu_stats- 
>> >user_stats[user];
>>       struct htt_ppdu_stats_common *common = &ppdu_stats->common;
>>       int ret;
>> -    u8 flags, mcs, nss, bw, sgi, dcm, rate_idx = 0;
>> +    u8 flags, mcs, nss, bw, sgi, dcm, ppdu_type, rate_idx = 0;
>>       u32 v, succ_bytes = 0;
>>       u16 tones, rate = 0, succ_pkts = 0;
>>       u32 tx_duration = 0;
>>       u8 tid = HTT_PPDU_STATS_NON_QOS_TID;
>> -    bool is_ampdu = false;
>> +    bool is_ampdu = false, is_ofdma = false;
> 
> nit: initialization of is_ofdma is unnecessary as it is unconditionally
> populated below.
> 
>  >       if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE)))
>  >           return;
>  > @@ -1457,6 +1457,10 @@ ath12k_update_per_peer_tx_stats(struct ath12k 
> *ar,
>  >       sgi = HTT_USR_RATE_GI(user_rate->rate_flags);
>  >       dcm = HTT_USR_RATE_DCM(user_rate->rate_flags);
>  >
>  > +    ppdu_type = HTT_USR_RATE_PPDU_TYPE(user_rate->info1);
>  > +    is_ofdma = (ppdu_type == HTT_PPDU_STATS_PPDU_TYPE_MU_OFDMA) ||
>  > +           (ppdu_type == HTT_PPDU_STATS_PPDU_TYPE_MU_MIMO_OFDMA);
>  > +
> 

Sure, will remove it.

> 
> Vasanth




More information about the ath12k mailing list