mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
ASoC: SOF: ipc4/ipc4-loader: Add SOF_INFO and CODEC_INFO to fw_config_params
SOF_INFO (id == 35) tuple holds tuple structured information about SOF features. The first entry in SOF_INFO is the SOF_CODEC_INFO (id == 0) which contains information about the supported codecs for decode/encode in the booted firmware. If present in the fw_config payload, make a copy of it and store it sof_ipc4_fw_data->codec_info to be used by the compressed code. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Link: https://patch.msgid.link/20261007084955.1256-20-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
03f3ae9e89
commit
9fdc525713
|
|
@ -436,12 +436,10 @@ enum sof_ipc4_fw_config_params {
|
|||
SOF_IPC4_FW_CFG_RESERVED,
|
||||
SOF_IPC4_FW_CFG_POWER_GATING_POLICY,
|
||||
SOF_IPC4_FW_CFG_ASSERT_MODE,
|
||||
SOF_IPC4_FW_RESERVED1,
|
||||
SOF_IPC4_FW_RESERVED2,
|
||||
SOF_IPC4_FW_RESERVED3,
|
||||
SOF_IPC4_FW_RESERVED4,
|
||||
SOF_IPC4_FW_RESERVED5,
|
||||
SOF_IPC4_FW_CONTEXT_SAVE
|
||||
/* Reserved: 24 - 28 */
|
||||
SOF_IPC4_FW_CONTEXT_SAVE = 29,
|
||||
/* Reserved: 30 - 34 */
|
||||
SOF_IPC4_FW_CFG_SOF_INFO = 35,
|
||||
};
|
||||
|
||||
struct sof_ipc4_fw_version {
|
||||
|
|
@ -451,6 +449,14 @@ struct sof_ipc4_fw_version {
|
|||
uint16_t build;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* tuple based array for SOF specific information under SOF_IPC4_FW_CFG_SOF_INFO
|
||||
* tuple of fw_config
|
||||
*/
|
||||
enum ipc4_fw_sof_info_params {
|
||||
SOF_IPC4_SOF_CODEC_INFO,
|
||||
};
|
||||
|
||||
/* Payload data for SOF_IPC4_MOD_SET_DX */
|
||||
struct sof_ipc4_dx_state_info {
|
||||
/* core(s) to apply the change */
|
||||
|
|
|
|||
|
|
@ -408,6 +408,38 @@ static int sof_ipc4_validate_firmware(struct snd_sof_dev *sdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int sof_ipc4_query_sof_info(struct snd_sof_dev *sdev,
|
||||
void *sof_info_data, u32 sof_info_size)
|
||||
{
|
||||
struct sof_ipc4_fw_data *ipc4_data = sdev->private;
|
||||
struct sof_ipc4_tuple *tuple;
|
||||
size_t offset = 0;
|
||||
|
||||
/*
|
||||
* No size validation is needed as the sof_info data is coming from
|
||||
* firmware as part of the firmware config, it is guarantied to be
|
||||
* correct.
|
||||
*/
|
||||
while (offset < sof_info_size) {
|
||||
tuple = (struct sof_ipc4_tuple *)((u8 *)sof_info_data + offset);
|
||||
|
||||
switch (tuple->type) {
|
||||
case SOF_IPC4_SOF_CODEC_INFO:
|
||||
ipc4_data->codec_info = devm_kmemdup(sdev->dev, tuple->value,
|
||||
tuple->size, GFP_KERNEL);
|
||||
if (!ipc4_data->codec_info)
|
||||
return -ENOMEM;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
offset += sizeof(*tuple) + tuple->size;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sof_ipc4_query_fw_configuration(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct sof_ipc4_fw_data *ipc4_data = sdev->private;
|
||||
|
|
@ -483,6 +515,11 @@ int sof_ipc4_query_fw_configuration(struct snd_sof_dev *sdev)
|
|||
*/
|
||||
ipc4_data->libraries_restored = ipc4_data->fw_context_save;
|
||||
break;
|
||||
case SOF_IPC4_FW_CFG_SOF_INFO:
|
||||
ret = sof_ipc4_query_sof_info(sdev, tuple->value, tuple->size);
|
||||
if (ret)
|
||||
goto out;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ struct sof_ipc4_fw_library {
|
|||
* @fw_context_save: Firmware supports full context save and restore
|
||||
* @libraries_restored: The libraries have been retained during firmware boot
|
||||
*
|
||||
* @codec_info: Information about the available codecs in booted firmware. The
|
||||
* data is to be used by the code for compressed support.
|
||||
* @load_library: Callback function for platform dependent library loading
|
||||
* @pipeline_state_mutex: Mutex to protect pipeline triggers, ref counts, states and deletion
|
||||
*/
|
||||
|
|
@ -91,6 +93,8 @@ struct sof_ipc4_fw_data {
|
|||
bool fw_context_save;
|
||||
bool libraries_restored;
|
||||
|
||||
void *codec_info;
|
||||
|
||||
int (*load_library)(struct snd_sof_dev *sdev,
|
||||
struct sof_ipc4_fw_library *fw_lib, bool reload);
|
||||
void (*intel_configure_mic_privacy)(struct snd_sof_dev *sdev,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user