[PATCH ath-next v2] wifi: ath12k: Fix incorrect rates sent to firmware

Roopni Devanathan quic_rdevanat at quicinc.com
Wed Mar 19 23:54:54 PDT 2025



On 3/20/2025 5:54 AM, Ping-Ke Shih wrote:
>> diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
>> index 9fda97667d4e..661167acaa69 100644
>> --- a/drivers/net/wireless/ath/ath12k/mac.c
>> +++ b/drivers/net/wireless/ath/ath12k/mac.c
>> @@ -3450,7 +3450,9 @@ static void ath12k_recalculate_mgmt_rate(struct ath12k *ar,
>>         }
>>
>>         sband = hw->wiphy->bands[def->chan->band];
>> -       basic_rate_idx = ffs(bss_conf->basic_rates) - 1;
>> +       basic_rate_idx = __ffs(bss_conf->basic_rates);
>> +       if (basic_rate_idx)
>> +               basic_rate_idx -= 1;
> 
> It looks like you misunderstood what I meant. 
> 
> The difference of ffs() and __ffs():
> ffs(0x0) = 0, ffs(0x1) = 1
> __ffs(0x0) = undefined, __ffs(0x1) = 0
> 
> So you need to ensure argument isn't zero before calling __ffs(), and no
> need to minus 1 after the call.
> 
Noted the difference, thanks for explaining. I'll do something like:
if (bss_conf->basic_rates)
	basic_rate_idx = __ffs(bss_conf->basic_rates);
else
	basic_rate_idx = 0;

>>         bitrate = sband->bitrates[basic_rate_idx].bitrate;
>>
>>         hw_rate_code = ath12k_mac_get_rate_hw_value(bitrate);
>> @@ -3983,10 +3985,13 @@ static void ath12k_mac_bss_info_changed(struct ath12k *ar,
>>                 band = def.chan->band;
>>                 mcast_rate = info->mcast_rate[band];
>>
>> -               if (mcast_rate > 0)
>> +               if (mcast_rate > 0) {
>>                         rateidx = mcast_rate - 1;
>> -               else
>> -                       rateidx = ffs(info->basic_rates) - 1;
>> +               } else {
>> +                       rateidx = __ffs(info->basic_rates);
>> +                       if (rateidx)
>> +                               rateidx -= 1;
> 
> Here should be:
> 
> if (info->basic_rates)
>     rateidx = __ffs(info->basic_rates);
> else
>     rateidx = 0;
> 
Sure, will change this in next version.

>> +               }
>>
>>                 if (ar->pdev->cap.supported_bands & WMI_HOST_WLAN_5G_CAP)
>>                         rateidx += ATH12K_MAC_FIRST_OFDM_RATE_IDX;
>>
>> base-commit: b6f473c96421b8b451a8df8ccb620bcd71d4b3f4
>> --
>> 2.34.1
>>
> 



More information about the ath12k mailing list