static int sof_ipc3_widget_setup_comp_pipeline(struct snd_sof_widget *swidget)
 {
        struct snd_soc_component *scomp = swidget->scomp;
+       struct snd_sof_pipeline *spipe = swidget->spipe;
        struct sof_ipc_pipe_new *pipeline;
        struct snd_sof_widget *comp_swidget;
        int ret;
                swidget->dynamic_pipeline_widget);
 
        swidget->core = pipeline->core;
+       spipe->core_mask |= BIT(pipeline->core);
 
        return 0;
 
 
 {
        struct snd_soc_component *scomp = swidget->scomp;
        struct sof_ipc4_pipeline *pipeline;
+       struct snd_sof_pipeline *spipe = swidget->spipe;
        int ret;
 
        pipeline = kzalloc(sizeof(*pipeline), GFP_KERNEL);
        }
 
        swidget->core = pipeline->core_id;
+       spipe->core_mask |= BIT(pipeline->core_id);
 
        if (pipeline->use_chain_dma) {
                dev_dbg(scomp->dev, "Set up chain DMA for %s\n", swidget->widget->name);
 static int sof_ipc4_widget_setup_comp_src(struct snd_sof_widget *swidget)
 {
        struct snd_soc_component *scomp = swidget->scomp;
+       struct snd_sof_pipeline *spipe = swidget->spipe;
        struct sof_ipc4_src *src;
        int ret;
 
                goto err;
        }
 
+       spipe->core_mask |= BIT(swidget->core);
+
        dev_dbg(scomp->dev, "SRC sink rate %d\n", src->sink_rate);
 
        ret = sof_ipc4_widget_setup_msg(swidget, &src->msg);
 {
        struct snd_soc_component *scomp = swidget->scomp;
        struct sof_ipc4_fw_module *fw_module;
+       struct snd_sof_pipeline *spipe = swidget->spipe;
        struct sof_ipc4_process *process;
        void *cfg;
        int ret;
 
        sof_ipc4_widget_update_kcontrol_module_id(swidget);
 
+       /* set pipeline core mask to keep track of the core the module is scheduled to run on */
+       spipe->core_mask |= BIT(swidget->core);
+
        return 0;
 free_base_cfg_ext:
        kfree(process->base_config_ext);
 
  * @paused_count: Count of number of PCM's that have started and have currently paused this
                  pipeline
  * @complete: flag used to indicate that pipeline set up is complete.
+ * @core_mask: Mask containing target cores for all modules in the pipeline
  * @list: List item in sdev pipeline_list
  */
 struct snd_sof_pipeline {
        int started_count;
        int paused_count;
        int complete;
+       unsigned long core_mask;
        struct list_head list;
 };