From 024b204099b370c584fa70f02ea9dc4db5ecae8a Mon Sep 17 00:00:00 2001 From: Naman Padhiar Date: Tue, 22 Sep 2020 15:16:10 +0530 Subject: [PATCH] icnss2: Avoid calibration during SSR of WCN6750 Send Calibration mode to FW only at the time of cold boot. At the time of SSR Calibration mode will not be sent. Change-Id: Idf7016384937433480f62d0912e5e3dcf76f4e44 Signed-off-by: Naman Padhiar --- drivers/soc/qcom/icnss2/debug.c | 3 +++ drivers/soc/qcom/icnss2/main.c | 6 +++++- drivers/soc/qcom/icnss2/main.h | 1 + drivers/soc/qcom/icnss2/qmi.c | 5 +++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/icnss2/debug.c b/drivers/soc/qcom/icnss2/debug.c index 3771a6b39bab..b3dfbd53cd76 100644 --- a/drivers/soc/qcom/icnss2/debug.c +++ b/drivers/soc/qcom/icnss2/debug.c @@ -407,6 +407,9 @@ static int icnss_stats_show_state(struct seq_file *s, struct icnss_priv *priv) continue; case ICNSS_DEL_SERVER: seq_puts(s, "DEL SERVER"); + continue; + case ICNSS_COLD_BOOT_CAL: + seq_puts(s, "COLD BOOT CALIBRATION"); } seq_printf(s, "UNKNOWN-%d", i); diff --git a/drivers/soc/qcom/icnss2/main.c b/drivers/soc/qcom/icnss2/main.c index d1edd08c3849..363d4e8e790a 100644 --- a/drivers/soc/qcom/icnss2/main.c +++ b/drivers/soc/qcom/icnss2/main.c @@ -821,8 +821,11 @@ static int icnss_driver_event_fw_init_done(struct icnss_priv *priv, void *data) icnss_pr_info("WLAN FW Initialization done: 0x%lx\n", priv->state); - ret = wlfw_wlan_mode_send_sync_msg(priv, + if (test_bit(ICNSS_COLD_BOOT_CAL, &priv->state)) + ret = wlfw_wlan_mode_send_sync_msg(priv, (enum wlfw_driver_mode_enum_v01)ICNSS_CALIBRATION); + else + icnss_driver_event_fw_ready_ind(priv, NULL); return ret; } @@ -3268,6 +3271,7 @@ static int icnss_probe(struct platform_device *pdev) icnss_runtime_pm_init(priv); icnss_get_cpr_info(priv); + set_bit(ICNSS_COLD_BOOT_CAL, &priv->state); } INIT_LIST_HEAD(&priv->icnss_tcdev_list); diff --git a/drivers/soc/qcom/icnss2/main.h b/drivers/soc/qcom/icnss2/main.h index 721a3d8ba72b..451b7d205624 100644 --- a/drivers/soc/qcom/icnss2/main.h +++ b/drivers/soc/qcom/icnss2/main.h @@ -109,6 +109,7 @@ enum icnss_driver_state { ICNSS_BLOCK_SHUTDOWN, ICNSS_PDR, ICNSS_DEL_SERVER, + ICNSS_COLD_BOOT_CAL, }; struct ce_irq_list { diff --git a/drivers/soc/qcom/icnss2/qmi.c b/drivers/soc/qcom/icnss2/qmi.c index 1a706a700dbe..fe13aa58c0eb 100644 --- a/drivers/soc/qcom/icnss2/qmi.c +++ b/drivers/soc/qcom/icnss2/qmi.c @@ -1724,12 +1724,17 @@ static void rejuvenate_ind_cb(struct qmi_handle *qmi, struct sockaddr_qrtr *sq, static void cal_done_ind_cb(struct qmi_handle *qmi, struct sockaddr_qrtr *sq, struct qmi_txn *txn, const void *data) { + struct icnss_priv *priv = container_of(qmi, struct icnss_priv, qmi); + icnss_pr_dbg("Received QMI WLFW calibration done indication\n"); if (!txn) { icnss_pr_err("Spurious indication\n"); return; } + + priv->cal_done = true; + clear_bit(ICNSS_COLD_BOOT_CAL, &priv->state); } static void fw_init_done_ind_cb(struct qmi_handle *qmi,