Thanks Johan,
On 07/04/2025 12:25, Johan Hovold wrote:
Hi Srini,
On Fri, Mar 14, 2025 at 05:47:57PM +0000, Srinivas Kandagatla wrote:
From: Srinivas Kandagatla srinivas.kandagatla@linaro.org
Implement an helper function in q6apm to be able to read the current hardware pointer for both read and write buffers.
This should help q6apm-dai to get the hardware pointer consistently without it doing manual calculation, which could go wrong in some race conditions.
+int q6apm_get_hw_pointer(struct q6apm_graph *graph, int dir) +{
- struct audioreach_graph_data *data;
- if (dir == SNDRV_PCM_STREAM_PLAYBACK)
data = &graph->rx_data;
- else
data = &graph->tx_data;
- return (int)atomic_read(&data->hw_ptr);
+} +EXPORT_SYMBOL_GPL(q6apm_get_hw_pointer);
@@ -553,6 +567,8 @@ static int graph_callback(struct gpr_resp_pkt *data, void *priv, int op) rd_done = data->payload; phys = graph->tx_data.buf[hdr->token].phys; mutex_unlock(&graph->lock);
/* token numbering starts at 0 */
atomic_set(&graph->tx_data.hw_ptr, hdr->token + 1);
if (upper_32_bits(phys) == rd_done->buf_addr_msw && lower_32_bits(phys) == rd_done->buf_addr_lsw) {
graph->result.opcode = hdr->opcode; graph->result.status = rd_done->status; if (graph->cb) graph->cb(client_event, hdr->token, data->payload, graph->priv); } else { dev_err(dev, "RD BUFF Unexpected addr %08x-%08x\n", rd_done->buf_addr_lsw, rd_done->buf_addr_msw); }
I just hit the following error on the T14s with 6.15-rc1 that I've never seen before and which looks like it could be related to this series:
Its unlikely, but the timings have changed here. I have not seen it either, but I will try to reproduce this with 6.15-rc1.
q6apm-dai 6800000.remoteproc:glink-edge:gpr:service@1:dais: RD BUFF Unexpected addr ffe0d200-00000001
Any ideas about what may be causing this?
How easy is this to reproduce?
--srini
Johan