ASoC: SOF: ipc4: Add core_id support from topology
Merge series from Peter Ujfalusi <peter.ujfalusi@linux.intel.com>: The following series will add support for handling the core_id token which is needed for supporting multiple cores with complex topologies.
This commit is contained in:
commit
f1fbb6a266
@ -176,6 +176,10 @@ enum sof_ipc4_pipeline_state {
|
||||
#define SOF_IPC4_GLB_PIPE_EXT_LP_MASK BIT(0)
|
||||
#define SOF_IPC4_GLB_PIPE_EXT_LP(x) ((x) << SOF_IPC4_GLB_PIPE_EXT_LP_SHIFT)
|
||||
|
||||
#define SOF_IPC4_GLB_PIPE_EXT_CORE_ID_SHIFT 20
|
||||
#define SOF_IPC4_GLB_PIPE_EXT_CORE_ID_MASK GENMASK(23, 20)
|
||||
#define SOF_IPC4_GLB_PIPE_EXT_CORE_ID(x) ((x) << SOF_IPC4_GLB_PIPE_EXT_CORE_ID_SHIFT)
|
||||
|
||||
/* pipeline set state ipc msg */
|
||||
#define SOF_IPC4_GLB_PIPE_STATE_ID_SHIFT 16
|
||||
#define SOF_IPC4_GLB_PIPE_STATE_ID_MASK GENMASK(23, 16)
|
||||
|
@ -24,7 +24,9 @@ static DEFINE_IDA(pipeline_ida);
|
||||
|
||||
static const struct sof_topology_token ipc4_sched_tokens[] = {
|
||||
{SOF_TKN_SCHED_LP_MODE, SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
|
||||
offsetof(struct sof_ipc4_pipeline, lp_mode)}
|
||||
offsetof(struct sof_ipc4_pipeline, lp_mode)},
|
||||
{SOF_TKN_SCHED_CORE, SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
|
||||
offsetof(struct sof_ipc4_pipeline, core_id)},
|
||||
};
|
||||
|
||||
static const struct sof_topology_token pipeline_tokens[] = {
|
||||
@ -100,6 +102,8 @@ static const struct sof_topology_token dai_tokens[] = {
|
||||
static const struct sof_topology_token comp_ext_tokens[] = {
|
||||
{SOF_TKN_COMP_UUID, SND_SOC_TPLG_TUPLE_TYPE_UUID, get_token_uuid,
|
||||
offsetof(struct snd_sof_widget, uuid)},
|
||||
{SOF_TKN_COMP_CORE_ID, SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
|
||||
offsetof(struct snd_sof_widget, core)},
|
||||
};
|
||||
|
||||
static const struct sof_topology_token gain_tokens[] = {
|
||||
@ -645,6 +649,8 @@ static int sof_ipc4_widget_setup_comp_pipeline(struct snd_sof_widget *swidget)
|
||||
goto err;
|
||||
}
|
||||
|
||||
swidget->core = pipeline->core_id;
|
||||
|
||||
/* parse one set of pipeline tokens */
|
||||
ret = sof_update_ipc_object(scomp, swidget, SOF_PIPELINE_TOKENS, swidget->tuples,
|
||||
swidget->num_tuples, sizeof(*swidget), 1);
|
||||
@ -656,9 +662,9 @@ static int sof_ipc4_widget_setup_comp_pipeline(struct snd_sof_widget *swidget)
|
||||
/* TODO: Get priority from topology */
|
||||
pipeline->priority = 0;
|
||||
|
||||
dev_dbg(scomp->dev, "pipeline '%s': id %d pri %d lp mode %d\n",
|
||||
dev_dbg(scomp->dev, "pipeline '%s': id %d, pri %d, core_id %u, lp mode %d\n",
|
||||
swidget->widget->name, swidget->pipeline_id,
|
||||
pipeline->priority, pipeline->lp_mode);
|
||||
pipeline->priority, pipeline->core_id, pipeline->lp_mode);
|
||||
|
||||
swidget->private = pipeline;
|
||||
|
||||
@ -668,6 +674,7 @@ static int sof_ipc4_widget_setup_comp_pipeline(struct snd_sof_widget *swidget)
|
||||
pipeline->msg.primary |= SOF_IPC4_MSG_TARGET(SOF_IPC4_FW_GEN_MSG);
|
||||
|
||||
pipeline->msg.extension = pipeline->lp_mode;
|
||||
pipeline->msg.extension |= SOF_IPC4_GLB_PIPE_EXT_CORE_ID(pipeline->core_id);
|
||||
pipeline->state = SOF_IPC4_PIPE_UNINITIALIZED;
|
||||
|
||||
return 0;
|
||||
|
@ -117,6 +117,7 @@ struct sof_ipc4_copier_config_set_sink_format {
|
||||
* @priority: Priority of this pipeline
|
||||
* @lp_mode: Low power mode
|
||||
* @mem_usage: Memory usage
|
||||
* @core_id: Target core for the pipeline
|
||||
* @state: Pipeline state
|
||||
* @msg: message structure for pipeline
|
||||
* @skip_during_fe_trigger: skip triggering this pipeline during the FE DAI trigger
|
||||
@ -125,6 +126,7 @@ struct sof_ipc4_pipeline {
|
||||
uint32_t priority;
|
||||
uint32_t lp_mode;
|
||||
uint32_t mem_usage;
|
||||
uint32_t core_id;
|
||||
int state;
|
||||
struct sof_ipc4_msg msg;
|
||||
bool skip_during_fe_trigger;
|
||||
|
Loading…
x
Reference in New Issue
Block a user