|
@@ -613,8 +613,10 @@ skip_buf_size_calc:
|
|
|
}
|
|
|
|
|
|
#define DMA_CONTROL_ID 5
|
|
|
+#define DMA_I2S_BLOB_SIZE 21
|
|
|
|
|
|
-int skl_dsp_set_dma_control(struct skl_sst *ctx, struct skl_module_cfg *mconfig)
|
|
|
+int skl_dsp_set_dma_control(struct skl_sst *ctx, u32 *caps,
|
|
|
+ u32 caps_size, u32 node_id)
|
|
|
{
|
|
|
struct skl_dma_control *dma_ctrl;
|
|
|
struct skl_ipc_large_config_msg msg = {0};
|
|
@@ -624,24 +626,27 @@ int skl_dsp_set_dma_control(struct skl_sst *ctx, struct skl_module_cfg *mconfig)
|
|
|
/*
|
|
|
* if blob size zero, then return
|
|
|
*/
|
|
|
- if (mconfig->formats_config.caps_size == 0)
|
|
|
+ if (caps_size == 0)
|
|
|
return 0;
|
|
|
|
|
|
msg.large_param_id = DMA_CONTROL_ID;
|
|
|
- msg.param_data_size = sizeof(struct skl_dma_control) +
|
|
|
- mconfig->formats_config.caps_size;
|
|
|
+ msg.param_data_size = sizeof(struct skl_dma_control) + caps_size;
|
|
|
|
|
|
dma_ctrl = kzalloc(msg.param_data_size, GFP_KERNEL);
|
|
|
if (dma_ctrl == NULL)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- dma_ctrl->node_id = skl_get_node_id(ctx, mconfig);
|
|
|
+ dma_ctrl->node_id = node_id;
|
|
|
|
|
|
- /* size in dwords */
|
|
|
- dma_ctrl->config_length = mconfig->formats_config.caps_size / 4;
|
|
|
+ /*
|
|
|
+ * NHLT blob may contain additional configs along with i2s blob.
|
|
|
+ * firmware expects only the i2s blob size as the config_length.
|
|
|
+ * So fix to i2s blob size.
|
|
|
+ * size in dwords.
|
|
|
+ */
|
|
|
+ dma_ctrl->config_length = DMA_I2S_BLOB_SIZE;
|
|
|
|
|
|
- memcpy(dma_ctrl->config_data, mconfig->formats_config.caps,
|
|
|
- mconfig->formats_config.caps_size);
|
|
|
+ memcpy(dma_ctrl->config_data, caps, caps_size);
|
|
|
|
|
|
err = skl_ipc_set_large_config(&ctx->ipc, &msg, (u32 *)dma_ctrl);
|
|
|
|