Skip to content

Commit fbce9c3

Browse files
committed
audio: pipeline: do not propagate pipeline triggers for IPC4
One major difference in IPC4 versus IPC3 is that each pipeline will get a separate SET_PIPELINE_STATE command. This is in stark contrast to IPC3 where host sends STREAM_TRIG_START and firmware is expected to propagate the state change to all connected pipelines in the graph. Change the code such that when pipeline component trigger is executed in IPC4 build, propagation is stopped whenever we reach another pipeline. This prevents bugs stemming from IPC3 related logic to propagate pipeline triggers, interfering with IPC4 usages like in bug 8481. Link: #8481 Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
1 parent 980b988 commit fbce9c3

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

src/audio/pipeline/pipeline-stream.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,20 @@ static int pipeline_comp_trigger(struct comp_dev *current,
352352
"pipeline_comp_trigger(), current->comp.id = %u, dir = %u",
353353
dev_comp_id(current), dir);
354354

355+
#if CONFIG_IPC_MAJOR_4
356+
/*
357+
* IPC4 has a SET_PIPELINE_STATE for each pipeline, so FW
358+
* should not propagate triggers on its own.
359+
* IPC3 has commands only for graph edges, so propagation is required.
360+
*/
361+
if (!is_single_ppl) {
362+
pipe_dbg(current->pipeline,
363+
"pipeline_comp_trigger(), stop trigger propagation at comp.id = %u",
364+
dev_comp_id(current));
365+
return 0;
366+
}
367+
#endif
368+
355369
switch (ppl_data->cmd) {
356370
case COMP_TRIGGER_PRE_RELEASE:
357371
case COMP_TRIGGER_PRE_START:

0 commit comments

Comments
 (0)