mbox series

[0/2] wifi: ath12k: fix radar detection in secondary 80 MHz

Message ID 20230802085852.19821-1-quic_mdharane@quicinc.com
Headers show
Series wifi: ath12k: fix radar detection in secondary 80 MHz | expand

Message

Manish Dharanenthiran Aug. 2, 2023, 8:58 a.m. UTC
This patch series add fix for radar detection in secondary 80 MHz when the
AP's primary 80MHz is in non-DFS region in 160 MHz. Also, adds changes for
fixing WARN_ON in ath12k_mac_update_vif_chan.

Manish Dharanenthiran (2):
  wifi: ath12k: fix WARN_ON during ath12k_mac_update_vif_chan
  wifi: ath12k: fix radar detection in 160 MHz

 drivers/net/wireless/ath/ath12k/mac.c | 47 +++++++++++++++++++--------
 1 file changed, 33 insertions(+), 14 deletions(-)


base-commit: dfa8dc118e3cef402d4fbc2ae9cab418197d103b

Comments

Manish Dharanenthiran Aug. 3, 2023, 11:19 a.m. UTC | #1
On 8/2/2023 8:29 PM, Jeff Johnson wrote:
> On 8/2/2023 1:58 AM, Manish Dharanenthiran wrote:
>> Fix WARN_ON() from ath12k_mac_update_vif_chan() if vdev is not up.
>> Since change_chanctx can be called even before vdev_up.
>>
>> Do vdev stop followed by a vdev start in case of vdev is down.
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0-02903-QCAHKSWPL_SILICONZ-1
> 
> Has this been tested on WCN7850? My understanding is that firmware may 
> expect vdev down and then vdev restart
Hi Jeff,

No, not tested with WCN7850 chip-set. But, we will be sending vdev_down 
before starting the restart sequence. Let me get help from MCC team to 
test this patch and update the changes, if needed.
> 
>>
>> Signed-off-by: Manish Dharanenthiran <quic_mdharane@quicinc.com>
>> ---
>>   drivers/net/wireless/ath/ath12k/mac.c | 27 +++++++++++++++++++++------
>>   1 file changed, 21 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath12k/mac.c 
>> b/drivers/net/wireless/ath/ath12k/mac.c
>> index 1bb9802ef569..0ab95e138d1d 100644
>> --- a/drivers/net/wireless/ath/ath12k/mac.c
>> +++ b/drivers/net/wireless/ath/ath12k/mac.c
>> @@ -5698,13 +5698,28 @@ ath12k_mac_update_vif_chan(struct ath12k *ar,
>>           if (WARN_ON(!arvif->is_started))
>>               continue;
>> -        if (WARN_ON(!arvif->is_up))
>> -            continue;
>> +        /* Firmware expect vdev_restart only if vdev is up.
>> +         * If vdev is down then it expect vdev_stop->vdev_start.
>> +         */
>> +        if (arvif->is_up) {
>> +            ret = ath12k_mac_vdev_restart(arvif, &vifs[i].new_ctx->def);
>> +            if (ret) {
>> +                ath12k_warn(ab, "failed to restart vdev %d: %d\n",
>> +                        arvif->vdev_id, ret);
>> +                continue;
>> +            }
>> +        } else {
>> +            ret = ath12k_mac_vdev_stop(arvif);
>> +            if (ret) {
>> +                ath12k_warn(ab, "failed to stop vdev %d: %d\n",
>> +                        arvif->vdev_id, ret);
>> +                continue;
>> +            }
>> -        ret = ath12k_mac_vdev_restart(arvif, &vifs[i].new_ctx->def);
>> -        if (ret) {
>> -            ath12k_warn(ab, "failed to restart vdev %d: %d\n",
>> -                    arvif->vdev_id, ret);
>> +            ret = ath12k_mac_vdev_start(arvif, &vifs[i].new_ctx->def);
>> +            if (ret)
>> +                ath12k_warn(ab, "failed to start vdev %d: %d\n",
>> +                        arvif->vdev_id, ret);
>>               continue;
>>           }
>