]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: qcom: q6asm: handle the responses after closing
authorSrinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Thu, 23 Oct 2025 10:24:29 +0000 (11:24 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 5 Nov 2025 13:28:21 +0000 (13:28 +0000)
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>
Tested-by: Alexey Klimov <alexey.klimov@linaro.org> # RB5, RB3
Link: https://patch.msgid.link/20251023102444.88158-6-srinivas.kandagatla@oss.qualcomm.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/qdsp6/q6asm.c

index 67e9ca18883cdfd1ccd931083957b5d0978d1700..4c3315d4e27da4f1eaa3c66f8370f454c8027b30 100644 (file)
@@ -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);