From a135611457895c266424b7ad5f3e86b5c1d10f98 Mon Sep 17 00:00:00 2001 From: Vidyakumar Athota Date: Thu, 31 Aug 2017 16:50:16 -0700 Subject: [PATCH] ASoC: msm: qdsp6v2: change to no-wait command for RTIC event RTIC(runtime check) event ack command can execute asynchronously along with other ASM commands. Using common cmd_state variable to wake up the thread results synchronization issues. So use no-wait command for RTIC event ack command. Change-Id: Ie55ac6d50f83112e72de65c68340f7f7ba0923da Signed-off-by: Vidyakumar Athota --- sound/soc/msm/qdsp6v2/q6asm.c | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/sound/soc/msm/qdsp6v2/q6asm.c b/sound/soc/msm/qdsp6v2/q6asm.c index 14f9411104b3..bc58d6b30242 100644 --- a/sound/soc/msm/qdsp6v2/q6asm.c +++ b/sound/soc/msm/qdsp6v2/q6asm.c @@ -7215,10 +7215,9 @@ int q6asm_send_rtic_event_ack(struct audio_client *ac, goto done; } - q6asm_add_hdr_async(ac, &ack.hdr, + q6asm_stream_add_hdr_async(ac, &ack.hdr, sizeof(struct avs_param_rtic_event_ack) + - params_length, TRUE); - atomic_set(&ac->cmd_state, -1); + params_length, TRUE, ac->stream_id); ack.hdr.opcode = ASM_STREAM_CMD_SET_ENCDEC_PARAM_V2; ack.encdec.param_id = AVS_PARAM_ID_RTIC_EVENT_ACK; ack.encdec.param_size = params_length; @@ -7228,31 +7227,11 @@ int q6asm_send_rtic_event_ack(struct audio_client *ac, memcpy(asm_params + sizeof(struct avs_param_rtic_event_ack), param, params_length); rc = apr_send_pkt(ac->apr, (uint32_t *) asm_params); - if (rc < 0) { + if (rc < 0) pr_err("%s: apr pkt failed for rtic event ack\n", __func__); - rc = -EINVAL; - goto fail_send_param; - } + else + rc = 0; - rc = wait_event_timeout(ac->cmd_wait, - (atomic_read(&ac->cmd_state) >= 0), 1 * HZ); - if (!rc) { - pr_err("%s: timeout for rtic event ack cmd\n", __func__); - rc = -ETIMEDOUT; - goto fail_send_param; - } - - if (atomic_read(&ac->cmd_state) > 0) { - pr_err("%s: DSP returned error[%s] for rtic event ack cmd\n", - __func__, adsp_err_get_err_str( - atomic_read(&ac->cmd_state))); - rc = adsp_err_get_lnx_err_code( - atomic_read(&ac->cmd_state)); - goto fail_send_param; - } - rc = 0; - -fail_send_param: kfree(asm_params); done: return rc;