ASoC: SOF: ipc4-topology: set domain bit based on dp domain type
authorRander Wang <rander.wang@intel.com>
Fri, 15 Jul 2022 14:52:10 +0000 (09:52 -0500)
committerMark Brown <broonie@kernel.org>
Fri, 15 Jul 2022 19:11:33 +0000 (20:11 +0100)
Currently the domain bit in ipc msg for module initialization is
set to lp (low power) mode for pipeline. This is not correct since
it is for module domain type:  ll domain or dp domain which are for
scheduler in fw. If the domain bit is set to 1 fw will process the
module in dp domain or deal it with ll domain. So set domain bit
based on dp domain setting.

Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Rander Wang <rander.wang@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20220715145216.277003-6-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/ipc4-topology.c
sound/soc/sof/ipc4-topology.h

index 47291fa..af072b4 100644 (file)
@@ -314,6 +314,7 @@ static int sof_ipc4_widget_set_module_info(struct snd_sof_widget *swidget)
 static int sof_ipc4_widget_setup_msg(struct snd_sof_widget *swidget, struct sof_ipc4_msg *msg)
 {
        struct sof_ipc4_fw_module *fw_module;
+       uint32_t type;
        int ret;
 
        ret = sof_ipc4_widget_set_module_info(swidget);
@@ -330,6 +331,9 @@ static int sof_ipc4_widget_setup_msg(struct snd_sof_widget *swidget, struct sof_
        msg->extension = SOF_IPC4_MOD_EXT_PPL_ID(swidget->pipeline_id);
        msg->extension |= SOF_IPC4_MOD_EXT_CORE_ID(swidget->core);
 
+       type = fw_module->man4_module_entry.type & SOF_IPC4_MODULE_DP ? 1 : 0;
+       msg->extension |= SOF_IPC4_MOD_EXT_DOMAIN(type);
+
        return 0;
 }
 
@@ -1532,8 +1536,6 @@ static int sof_ipc4_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget
 
                msg->extension &= ~SOF_IPC4_MOD_EXT_PARAM_SIZE_MASK;
                msg->extension |= ipc_size >> 2;
-               msg->extension &= ~SOF_IPC4_MOD_EXT_DOMAIN_MASK;
-               msg->extension |= SOF_IPC4_MOD_EXT_DOMAIN(pipeline->lp_mode);
        }
        dev_dbg(sdev->dev, "Create widget %s instance %d - pipe %d - core %d\n",
                swidget->widget->name, swidget->instance_id, swidget->pipeline_id, swidget->core);
index 56ab80e..0aa87a8 100644 (file)
 #define SOF_IPC4_FW_PAGE(x) ((((x) + BIT(12) - 1) & ~(BIT(12) - 1)) >> 12)
 #define SOF_IPC4_FW_ROUNDUP(x) (((x) + BIT(6) - 1) & (~(BIT(6) - 1)))
 
-#define SOF_IPC4_MODULE_LL      BIT(5)
+#define SOF_IPC4_MODULE_LOAD_TYPE              GENMASK(3, 0)
+#define SOF_IPC4_MODULE_AUTO_START             BIT(4)
+/*
+ * Two module schedule domains in fw :
+ * LL domain - Low latency domain
+ * DP domain - Data processing domain
+ * The LL setting should be equal to !DP setting
+ */
+#define SOF_IPC4_MODULE_LL             BIT(5)
+#define SOF_IPC4_MODULE_DP             BIT(6)
+#define SOF_IPC4_MODULE_LIB_CODE               BIT(7)
+
 #define SOF_IPC4_MODULE_INSTANCE_LIST_ITEM_SIZE 12
 #define SOF_IPC4_PIPELINE_OBJECT_SIZE 448
 #define SOF_IPC4_DATA_QUEUE_OBJECT_SIZE 128