summaryrefslogtreecommitdiff
path: root/dsp
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-10-18 04:49:40 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-10-18 04:49:40 -0700
commit9809437498129d6e06a8aed24ee4f63abbb3af54 (patch)
tree38834e54f38f9c5361201852738fa667b2bbfbc1 /dsp
parent22f45372f510eb2337252b3ba5f573001fa76531 (diff)
parentfb90eb6176ec661b489b75859b439bafe8644b04 (diff)
downloadmsm-extra-9809437498129d6e06a8aed24ee4f63abbb3af54.tar.gz
Merge "dsp: fix reset logic during ADSP SSR for lsm"
Diffstat (limited to 'dsp')
-rw-r--r--dsp/q6lsm.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/dsp/q6lsm.c b/dsp/q6lsm.c
index adc541ae..848f2cd9 100644
--- a/dsp/q6lsm.c
+++ b/dsp/q6lsm.c
@@ -148,6 +148,10 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv)
__func__, data->opcode, data->reset_event,
data->reset_proc);
+ apr_reset(client->apr);
+ client->apr = NULL;
+ atomic_set(&client->cmd_state, CMD_STATE_CLEARED);
+ wake_up(&client->cmd_wait);
cal_utils_clear_cal_block_q6maps(LSM_MAX_CAL_IDX,
lsm_common.cal_data);
mutex_lock(&lsm_common.cal_data[LSM_CUSTOM_TOP_IDX]->lock);
@@ -368,6 +372,11 @@ static int q6lsm_apr_send_pkt(struct lsm_client *client, void *handle,
unsigned long flags = 0;
struct apr_hdr *msg_hdr = (struct apr_hdr *) data;
+ if (!handle) {
+ pr_err("%s: handle is NULL\n", __func__);
+ return -EINVAL;
+ }
+
pr_debug("%s: enter wait %d\n", __func__, wait);
if (wait)
mutex_lock(&lsm_common.apr_lock);
@@ -1341,6 +1350,10 @@ static int q6lsm_mmapcallback(struct apr_client_data *data, void *priv)
pr_debug("%s: SSR event received 0x%x, event 0x%x,\n"
"proc 0x%x SID 0x%x\n", __func__, data->opcode,
data->reset_event, data->reset_proc, sid);
+
+ apr_reset(lsm_common.apr);
+ lsm_common.apr = NULL;
+ atomic_set(&lsm_common.apr_users, 0);
lsm_common.common_client[sid].lsm_cal_phy_addr = 0;
cal_utils_clear_cal_block_q6maps(LSM_MAX_CAL_IDX,
lsm_common.cal_data);