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

Commit 3f4a2200 authored by Jilai Wang's avatar Jilai Wang
Browse files

msm: npu: handle network error first



If SSR happens during waiting for IPC command's response, since
the SSR handling may take long time which will cause wait function
timeout. SSR handling itself will set network in error state.
This network error should be handled with higher priority than
command timeout.

Change-Id: I76c15be6c56fc7b1e712058d11b8943c454ac1c3
Signed-off-by: default avatarJilai Wang <jilaiw@codeaurora.org>
parent d2f41bea
Loading
Loading
Loading
Loading
+20 −19
Original line number Diff line number Diff line
@@ -1702,6 +1702,12 @@ int32_t npu_host_load_network_v2(struct npu_client *client,

	mutex_lock(&host_ctx->lock);

	if (network->fw_error) {
		ret = -EIO;
		NPU_ERR("fw is in error state during load_v2 network\n");
		goto error_free_network;
	}

	if (!ret) {
		NPU_ERR("npu: NPU_IPC_CMD_LOAD time out\n");
		npu_dump_debug_info(npu_dev);
@@ -1709,12 +1715,6 @@ int32_t npu_host_load_network_v2(struct npu_client *client,
		goto error_load_network;
	}

	if (network->fw_error) {
		ret = -EIO;
		NPU_ERR("fw is in error state during load_v2 network\n");
		goto error_free_network;
	}

	ret = network->cmd_ret_status;
	if (ret)
		goto error_free_network;
@@ -1817,6 +1817,12 @@ int32_t npu_host_unload_network(struct npu_client *client,

	mutex_lock(&host_ctx->lock);

	if (network->fw_error) {
		ret = -EIO;
		NPU_ERR("fw is in error state during unload network\n");
		goto free_network;
	}

	if (!ret) {
		NPU_ERR("npu: NPU_IPC_CMD_UNLOAD time out\n");
		npu_dump_debug_info(npu_dev);
@@ -1825,13 +1831,8 @@ int32_t npu_host_unload_network(struct npu_client *client,
		goto free_network;
	}

	if (network->fw_error) {
		ret = -EIO;
		NPU_ERR("fw is in error state during unload network\n");
	} else {
	ret = network->cmd_ret_status;
	NPU_DBG("unload network status %d\n", ret);
	}

free_network:
	/*
@@ -1952,6 +1953,12 @@ int32_t npu_host_exec_network_v2(struct npu_client *client,
		NW_DEBUG_TIMEOUT : NW_CMD_TIMEOUT);

	mutex_lock(&host_ctx->lock);
	if (network->fw_error) {
		ret = -EIO;
		NPU_ERR("fw is in error state during execute_v2 network\n");
		goto free_exec_packet;
	}

	if (!ret) {
		NPU_ERR("npu: %x NPU_IPC_CMD_EXECUTE_V2 time out\n",
			network->id);
@@ -1961,12 +1968,6 @@ int32_t npu_host_exec_network_v2(struct npu_client *client,
		goto free_exec_packet;
	}

	if (network->fw_error) {
		ret = -EIO;
		NPU_ERR("fw is in error state during execute_v2 network\n");
		goto free_exec_packet;
	}

	ret = network->cmd_ret_status;
	if (!ret) {
		exec_ioctl->stats_buf_size = network->stats_buf_size;