@@ -241,7 +241,8 @@ struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type,
241241 * This function currently only decodes the payload and prints out
242242 * data it finds, but it does not store it anywhere.
243243 */
244- __cold static int ipc4_create_pipeline_payload_decode (char * data )
244+ __cold static int ipc4_create_pipeline_payload_decode (char * data ,
245+ struct create_pipeline_params * pparams )
245246{
246247 const struct ipc4_pipeline_ext_payload * hdr =
247248 (struct ipc4_pipeline_ext_payload * )data ;
@@ -312,6 +313,7 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
312313 obj -> object_words * sizeof (uint32_t ), sizeof (* mem_data ));
313314 break ;
314315 }
316+ pparams -> mem_data = mem_data ;
315317 tr_info (& ipc_tr ,
316318 "init_ext_obj_mem_data domain %u stack %u interim %u lifetime %u shared %u" ,
317319 mem_data -> domain_id , mem_data -> stack_bytes ,
@@ -332,7 +334,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
332334 return 0 ;
333335}
334336
335- __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc )
337+ __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc ,
338+ struct create_pipeline_params * pparams )
336339{
337340 struct ipc_comp_dev * ipc_pipe ;
338341 struct pipeline * pipe ;
@@ -349,7 +352,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
349352 }
350353
351354 /* create the pipeline */
352- pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 );
355+ pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 ,
356+ pparams );
353357 if (!pipe ) {
354358 tr_err (& ipc_tr , "ipc: pipeline_new() failed" );
355359 return IPC4_OUT_OF_MEMORY ;
@@ -404,7 +408,8 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
404408__cold int ipc_pipeline_new (struct ipc * ipc , ipc_pipe_new * _pipe_desc )
405409{
406410 struct ipc4_pipeline_create * pipe_desc = ipc_from_pipe_new (_pipe_desc );
407-
411+ struct create_pipeline_params pparams = { 0 };
412+ bool valid_pparams = false;
408413 assert_can_be_cold ();
409414
410415 tr_dbg (& ipc_tr , "ipc: pipeline id = %u" , (uint32_t )pipe_desc -> primary .r .instance_id );
@@ -415,13 +420,16 @@ __cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
415420
416421 if (pipe_desc -> extension .r .payload ) {
417422 char * data ;
423+ int ret ;
418424
419425 data = ipc4_get_pipe_create_data ();
420426
421- ipc4_create_pipeline_payload_decode (data );
427+ ret = ipc4_create_pipeline_payload_decode (data , & pparams );
428+ if (ret == 0 )
429+ valid_pparams = true;
422430 }
423431
424- return ipc4_create_pipeline (pipe_desc );
432+ return ipc4_create_pipeline (pipe_desc , valid_pparams ? & pparams : NULL );
425433}
426434
427435__cold static inline int ipc_comp_free_remote (struct comp_dev * dev )
0 commit comments