Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions src/audio/dai-zephyr.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,14 +146,15 @@ __cold int dai_set_config(struct dai *dai, struct ipc_config_dai *common_config,
const struct sof_ipc_dai_config *sof_cfg = spec_config;
struct dai_config cfg = {0};
const void *cfg_params;
size_t dai_cfg_size = size;
bool is_blob;

assert_can_be_cold();

cfg.dai_index = common_config->dai_index;
is_blob = common_config->is_config_blob;
cfg.format = sof_cfg->format;
cfg.options = sof_cfg->flags;
cfg.format = common_config->format;
cfg.options = is_blob ? 0 : sof_cfg->flags;
cfg.rate = common_config->sampling_frequency;

switch (common_config->type) {
Expand Down Expand Up @@ -195,7 +196,14 @@ __cold int dai_set_config(struct dai *dai, struct ipc_config_dai *common_config,
return -EINVAL;
}

return dai_config_set(dev, &cfg, cfg_params, size);
if (!is_blob) {
if (size < SOF_DAI_CONFIG_HW_SPEC_OFFSET)
return -EINVAL;

dai_cfg_size -= SOF_DAI_CONFIG_HW_SPEC_OFFSET;
}

return dai_config_set(dev, &cfg, cfg_params, dai_cfg_size);
}

/* called from ipc/ipc3/dai.c */
Expand Down
3 changes: 3 additions & 0 deletions src/include/ipc/dai.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <ipc/dai-mediatek.h>
#include <ipc/dai-amd.h>
#include <ipc/header.h>
#include <stddef.h>
#include <stdint.h>

/*
Expand Down Expand Up @@ -97,6 +98,8 @@ enum sof_ipc_dai_type {
SOF_DAI_AMD_SW_AUDIO /**<Amd SW AUDIO */
};

#define SOF_DAI_CONFIG_HW_SPEC_OFFSET offsetof(struct sof_ipc_dai_config, ssp)

/* general purpose DAI configuration */
struct sof_ipc_dai_config {
struct sof_ipc_cmd_hdr hdr;
Expand Down
8 changes: 5 additions & 3 deletions zephyr/lib/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ static void resume_dais(void)
struct processing_module *mod;
struct copier_data *cd;
struct dai_data *dd;
size_t gtw_cfg_size;

#if CONFIG_INTEL_ADSP_MIC_PRIVACY
/* Re-initialize mic privacy manager first to ensure proper state before DAI resume */
Expand All @@ -119,12 +120,13 @@ static void resume_dais(void)
mod = comp_mod(icd->cd);
cd = module_get_private_data(mod);
dd = cd->dd[0];
/* gtw_cfg.config_length is in words */
gtw_cfg_size = cd->config.gtw_cfg.config_length << 2;
if (dai_probe(dd->dai->dev) < 0) {
tr_err(&zephyr_tr, "DAI resume failed on probe, type %d index %d",
dd->dai->type, dd->dai->index);
} else if (dai_set_config(dd->dai, &dd->ipc_config,
cd->config.gtw_cfg.config_data,
cd->config.gtw_cfg.config_length) < 0) {
} else if (dai_set_config(dd->dai, &dd->ipc_config, cd->config.gtw_cfg.config_data,
gtw_cfg_size) < 0) {
tr_err(&zephyr_tr, "DAI resume failed on config, type %d index %d",
dd->dai->type, dd->dai->index);
}
Expand Down
Loading