Hi Daniel,
How does SOF selects between IPC3 and IPC4? Is it at runtime? Module parameter?
We are looking on enabling IPC4 while also keeping IPC3 support in place.
It's by default at build-time, but we also have an 'ipc_type' module parameter that can override platform defaults set in stone at build time, and look for different paths/names for topology, e.g.
static const struct sof_dev_desc tgl_desc = { .ipc_supported_mask = BIT(SOF_IPC) | BIT(SOF_INTEL_IPC4), .ipc_default = SOF_IPC, .default_fw_path = { [SOF_IPC] = "intel/sof", [SOF_INTEL_IPC4] = "intel/avs/tgl", }, .default_lib_path = { [SOF_INTEL_IPC4] = "intel/avs-lib/tgl", }, .default_tplg_path = { [SOF_IPC] = "intel/sof-tplg", [SOF_INTEL_IPC4] = "intel/avs-tplg", }, .default_fw_filename = { [SOF_IPC] = "sof-tgl.ri", [SOF_INTEL_IPC4] = "dsp_basefw.bin", }, static const struct sof_dev_desc mtl_desc = { .ipc_supported_mask = BIT(SOF_INTEL_IPC4), .ipc_default = SOF_INTEL_IPC4, .default_fw_path = { [SOF_INTEL_IPC4] = "intel/sof-ipc4/mtl", }, .default_tplg_path = { [SOF_INTEL_IPC4] = "intel/sof-ace-tplg", },
TigerLake supports IPC3 by default and IPC4 optionally for development. MeteorLake is IPC4 only.
In addition, we have different descriptors for IPC callbacks.
Does this help?
Regards, -Pierre