@@ -238,7 +238,8 @@ struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type,
238238 * This function currently only decodes the payload and prints out
239239 * data it finds, but it does not store it anywhere.
240240 */
241- __cold static int ipc4_create_pipeline_payload_decode (char * data )
241+ __cold static int ipc4_create_pipeline_payload_decode (char * data ,
242+ struct create_pipeline_params * pparams )
242243{
243244 const struct ipc4_pipeline_ext_payload * hdr =
244245 (struct ipc4_pipeline_ext_payload * )data ;
@@ -309,6 +310,7 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
309310 obj -> object_words * sizeof (uint32_t ), sizeof (* mem_data ));
310311 break ;
311312 }
313+ pparams -> mem_data = mem_data ;
312314 tr_info (& ipc_tr ,
313315 "init_ext_obj_mem_data domain %u stack %u interim %u lifetime %u shared %u" ,
314316 mem_data -> domain_id , mem_data -> stack_bytes ,
@@ -329,7 +331,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
329331 return 0 ;
330332}
331333
332- __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc )
334+ __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc ,
335+ struct create_pipeline_params * pparams )
333336{
334337 struct ipc_comp_dev * ipc_pipe ;
335338 struct pipeline * pipe ;
@@ -346,7 +349,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
346349 }
347350
348351 /* create the pipeline */
349- pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 );
352+ pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 ,
353+ pparams );
350354 if (!pipe ) {
351355 tr_err (& ipc_tr , "ipc: pipeline_new() failed" );
352356 return IPC4_OUT_OF_MEMORY ;
@@ -401,7 +405,8 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
401405__cold int ipc_pipeline_new (struct ipc * ipc , ipc_pipe_new * _pipe_desc )
402406{
403407 struct ipc4_pipeline_create * pipe_desc = ipc_from_pipe_new (_pipe_desc );
404-
408+ struct create_pipeline_params pparams = { 0 };
409+ bool valid_pparams = false;
405410 assert_can_be_cold ();
406411
407412 tr_dbg (& ipc_tr , "ipc: pipeline id = %u" , (uint32_t )pipe_desc -> primary .r .instance_id );
@@ -412,13 +417,16 @@ __cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
412417
413418 if (pipe_desc -> extension .r .payload ) {
414419 char * data ;
420+ int ret ;
415421
416422 data = ipc4_get_pipe_create_data ();
417423
418- ipc4_create_pipeline_payload_decode (data );
424+ ret = ipc4_create_pipeline_payload_decode (data , & pparams );
425+ if (ret == 0 )
426+ valid_pparams = true;
419427 }
420428
421- return ipc4_create_pipeline (pipe_desc );
429+ return ipc4_create_pipeline (pipe_desc , valid_pparams ? & pparams : NULL );
422430}
423431
424432__cold static inline int ipc_comp_free_remote (struct comp_dev * dev )
0 commit comments