Govind Singh <govi...@codeaurora.org> writes:

> From: Rakesh Pillai <pill...@codeaurora.org>
>
> HL2.0 firmware does not support setting quiet mode.
> If the host driver sends the quiet mode setting
> command to the HL2.0 firmware, it crashes with the
> below signature.
>
> fatal error received: err_qdi.c:456:EX:wlan_process:1:WLAN RT:207a:PC=b001b4f0
>
> The quiet mode command support is exposed by the firmware
> via thermal throttle wmi service. Enable ath10k thermal
> support if thermal throttle wmi service bit is set.
> 10X firmware version supports this feature by default, hence
> set this service bit by default.
>
> Tested HW: WCN3990
> Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1

So this would also need testing with QCA988X or QCA9884 family of
devices, I don't think this patch would have worked as is.

> Co-developed-by: Govind Singh <govi...@codeaurora.org>
> Signed-off-by: Rakesh Pillai <pill...@codeaurora.org>
> Signed-off-by: Govind Singh <govi...@codeaurora.org>

I had few comments below which I fixed myself. I'll send v2 soon.

> @@ -2621,6 +2621,10 @@ int ath10k_core_start(struct ath10k *ar, enum 
> ath10k_firmware_mode mode,
>               goto err_hif_stop;
>       }
>  
> +     if (test_bit(ATH10K_FW_FEATURE_WMI_10X,
> +                  ar->normal_mode_fw.fw_file.fw_features)) {
> +             set_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map);
> +     }

I don't think testing for ATH10K_FW_FEATURE_WMI_10X works, that's a
really old and deprecated flag. wmi_op_version should be more reliable.

Also I refactored this to it's own function.

>       /* Some firmware revisions do not properly set up hardware rx filter
>        * registers.
>        *
> @@ -2919,11 +2923,13 @@ static void ath10k_core_register_work(struct 
> work_struct *work)
>               goto err_debug_destroy;
>       }
>  
> -     status = ath10k_thermal_register(ar);
> -     if (status) {
> -             ath10k_err(ar, "could not register thermal device: %d\n",
> -                        status);
> -             goto err_spectral_destroy;
> +     if (test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map)) {
> +             status = ath10k_thermal_register(ar);
> +             if (status) {
> +                     ath10k_err(ar, "could not register thermal device: 
> %d\n",
> +                                status);
> +                     goto err_spectral_destroy;
> +             }
>       }

The code becomes cleaner if the test is in thermal.c so I moved it
there.

> @@ -2964,7 +2970,8 @@ void ath10k_core_unregister(struct ath10k *ar)
>       if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
>               return;
>  
> -     ath10k_thermal_unregister(ar);
> +     if (test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map))
> +             ath10k_thermal_unregister(ar);

Same here.

> --- a/drivers/net/wireless/ath/ath10k/mac.c
> +++ b/drivers/net/wireless/ath/ath10k/mac.c
> @@ -4800,7 +4800,8 @@ static int ath10k_start(struct ieee80211_hw *hw)
>       ath10k_regd_update(ar);
>  
>       ath10k_spectral_start(ar);
> -     ath10k_thermal_set_throttling(ar);
> +     if (test_bit(WMI_SERVICE_THERM_THROT, ar->wmi.svc_map))
> +             ath10k_thermal_set_throttling(ar);

And here.

-- 
Kalle Valo

_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

Reply via email to