For record path, multiple read requests are queued to dsp in advance.
However when data stream is closed, the pending read requests are rejected
by the dsp and a response is sent to the driver, this case is not handled
in the driver resulting in errors like below
q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
This is same for both write and eos.
Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and
ASM_DATA_CMD_WRITE_V2 as expected response.
Reported-by: Martino Facchin <m.facchin@arduino.cc>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
---
sound/soc/qcom/qdsp6/q6asm.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/sound/soc/qcom/qdsp6/q6asm.c b/sound/soc/qcom/qdsp6/q6asm.c
index 06a802f9dba5..371389c8fa7a 100644
--- a/sound/soc/qcom/qdsp6/q6asm.c
+++ b/sound/soc/qcom/qdsp6/q6asm.c
@@ -638,6 +638,7 @@ static int32_t q6asm_stream_callback(struct apr_device *adev,
client_event = ASM_CLIENT_EVENT_CMD_OUT_FLUSH_DONE;
break;
case ASM_STREAM_CMD_OPEN_WRITE_V3:
+ case ASM_DATA_CMD_WRITE_V2:
case ASM_STREAM_CMD_OPEN_READ_V3:
case ASM_STREAM_CMD_OPEN_READWRITE_V2:
case ASM_STREAM_CMD_SET_ENCDEC_PARAM:
@@ -654,6 +655,10 @@ static int32_t q6asm_stream_callback(struct apr_device *adev,
goto done;
}
break;
+ case ASM_DATA_CMD_EOS:
+ case ASM_DATA_CMD_READ_V2:
+ /* response as result of close stream */
+ break;
default:
dev_err(ac->dev, "command[0x%x] not expecting rsp\n",
result->opcode);
--
2.51.0
On Wed Oct 15, 2025 at 2:17 PM BST, Srinivas Kandagatla wrote: > For record path, multiple read requests are queued to dsp in advance. > However when data stream is closed, the pending read requests are rejected > by the dsp and a response is sent to the driver, this case is not handled > in the driver resulting in errors like below > > q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp > q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp > q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp > > This is same for both write and eos. > > Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and > ASM_DATA_CMD_WRITE_V2 as expected response. > > Reported-by: Martino Facchin <m.facchin@arduino.cc> > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> I was also reporting this error months ago. Thanks for fixing this. FWIW there is also DSP timeout error on Audioreach-based platforms. Thanks, Alexey Klimov
On 10/20/25 3:35 PM, Alexey Klimov wrote: > On Wed Oct 15, 2025 at 2:17 PM BST, Srinivas Kandagatla wrote: >> For record path, multiple read requests are queued to dsp in advance. >> However when data stream is closed, the pending read requests are rejected >> by the dsp and a response is sent to the driver, this case is not handled >> in the driver resulting in errors like below >> >> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >> >> This is same for both write and eos. >> >> Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and >> ASM_DATA_CMD_WRITE_V2 as expected response. >> >> Reported-by: Martino Facchin <m.facchin@arduino.cc> >> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> > > I was also reporting this error months ago. > Thanks for fixing this. > > FWIW there is also DSP timeout error on Audioreach-based platforms. there should be only one for SPF get state command. qcom-apm gprsvc:service:2:1: CMD timeout for [1001021] opcode This is expected as we are checking for DSP readiness and it will timeout if the dsp is not ready. --srini > > Thanks, > Alexey Klimov
On 10/20/25 4:37 PM, Srinivas Kandagatla wrote: > On 10/20/25 3:35 PM, Alexey Klimov wrote: >> On Wed Oct 15, 2025 at 2:17 PM BST, Srinivas Kandagatla wrote: >>> For record path, multiple read requests are queued to dsp in advance. >>> However when data stream is closed, the pending read requests are rejected >>> by the dsp and a response is sent to the driver, this case is not handled >>> in the driver resulting in errors like below >>> >>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>> >>> This is same for both write and eos. >>> >>> Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and >>> ASM_DATA_CMD_WRITE_V2 as expected response. >>> >>> Reported-by: Martino Facchin <m.facchin@arduino.cc> >>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> >> >> I was also reporting this error months ago. >> Thanks for fixing this. >> >> FWIW there is also DSP timeout error on Audioreach-based platforms. > there should be only one for SPF get state command. > > qcom-apm gprsvc:service:2:1: CMD timeout for [1001021] opcode > > This is expected as we are checking for DSP readiness and it will > timeout if the dsp is not ready. Can we make the UX better by adding "bool timeout_expected" in the path that we "want" it to fail? (I have no clue how this is tied together, this is a high-level idea) Konrad
On 10/20/25 3:39 PM, Konrad Dybcio wrote: > On 10/20/25 4:37 PM, Srinivas Kandagatla wrote: >> On 10/20/25 3:35 PM, Alexey Klimov wrote: >>> On Wed Oct 15, 2025 at 2:17 PM BST, Srinivas Kandagatla wrote: >>>> For record path, multiple read requests are queued to dsp in advance. >>>> However when data stream is closed, the pending read requests are rejected >>>> by the dsp and a response is sent to the driver, this case is not handled >>>> in the driver resulting in errors like below >>>> >>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>>> >>>> This is same for both write and eos. >>>> >>>> Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and >>>> ASM_DATA_CMD_WRITE_V2 as expected response. >>>> >>>> Reported-by: Martino Facchin <m.facchin@arduino.cc> >>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> >>> >>> I was also reporting this error months ago. >>> Thanks for fixing this. >>> >>> FWIW there is also DSP timeout error on Audioreach-based platforms. >> there should be only one for SPF get state command. >> >> qcom-apm gprsvc:service:2:1: CMD timeout for [1001021] opcode >> >> This is expected as we are checking for DSP readiness and it will >> timeout if the dsp is not ready. > > Can we make the UX better by adding "bool timeout_expected" in the > path that we "want" it to fail? its not that we want it to fail, its just that we might fail, if we send the command too early. --srini> > (I have no clue how this is tied together, this is a high-level idea) > > Konrad
On 10/20/25 4:42 PM, Srinivas Kandagatla wrote:
> On 10/20/25 3:39 PM, Konrad Dybcio wrote:
>> On 10/20/25 4:37 PM, Srinivas Kandagatla wrote:
>>> On 10/20/25 3:35 PM, Alexey Klimov wrote:
>>>> On Wed Oct 15, 2025 at 2:17 PM BST, Srinivas Kandagatla wrote:
>>>>> For record path, multiple read requests are queued to dsp in advance.
>>>>> However when data stream is closed, the pending read requests are rejected
>>>>> by the dsp and a response is sent to the driver, this case is not handled
>>>>> in the driver resulting in errors like below
>>>>>
>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
>>>>>
>>>>> This is same for both write and eos.
>>>>>
>>>>> Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and
>>>>> ASM_DATA_CMD_WRITE_V2 as expected response.
>>>>>
>>>>> Reported-by: Martino Facchin <m.facchin@arduino.cc>
>>>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
>>>>
>>>> I was also reporting this error months ago.
>>>> Thanks for fixing this.
>>>>
>>>> FWIW there is also DSP timeout error on Audioreach-based platforms.
>>> there should be only one for SPF get state command.
>>>
>>> qcom-apm gprsvc:service:2:1: CMD timeout for [1001021] opcode
>>>
>>> This is expected as we are checking for DSP readiness and it will
>>> timeout if the dsp is not ready.
>>
>> Can we make the UX better by adding "bool timeout_expected" in the
>> path that we "want" it to fail?
> its not that we want it to fail, its just that we might fail, if we send
> the command too early.
I came up with this to potentially work around it, but it seems a little
heavy-handed to avoid a single line in dmesg..
diff --git a/sound/soc/qcom/qdsp6/audioreach.c b/sound/soc/qcom/qdsp6/audioreach.c
index 2365424a9b42..a39e717cb4e0 100644
--- a/sound/soc/qcom/qdsp6/audioreach.c
+++ b/sound/soc/qcom/qdsp6/audioreach.c
@@ -552,7 +552,7 @@ EXPORT_SYMBOL_GPL(audioreach_alloc_graph_pkt);
int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev,
struct gpr_ibasic_rsp_result_t *result, struct mutex *cmd_lock,
gpr_port_t *port, wait_queue_head_t *cmd_wait,
- struct gpr_pkt *pkt, uint32_t rsp_opcode)
+ struct gpr_pkt *pkt, uint32_t rsp_opcode, bool silent_timeout)
{
struct gpr_hdr *hdr = &pkt->hdr;
@@ -579,7 +579,10 @@ int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev,
rc = wait_event_timeout(*cmd_wait, (result->opcode == hdr->opcode), 5 * HZ);
if (!rc) {
- dev_err(dev, "CMD timeout for [%x] opcode\n", hdr->opcode);
+ if (silent_timeout)
+ dev_dbg(dev, "CMD timeout for [%x] opcode\n", hdr->opcode);
+ else
+ dev_err(dev, "CMD timeout for [%x] opcode\n", hdr->opcode);
rc = -ETIMEDOUT;
} else if (result->status > 0) {
dev_err(dev, "DSP returned error[%x] %x\n", hdr->opcode, result->status);
@@ -600,7 +603,7 @@ int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pk
{
return audioreach_send_cmd_sync(graph->dev, NULL, &graph->result, &graph->lock,
- graph->port, &graph->cmd_wait, pkt, rsp_opcode);
+ graph->port, &graph->cmd_wait, pkt, rsp_opcode, false);
}
EXPORT_SYMBOL_GPL(audioreach_graph_send_cmd_sync);
diff --git a/sound/soc/qcom/qdsp6/audioreach.h b/sound/soc/qcom/qdsp6/audioreach.h
index d1b60b36468a..55ce1e367cda 100644
--- a/sound/soc/qcom/qdsp6/audioreach.h
+++ b/sound/soc/qcom/qdsp6/audioreach.h
@@ -805,7 +805,7 @@ int audioreach_map_memory_regions(struct q6apm_graph *graph,
bool is_contiguous);
int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev, struct gpr_ibasic_rsp_result_t *result,
struct mutex *cmd_lock, gpr_port_t *port, wait_queue_head_t *cmd_wait,
- struct gpr_pkt *pkt, uint32_t rsp_opcode);
+ struct gpr_pkt *pkt, uint32_t rsp_opcode, bool silent_timeout);
int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pkt,
uint32_t rsp_opcode);
int audioreach_set_media_format(struct q6apm_graph *graph,
diff --git a/sound/soc/qcom/qdsp6/q6apm.c b/sound/soc/qcom/qdsp6/q6apm.c
index 0e667a7eb546..f96c0ae20eb2 100644
--- a/sound/soc/qcom/qdsp6/q6apm.c
+++ b/sound/soc/qcom/qdsp6/q6apm.c
@@ -34,7 +34,16 @@ int q6apm_send_cmd_sync(struct q6apm *apm, struct gpr_pkt *pkt, uint32_t rsp_opc
gpr_device_t *gdev = apm->gdev;
return audioreach_send_cmd_sync(&gdev->dev, gdev, &apm->result, &apm->lock,
- NULL, &apm->wait, pkt, rsp_opcode);
+ NULL, &apm->wait, pkt, rsp_opcode, false);
+}
+
+static int q6apm_send_cmd_sync_may_timeout(struct q6apm *apm, struct gpr_pkt *pkt,
+ uint32_t rsp_opcode)
+{
+ gpr_device_t *gdev = apm->gdev;
+
+ return audioreach_send_cmd_sync(&gdev->dev, gdev, &apm->result, &apm->lock,
+ NULL, &apm->wait, pkt, rsp_opcode, true);
}
static struct audioreach_graph *q6apm_get_audioreach_graph(struct q6apm *apm, uint32_t graph_id)
@@ -154,7 +163,7 @@ static int q6apm_get_apm_state(struct q6apm *apm)
if (IS_ERR(pkt))
return PTR_ERR(pkt);
- q6apm_send_cmd_sync(apm, pkt, APM_CMD_RSP_GET_SPF_STATE);
+ q6apm_send_cmd_sync_may_timeout(apm, pkt, APM_CMD_RSP_GET_SPF_STATE);
kfree(pkt);
diff --git a/sound/soc/qcom/qdsp6/q6prm.c b/sound/soc/qcom/qdsp6/q6prm.c
index 81554d202658..7b71d6dfc993 100644
--- a/sound/soc/qcom/qdsp6/q6prm.c
+++ b/sound/soc/qcom/qdsp6/q6prm.c
@@ -52,7 +52,7 @@ struct prm_cmd_release_rsc {
static int q6prm_send_cmd_sync(struct q6prm *prm, struct gpr_pkt *pkt, uint32_t rsp_opcode)
{
return audioreach_send_cmd_sync(prm->dev, prm->gdev, &prm->result, &prm->lock,
- NULL, &prm->wait, pkt, rsp_opcode);
+ NULL, &prm->wait, pkt, rsp_opcode, false);
}
static int q6prm_set_hw_core_req(struct device *dev, uint32_t hw_block_id, bool enable)
Konrad
On 10/21/25 10:12 AM, Konrad Dybcio wrote:
> On 10/20/25 4:42 PM, Srinivas Kandagatla wrote:
>> On 10/20/25 3:39 PM, Konrad Dybcio wrote:
>>> On 10/20/25 4:37 PM, Srinivas Kandagatla wrote:
>>>> On 10/20/25 3:35 PM, Alexey Klimov wrote:
>>>>> On Wed Oct 15, 2025 at 2:17 PM BST, Srinivas Kandagatla wrote:
>>>>>> For record path, multiple read requests are queued to dsp in advance.
>>>>>> However when data stream is closed, the pending read requests are rejected
>>>>>> by the dsp and a response is sent to the driver, this case is not handled
>>>>>> in the driver resulting in errors like below
>>>>>>
>>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
>>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
>>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp
>>>>>>
>>>>>> This is same for both write and eos.
>>>>>>
>>>>>> Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and
>>>>>> ASM_DATA_CMD_WRITE_V2 as expected response.
>>>>>>
>>>>>> Reported-by: Martino Facchin <m.facchin@arduino.cc>
>>>>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
>>>>>
>>>>> I was also reporting this error months ago.
>>>>> Thanks for fixing this.
>>>>>
>>>>> FWIW there is also DSP timeout error on Audioreach-based platforms.
>>>> there should be only one for SPF get state command.
>>>>
>>>> qcom-apm gprsvc:service:2:1: CMD timeout for [1001021] opcode
>>>>
>>>> This is expected as we are checking for DSP readiness and it will
>>>> timeout if the dsp is not ready.
>>>
>>> Can we make the UX better by adding "bool timeout_expected" in the
>>> path that we "want" it to fail?
>> its not that we want it to fail, its just that we might fail, if we send
>> the command too early.
>
> I came up with this to potentially work around it, but it seems a little
> heavy-handed to avoid a single line in dmesg..
>
Yes it is. simple thing to do is wait for few ms before requesting for
SPF ready status, that should do that trick.
--srini
>
> diff --git a/sound/soc/qcom/qdsp6/audioreach.c b/sound/soc/qcom/qdsp6/audioreach.c
> index 2365424a9b42..a39e717cb4e0 100644
> --- a/sound/soc/qcom/qdsp6/audioreach.c
> +++ b/sound/soc/qcom/qdsp6/audioreach.c
> @@ -552,7 +552,7 @@ EXPORT_SYMBOL_GPL(audioreach_alloc_graph_pkt);
> int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev,
> struct gpr_ibasic_rsp_result_t *result, struct mutex *cmd_lock,
> gpr_port_t *port, wait_queue_head_t *cmd_wait,
> - struct gpr_pkt *pkt, uint32_t rsp_opcode)
> + struct gpr_pkt *pkt, uint32_t rsp_opcode, bool silent_timeout)
> {
>
> struct gpr_hdr *hdr = &pkt->hdr;
> @@ -579,7 +579,10 @@ int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev,
> rc = wait_event_timeout(*cmd_wait, (result->opcode == hdr->opcode), 5 * HZ);
>
> if (!rc) {
> - dev_err(dev, "CMD timeout for [%x] opcode\n", hdr->opcode);
> + if (silent_timeout)
> + dev_dbg(dev, "CMD timeout for [%x] opcode\n", hdr->opcode);
> + else
> + dev_err(dev, "CMD timeout for [%x] opcode\n", hdr->opcode);
> rc = -ETIMEDOUT;
> } else if (result->status > 0) {
> dev_err(dev, "DSP returned error[%x] %x\n", hdr->opcode, result->status);
> @@ -600,7 +603,7 @@ int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pk
> {
>
> return audioreach_send_cmd_sync(graph->dev, NULL, &graph->result, &graph->lock,
> - graph->port, &graph->cmd_wait, pkt, rsp_opcode);
> + graph->port, &graph->cmd_wait, pkt, rsp_opcode, false);
> }
> EXPORT_SYMBOL_GPL(audioreach_graph_send_cmd_sync);
>
> diff --git a/sound/soc/qcom/qdsp6/audioreach.h b/sound/soc/qcom/qdsp6/audioreach.h
> index d1b60b36468a..55ce1e367cda 100644
> --- a/sound/soc/qcom/qdsp6/audioreach.h
> +++ b/sound/soc/qcom/qdsp6/audioreach.h
> @@ -805,7 +805,7 @@ int audioreach_map_memory_regions(struct q6apm_graph *graph,
> bool is_contiguous);
> int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev, struct gpr_ibasic_rsp_result_t *result,
> struct mutex *cmd_lock, gpr_port_t *port, wait_queue_head_t *cmd_wait,
> - struct gpr_pkt *pkt, uint32_t rsp_opcode);
> + struct gpr_pkt *pkt, uint32_t rsp_opcode, bool silent_timeout);
> int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pkt,
> uint32_t rsp_opcode);
> int audioreach_set_media_format(struct q6apm_graph *graph,
> diff --git a/sound/soc/qcom/qdsp6/q6apm.c b/sound/soc/qcom/qdsp6/q6apm.c
> index 0e667a7eb546..f96c0ae20eb2 100644
> --- a/sound/soc/qcom/qdsp6/q6apm.c
> +++ b/sound/soc/qcom/qdsp6/q6apm.c
> @@ -34,7 +34,16 @@ int q6apm_send_cmd_sync(struct q6apm *apm, struct gpr_pkt *pkt, uint32_t rsp_opc
> gpr_device_t *gdev = apm->gdev;
>
> return audioreach_send_cmd_sync(&gdev->dev, gdev, &apm->result, &apm->lock,
> - NULL, &apm->wait, pkt, rsp_opcode);
> + NULL, &apm->wait, pkt, rsp_opcode, false);
> +}
> +
> +static int q6apm_send_cmd_sync_may_timeout(struct q6apm *apm, struct gpr_pkt *pkt,
> + uint32_t rsp_opcode)
> +{
> + gpr_device_t *gdev = apm->gdev;
> +
> + return audioreach_send_cmd_sync(&gdev->dev, gdev, &apm->result, &apm->lock,
> + NULL, &apm->wait, pkt, rsp_opcode, true);
> }
>
> static struct audioreach_graph *q6apm_get_audioreach_graph(struct q6apm *apm, uint32_t graph_id)
> @@ -154,7 +163,7 @@ static int q6apm_get_apm_state(struct q6apm *apm)
> if (IS_ERR(pkt))
> return PTR_ERR(pkt);
>
> - q6apm_send_cmd_sync(apm, pkt, APM_CMD_RSP_GET_SPF_STATE);
> + q6apm_send_cmd_sync_may_timeout(apm, pkt, APM_CMD_RSP_GET_SPF_STATE);
>
> kfree(pkt);
>
> diff --git a/sound/soc/qcom/qdsp6/q6prm.c b/sound/soc/qcom/qdsp6/q6prm.c
> index 81554d202658..7b71d6dfc993 100644
> --- a/sound/soc/qcom/qdsp6/q6prm.c
> +++ b/sound/soc/qcom/qdsp6/q6prm.c
> @@ -52,7 +52,7 @@ struct prm_cmd_release_rsc {
> static int q6prm_send_cmd_sync(struct q6prm *prm, struct gpr_pkt *pkt, uint32_t rsp_opcode)
> {
> return audioreach_send_cmd_sync(prm->dev, prm->gdev, &prm->result, &prm->lock,
> - NULL, &prm->wait, pkt, rsp_opcode);
> + NULL, &prm->wait, pkt, rsp_opcode, false);
> }
>
> static int q6prm_set_hw_core_req(struct device *dev, uint32_t hw_block_id, bool enable)
>
> Konrad
-
On 10/21/25 11:21 AM, Srinivas Kandagatla wrote: > > > On 10/21/25 10:12 AM, Konrad Dybcio wrote: >> On 10/20/25 4:42 PM, Srinivas Kandagatla wrote: >>> On 10/20/25 3:39 PM, Konrad Dybcio wrote: >>>> On 10/20/25 4:37 PM, Srinivas Kandagatla wrote: >>>>> On 10/20/25 3:35 PM, Alexey Klimov wrote: >>>>>> On Wed Oct 15, 2025 at 2:17 PM BST, Srinivas Kandagatla wrote: >>>>>>> For record path, multiple read requests are queued to dsp in advance. >>>>>>> However when data stream is closed, the pending read requests are rejected >>>>>>> by the dsp and a response is sent to the driver, this case is not handled >>>>>>> in the driver resulting in errors like below >>>>>>> >>>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>>>>>> q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: command[0x10dac] not expecting rsp >>>>>>> >>>>>>> This is same for both write and eos. >>>>>>> >>>>>>> Fix this by allowing ASM_DATA_CMD_READ_V2, ASM_DATA_CMD_EOS and >>>>>>> ASM_DATA_CMD_WRITE_V2 as expected response. >>>>>>> >>>>>>> Reported-by: Martino Facchin <m.facchin@arduino.cc> >>>>>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> >>>>>> >>>>>> I was also reporting this error months ago. >>>>>> Thanks for fixing this. >>>>>> >>>>>> FWIW there is also DSP timeout error on Audioreach-based platforms. >>>>> there should be only one for SPF get state command. >>>>> >>>>> qcom-apm gprsvc:service:2:1: CMD timeout for [1001021] opcode >>>>> >>>>> This is expected as we are checking for DSP readiness and it will >>>>> timeout if the dsp is not ready. >>>> >>>> Can we make the UX better by adding "bool timeout_expected" in the >>>> path that we "want" it to fail? >>> its not that we want it to fail, its just that we might fail, if we send >>> the command too early. >> >> I came up with this to potentially work around it, but it seems a little >> heavy-handed to avoid a single line in dmesg.. >> > Yes it is. simple thing to do is wait for few ms before requesting for > SPF ready status, that should do that trick. Sounds good! Konrad
© 2016 - 2025 Red Hat, Inc.