},
 };
 
+static struct qmi_elem_info qmi_wlfw_fw_init_done_ind_msg_v01_ei[] = {
+       {
+               .data_type = QMI_EOTI,
+               .array_type = NO_ARRAY,
+       },
+};
+
 static int ath11k_qmi_host_cap_send(struct ath11k_base *ab)
 {
        struct qmi_wlanfw_host_cap_req_msg_v01 req;
        struct ath11k_base *ab = qmi->ab;
 
        ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi firmware ready\n");
+
+       ab->qmi.cal_done = 1;
+       wake_up(&ab->qmi.cold_boot_waitq);
+
        ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_READY, NULL);
 }
 
                                              struct ath11k_qmi, handle);
        struct ath11k_base *ab = qmi->ab;
 
-       ab->qmi.cal_done = 1;
-       wake_up(&ab->qmi.cold_boot_waitq);
        ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi cold boot calibration done\n");
 }
 
+static void ath11k_qmi_msg_fw_init_done_cb(struct qmi_handle *qmi_hdl,
+                                          struct sockaddr_qrtr *sq,
+                                          struct qmi_txn *txn,
+                                          const void *decoded)
+{
+       struct ath11k_qmi *qmi = container_of(qmi_hdl,
+                                             struct ath11k_qmi, handle);
+       struct ath11k_base *ab = qmi->ab;
+
+       ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_INIT_DONE, NULL);
+       ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi firmware init done\n");
+}
+
 static const struct qmi_msg_handler ath11k_qmi_msg_handlers[] = {
        {
                .type = QMI_INDICATION,
                        sizeof(struct qmi_wlanfw_fw_cold_cal_done_ind_msg_v01),
                .fn = ath11k_qmi_msg_cold_boot_cal_done_cb,
        },
+       {
+               .type = QMI_INDICATION,
+               .msg_id = QMI_WLFW_FW_INIT_DONE_IND_V01,
+               .ei = qmi_wlfw_fw_init_done_ind_msg_v01_ei,
+               .decoded_size =
+                       sizeof(struct qmi_wlfw_fw_init_done_ind_msg_v01),
+               .fn = ath11k_qmi_msg_fw_init_done_cb,
+       },
 };
 
 static int ath11k_qmi_ops_new_server(struct qmi_handle *qmi_hdl,
                        }
 
                        break;
-               case ATH11K_QMI_EVENT_FW_READY:
+               case ATH11K_QMI_EVENT_FW_INIT_DONE:
                        clear_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
                        if (test_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags)) {
                                ath11k_hal_dump_srng_stats(ab);
                                set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
                        }
 
+                       break;
+               case ATH11K_QMI_EVENT_FW_READY:
                        break;
                case ATH11K_QMI_EVENT_COLD_BOOT_CAL_DONE:
                        break;
 
 
 #define QMI_WLFW_REQUEST_MEM_IND_V01           0x0035
 #define QMI_WLFW_FW_MEM_READY_IND_V01          0x0037
-#define QMI_WLFW_COLD_BOOT_CAL_DONE_IND_V01    0x0021
-#define QMI_WLFW_FW_READY_IND_V01              0x0038
+#define QMI_WLFW_COLD_BOOT_CAL_DONE_IND_V01    0x003E
+#define QMI_WLFW_FW_READY_IND_V01              0x0021
+#define QMI_WLFW_FW_INIT_DONE_IND_V01          0x0038
 
 #define QMI_WLANFW_MAX_DATA_SIZE_V01           6144
 #define ATH11K_FIRMWARE_MODE_OFF               4
        ATH11K_QMI_EVENT_FORCE_FW_ASSERT,
        ATH11K_QMI_EVENT_POWER_UP,
        ATH11K_QMI_EVENT_POWER_DOWN,
+       ATH11K_QMI_EVENT_FW_INIT_DONE,
        ATH11K_QMI_EVENT_MAX,
 };
 
        char placeholder;
 };
 
+struct qmi_wlfw_fw_init_done_ind_msg_v01 {
+       char placeholder;
+};
+
 #define QMI_WLANFW_CAP_REQ_MSG_V01_MAX_LEN             0
 #define QMI_WLANFW_CAP_RESP_MSG_V01_MAX_LEN            235
 #define QMI_WLANFW_CAP_REQ_V01                         0x0024