Commit a4b9f641 authored by Vikas Patel's avatar Vikas Patel Committed by Kalle Valo

ath10k: avoid consecutive OTP download to reduce boot time

Currently, OTP is downloaded twice in case of "pre-cal-dt"
and "pre-cal-file" to fetch the board ID and takes around
~2 sec more boot uptime.

First OTP download happens in "ath10k_core_probe_fw" and
second in ath10k_core_start. First boot does not need OTP
download in core start when valid board id acquired.

The second OTP download is required upon core stop/start.

This patch skips the OTP download when first OTP download
has acquired a valid board id. This patch also marks board
id invalid in "ath10k_core_stop", which will force the OTP
download in ath10k_core_start and fetches valid board id.

Tested HW: QCA9984
Tested FW: 10.4-3.6-00104
Signed-off-by: default avatarVikas Patel <vikpatel@codeaurora.org>
Signed-off-by: default avatarMaharaja Kennadyrajan <mkenna@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 92bacd1c
...@@ -874,6 +874,13 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar) ...@@ -874,6 +874,13 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar)
return -ENODATA; return -ENODATA;
} }
if (ar->id.bmi_ids_valid) {
ath10k_dbg(ar, ATH10K_DBG_BOOT,
"boot already acquired valid otp board id,skip download, board_id %d chip_id %d\n",
ar->id.bmi_board_id, ar->id.bmi_chip_id);
goto skip_otp_download;
}
ath10k_dbg(ar, ATH10K_DBG_BOOT, ath10k_dbg(ar, ATH10K_DBG_BOOT,
"boot upload otp to 0x%x len %zd for board id\n", "boot upload otp to 0x%x len %zd for board id\n",
address, ar->normal_mode_fw.fw_file.otp_len); address, ar->normal_mode_fw.fw_file.otp_len);
...@@ -921,6 +928,8 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar) ...@@ -921,6 +928,8 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar)
ar->id.bmi_board_id = board_id; ar->id.bmi_board_id = board_id;
ar->id.bmi_chip_id = chip_id; ar->id.bmi_chip_id = chip_id;
skip_otp_download:
return 0; return 0;
} }
...@@ -2905,6 +2914,8 @@ void ath10k_core_stop(struct ath10k *ar) ...@@ -2905,6 +2914,8 @@ void ath10k_core_stop(struct ath10k *ar)
ath10k_htt_tx_stop(&ar->htt); ath10k_htt_tx_stop(&ar->htt);
ath10k_htt_rx_free(&ar->htt); ath10k_htt_rx_free(&ar->htt);
ath10k_wmi_detach(ar); ath10k_wmi_detach(ar);
ar->id.bmi_ids_valid = false;
} }
EXPORT_SYMBOL(ath10k_core_stop); EXPORT_SYMBOL(ath10k_core_stop);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment