[PATCH v3] ath11k: cold boot calibration support
Peter Oh
peter.oh at eero.com
Thu Sep 17 15:54:51 EDT 2020
On 9/15/20 2:59 AM, Sowmiya Sree Elavalagan wrote:
> From: Govindaraj Saminathan <gsamin at codeaurora.org>
>
> cold boot calibration is the process to calibrate all the channels
> during the boot-up to avoid the calibration delay during the
> channel change.
> During the boot-up, firmware started with mode “cold_boot_calibration”
> Firmware calibrate all channels and generate CalDb(DDR).
> Subsequent WIFI ON will reuse the same CalDb.
Can you clarify the definition of "WIFI ON"?
> Firmware restarted with Mission mode to continue the normal operation.
Please change the mission mode to normal according to
ATH11K_FIRMWARE_MODE_NORMAL.
Which code it sets back to normal mode from cold boot mode? I don't see it.
> +static int ath11k_qmi_process_coldboot_calibration(struct ath11k_base *ab)
> +{
> + int timeout;
> + int ret;
> +
> + ret = ath11k_qmi_wlanfw_mode_send(ab, ATH11K_FIRMWARE_MODE_COLD_BOOT);
> + if (ret < 0) {
> + ath11k_warn(ab, "qmi failed to send wlan fw mode:%d\n", ret);
> + return ret;
> + }
> +
> + ath11k_dbg(ab, ATH11K_DBG_QMI, "Coldboot calibration wait started\n");
> +
> + timeout = wait_event_timeout(ab->qmi.cold_boot_waitq,
> + (ab->qmi.cal_done == 1),
> + ATH11K_COLD_BOOT_FW_RESET_DELAY);
> + if (timeout <= 0) {
> + ath11k_warn(ab, "Coldboot Calibration timed out\n");
> + return -ETIMEDOUT;
Does it make ath11k firmware stay in cold boot mode when timeout happens?
If so, is it worthy to have WLAN usuable due to cold boot calibration
failure?
As I understand, initial calibration on current operation channel will
be done regardless of cold boot calibration
> + }
> +
> + ath11k_dbg(ab, ATH11K_DBG_QMI, "Coldboot calibration wait ended\n");
> +
> + return 0;
> +}
> +
> static int
> ath11k_qmi_driver_event_post(struct ath11k_qmi *qmi,
> enum ath11k_qmi_event_type type,
> @@ -2597,9 +2643,16 @@ static void ath11k_qmi_driver_event_work(struct work_struct *work)
> break;
> }
>
> - ath11k_core_qmi_firmware_ready(ab);
> - ab->qmi.cal_done = 1;
> - set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
> + if (ath11k_cold_boot_cal && ab->qmi.cal_done == 0 &&
> + ab->hw_params.cold_boot_calib) {
> + ath11k_qmi_process_coldboot_calibration(ab);
> + } else {
> + clear_bit(ATH11K_FLAG_CRASH_FLUSH,
> + &ab->dev_flags);
> + clear_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
Please split this patch into a separate patch. It's not directly related
to cold boot.
> + ath11k_core_qmi_firmware_ready(ab);
> + set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
> + }
>
> break;
> case ATH11K_QMI_EVENT_COLD_BOOT_CAL_DONE:
Thanks,
Peter
More information about the ath11k
mailing list