From e896e1512970dcda2bff4238a7f37f663713f1f8 Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Fri, 28 Nov 2025 08:03:29 +0100 Subject: [PATCH 1/2] west.yml: update zephyr to f908d0b5f22a b33fc9a7b2d4 drivers: dai: intel: ssp: Fix SSP blob v3.0 TLV parsing b038ee72fae2 drivers: dai: Add size parameter to dai_config_set API 552c1514a6c5 drivers: dai: intel: ssp: Add support for SSP_GTW_DMA_CONFIG_ID TLV type Signed-off-by: Adrian Bonislawski --- west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/west.yml b/west.yml index be312634d0bc..31f5235e9aec 100644 --- a/west.yml +++ b/west.yml @@ -43,7 +43,7 @@ manifest: - name: zephyr repo-path: zephyr - revision: af974c307477f4e0e093abbfca768419f14a865f + revision: f908d0b5f22adaaf912e729317c323864f1e1641 remote: zephyrproject # Import some projects listed in zephyr/west.yml@revision From e16862b3d1e0f0eecc36aac4f91a1bc07cbf9a54 Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Tue, 18 Nov 2025 12:23:42 +0100 Subject: [PATCH 2/2] audio: dai: Pass bespoke config size through dai_set_config chain Update dai_set_config() to accept and propagate the size parameter for bespoke DAI configuration data, matching the updated Zephyr DAI driver API. Changes: - Add size_t size parameter to dai_set_config() function - Update dai_set_config() signature in dai-zephyr.h header - Pass copier_cfg->gtw_cfg.config_length as size in IPC4 dai_config() - Forward size parameter to dai_config_set() Zephyr driver API call This change completes the integration with the new Zephyr DAI API that requires explicit size validation for bespoke configuration blobs, enabling proper bounds checking in DAI drivers. Signed-off-by: Adrian Bonislawski --- src/audio/dai-zephyr.c | 4 ++-- src/include/sof/lib/dai-legacy.h | 2 +- src/include/sof/lib/dai-zephyr.h | 3 ++- src/ipc/ipc3/handler.c | 2 +- src/ipc/ipc4/dai.c | 3 ++- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/audio/dai-zephyr.c b/src/audio/dai-zephyr.c index d24f3c2024ba..0d597434fc5d 100644 --- a/src/audio/dai-zephyr.c +++ b/src/audio/dai-zephyr.c @@ -143,7 +143,7 @@ static int dai_trigger_op(struct dai *dai, int cmd, int direction) /* called from src/ipc/ipc3/handler.c and src/ipc/ipc4/dai.c */ __cold int dai_set_config(struct dai *dai, struct ipc_config_dai *common_config, - const void *spec_config) + const void *spec_config, size_t size) { const struct device *dev = dai->dev; const struct sof_ipc_dai_config *sof_cfg = spec_config; @@ -198,7 +198,7 @@ __cold int dai_set_config(struct dai *dai, struct ipc_config_dai *common_config, return -EINVAL; } - return dai_config_set(dev, &cfg, cfg_params); + return dai_config_set(dev, &cfg, cfg_params, size); } /* called from ipc/ipc3/dai.c */ diff --git a/src/include/sof/lib/dai-legacy.h b/src/include/sof/lib/dai-legacy.h index 44142412334b..c1b7c0a28653 100644 --- a/src/include/sof/lib/dai-legacy.h +++ b/src/include/sof/lib/dai-legacy.h @@ -419,7 +419,7 @@ void dai_put(struct dai *dai); * \brief Digital Audio interface formatting */ static inline int dai_set_config(struct dai *dai, struct ipc_config_dai *config, - const void *spec_config) + const void *spec_config, size_t size) { return dai->drv->ops.set_config(dai, config, spec_config); } diff --git a/src/include/sof/lib/dai-zephyr.h b/src/include/sof/lib/dai-zephyr.h index cff5fffb4228..5a15399190ee 100644 --- a/src/include/sof/lib/dai-zephyr.h +++ b/src/include/sof/lib/dai-zephyr.h @@ -237,7 +237,8 @@ void dai_put(struct dai *dai); /** * \brief Digital Audio interface formatting */ -int dai_set_config(struct dai *dai, struct ipc_config_dai *config, const void *spec_config); +int dai_set_config(struct dai *dai, struct ipc_config_dai *config, + const void *spec_config, size_t size); /** * \brief Get Digital Audio interface DMA Handshake diff --git a/src/ipc/ipc3/handler.c b/src/ipc/ipc3/handler.c index 9f865960f1bf..afcb79269ec6 100644 --- a/src/ipc/ipc3/handler.c +++ b/src/ipc/ipc3/handler.c @@ -579,7 +579,7 @@ static int ipc_dai_config_set(struct sof_ipc_dai_config *config, } /* configure DAI */ - ret = dai_set_config(dai, config_dai, config); + ret = dai_set_config(dai, config_dai, config, sizeof(*config)); dai_put(dai); /* free ref immediately */ if (ret < 0) { ipc_cmd_err(&ipc_tr, "ipc: dai %d,%d config failed %d", config->type, diff --git a/src/ipc/ipc4/dai.c b/src/ipc/ipc4/dai.c index 94fbd1823945..a1f3ed344e1f 100644 --- a/src/ipc/ipc4/dai.c +++ b/src/ipc/ipc4/dai.c @@ -396,7 +396,8 @@ __cold int dai_config(struct dai_data *dd, struct comp_dev *dev, if (ret < 0) return ret; - return dai_set_config(dd->dai, common_config, copier_cfg->gtw_cfg.config_data); + return dai_set_config(dd->dai, common_config, + copier_cfg->gtw_cfg.config_data, copier_cfg->gtw_cfg.config_length); } #if CONFIG_ZEPHYR_NATIVE_DRIVERS