diff --git a/src/audio/pipeline/pipeline-graph.c b/src/audio/pipeline/pipeline-graph.c index 7cb83c4a2571..a5a7e30d8a86 100644 --- a/src/audio/pipeline/pipeline-graph.c +++ b/src/audio/pipeline/pipeline-graph.c @@ -103,8 +103,7 @@ void pipeline_posn_init(struct sof *sof) } /* create new pipeline - returns pipeline id or negative error */ -struct pipeline *pipeline_new(struct comp_dev *cd, uint32_t pipeline_id, - uint32_t priority, uint32_t comp_id) +struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id) { struct sof_ipc_stream_posn posn; struct pipeline *p; @@ -121,7 +120,6 @@ struct pipeline *pipeline_new(struct comp_dev *cd, uint32_t pipeline_id, } /* init pipeline */ - p->sched_comp = cd; p->comp_id = comp_id; p->priority = priority; p->pipeline_id = pipeline_id; diff --git a/src/include/sof/audio/pipeline.h b/src/include/sof/audio/pipeline.h index 37e094301ff7..bc3f5fc0e411 100644 --- a/src/include/sof/audio/pipeline.h +++ b/src/include/sof/audio/pipeline.h @@ -110,14 +110,12 @@ struct pipeline_data { /** * \brief Creates a new pipeline. - * \param[in,out] cd Pipeline component device. * \param[in] pipeline_id Pipeline ID number. * \param[in] priority Pipeline scheduling priority. * \param[in] comp_id Pipeline component ID number. * \return New pipeline pointer or NULL. */ -struct pipeline *pipeline_new(struct comp_dev *cd, uint32_t pipeline_id, - uint32_t priority, uint32_t comp_id); +struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id); /** * \brief Free's a pipeline. diff --git a/src/ipc/helper-ipc3.c b/src/ipc/helper-ipc3.c index 6ade9ac47f51..3d93f6c69938 100644 --- a/src/ipc/helper-ipc3.c +++ b/src/ipc/helper-ipc3.c @@ -281,7 +281,6 @@ int ipc_pipeline_new(struct ipc *ipc, { struct ipc_comp_dev *ipc_pipe; struct pipeline *pipe; - struct ipc_comp_dev *icd; int ret; /* check whether the pipeline already exists */ @@ -301,28 +300,8 @@ int ipc_pipeline_new(struct ipc *ipc, return -EINVAL; } - /* find the scheduling component */ - icd = ipc_get_comp_by_id(ipc, pipe_desc->sched_id); - if (!icd) { - tr_err(&ipc_tr, "ipc_pipeline_new(): cannot find the scheduling component, pipe_desc->sched_id = %u", - pipe_desc->sched_id); - return -EINVAL; - } - - if (icd->type != COMP_TYPE_COMPONENT) { - tr_err(&ipc_tr, "ipc_pipeline_new(): icd->type (%d) != COMP_TYPE_COMPONENT for pipeline scheduling component icd->id %d", - icd->type, icd->id); - return -EINVAL; - } - - if (icd->core != pipe_desc->core) { - tr_err(&ipc_tr, "ipc_pipeline_new(): icd->core (%d) != pipe_desc->core (%d) for pipeline scheduling component icd->id %d", - icd->core, pipe_desc->core, icd->id); - return -EINVAL; - } - /* create the pipeline */ - pipe = pipeline_new(icd->cd, pipe_desc->pipeline_id, pipe_desc->priority, + pipe = pipeline_new(pipe_desc->pipeline_id, pipe_desc->priority, pipe_desc->comp_id); if (!pipe) { tr_err(&ipc_tr, "ipc_pipeline_new(): pipeline_new() failed"); @@ -396,6 +375,8 @@ int ipc_pipeline_free(struct ipc *ipc, uint32_t comp_id) int ipc_pipeline_complete(struct ipc *ipc, uint32_t comp_id) { struct ipc_comp_dev *ipc_pipe; + struct ipc_comp_dev *icd; + struct pipeline *p; uint32_t pipeline_id; struct ipc_comp_dev *ipc_ppl_source; struct ipc_comp_dev *ipc_ppl_sink; @@ -413,6 +394,30 @@ int ipc_pipeline_complete(struct ipc *ipc, uint32_t comp_id) if (!cpu_is_me(ipc_pipe->core)) return ipc_process_on_core(ipc_pipe->core); + p = ipc_pipe->pipeline; + + /* find the scheduling component */ + icd = ipc_get_comp_by_id(ipc, p->sched_id); + if (!icd) { + tr_err(&ipc_tr, "ipc_pipeline_complete(): cannot find the scheduling component, p->sched_id = %u", + p->sched_id); + return -EINVAL; + } + + if (icd->type != COMP_TYPE_COMPONENT) { + tr_err(&ipc_tr, "ipc_pipeline_complete(): icd->type (%d) != COMP_TYPE_COMPONENT for pipeline scheduling component icd->id %d", + icd->type, icd->id); + return -EINVAL; + } + + if (icd->core != ipc_pipe->core) { + tr_err(&ipc_tr, "ipc_pipeline_complete(): icd->core (%d) != ipc_pipe->core (%d) for pipeline scheduling component icd->id %d", + icd->core, ipc_pipe->core, icd->id); + return -EINVAL; + } + + p->sched_comp = icd->cd; + pipeline_id = ipc_pipe->pipeline->pipeline_id; tr_dbg(&ipc_tr, "ipc: pipe %d -> complete on comp %d", pipeline_id, diff --git a/test/cmocka/src/audio/pipeline/pipeline_new.c b/test/cmocka/src/audio/pipeline/pipeline_new.c index 73a04901bf53..9f713440ad0b 100644 --- a/test/cmocka/src/audio/pipeline/pipeline_new.c +++ b/test/cmocka/src/audio/pipeline/pipeline_new.c @@ -44,8 +44,7 @@ static void test_audio_pipeline_pipeline_new_creation(void **state) struct pipeline_new_setup_data *test_data = *state; /*Testing component*/ - struct pipeline *result = pipeline_new(test_data->comp_data, - test_data->pipe_id, + struct pipeline *result = pipeline_new(test_data->pipe_id, test_data->priority, test_data->comp_id);