Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 031628a1 authored by Skylar Chang's avatar Skylar Chang
Browse files

msm: ipa3: handle modem_init_cmplt_req correctly



IPA-Q6 QMI client may send this new
modem_init_cmplt_req to Apps-IPA before or after
Apps-IPA sends ths init_complt_ind to modem. The
fix is to handle both cases in Apps-ipa.

Change-Id: I7d6c4790b3a0678e7278cda6057d54df5cb79382
Signed-off-by: default avatarSkylar Chang <chiaweic@codeaurora.org>
parent 60be5879
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -240,13 +240,16 @@ static int ipa3_handle_modem_init_cmplt_req(void *req_h, void *req)
	int rc;

	IPAWANDBG("Received QMI_IPA_INIT_MODEM_DRIVER_CMPLT_REQ_V01\n");
	BUG_ON(ipa3_qmi_modem_init_fin == false);
	cmplt_req = (struct ipa_init_modem_driver_cmplt_req_msg_v01 *)req;

	if (ipa3_modem_init_cmplt == false) {
		ipa3_modem_init_cmplt = true;
		if (ipa3_qmi_modem_init_fin == true) {
			IPAWANDBG("load uc related registers (%d)\n",
			ipa3_qmi_modem_init_fin);
			ipa3_uc_load_notify();
		}
	}

	memset(&resp, 0, sizeof(resp));
	resp.resp.result = IPA_QMI_RESULT_SUCCESS_V01;
@@ -867,6 +870,12 @@ static void ipa3_q6_clnt_svc_arrive(struct work_struct *work)
	}
	ipa3_qmi_modem_init_fin = true;

	/* got modem_init_cmplt_req already, load uc-related register */
	if (ipa3_modem_init_cmplt == true) {
		IPAWANDBG("load uc related registers (%d)\n",
		ipa3_modem_init_cmplt);
			ipa3_uc_load_notify();
	}
	/* is_load_uc=FALSE indicates that SSR has occurred */
	ipa3_q6_handshake_complete(!is_load_uc);
	IPAWANDBG("complete, ipa3_qmi_modem_init_fin : %d\n",
@@ -1020,6 +1029,7 @@ int ipa3_qmi_service_init(bool load_uc, uint32_t wan_platform_type)
	is_load_uc = load_uc;
	ipa3_qmi_modem_init_fin = false;
	ipa3_qmi_indication_fin = false;
	ipa3_modem_init_cmplt = false;
	workqueues_stopped = false;

	if (!ipa3_svc_handle) {
@@ -1087,6 +1097,7 @@ void ipa3_qmi_service_exit(void)
	ipa3_svc_handle = 0;
	ipa3_qmi_modem_init_fin = false;
	ipa3_qmi_indication_fin = false;
	ipa3_modem_init_cmplt = false;
}

void ipa3_qmi_stop_workqueues(void)