ASoC: Intel: Skylake: Add library loading IPCs
authorRamesh Babu <ramesh.babu@intel.com>
Tue, 26 Jul 2016 12:36:47 +0000 (18:06 +0530)
committerMark Brown <broonie@kernel.org>
Mon, 8 Aug 2016 10:54:59 +0000 (11:54 +0100)
DSP fw can have additional firmwares as libs. These libs can be
loaded using message IPC_GLB_LOAD_LIBRARY.

Signed-off-by: Ramesh Babu <ramesh.babu@intel.com>
Signed-off-by: Kranthi G <gudishax.kranthikumar@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl-sst-ipc.c
sound/soc/intel/skylake/skl-sst-ipc.h

index 96f2f6889b1893bea1cce2445cdf024b35b4e21e..1544564c0ad1f0ae3bc2eabb7e7187b3f9830fbf 100644 (file)
@@ -190,6 +190,7 @@ enum skl_ipc_glb_type {
        IPC_GLB_GET_PPL_CONTEXT_SIZE = 21,
        IPC_GLB_SAVE_PPL = 22,
        IPC_GLB_RESTORE_PPL = 23,
+       IPC_GLB_LOAD_LIBRARY = 24,
        IPC_GLB_NOTIFY = 26,
        IPC_GLB_MAX_IPC_MSG_NUMBER = 31 /* Maximum message number */
 };
@@ -902,3 +903,25 @@ int skl_ipc_get_large_config(struct sst_generic_ipc *ipc,
        return ret;
 }
 EXPORT_SYMBOL_GPL(skl_ipc_get_large_config);
+
+int skl_sst_ipc_load_library(struct sst_generic_ipc *ipc,
+                               u8 dma_id, u8 table_id)
+{
+       struct skl_ipc_header header = {0};
+       u64 *ipc_header = (u64 *)(&header);
+       int ret = 0;
+
+       header.primary = IPC_MSG_TARGET(IPC_FW_GEN_MSG);
+       header.primary |= IPC_MSG_DIR(IPC_MSG_REQUEST);
+       header.primary |= IPC_GLB_TYPE(IPC_GLB_LOAD_LIBRARY);
+       header.primary |= IPC_MOD_INSTANCE_ID(table_id);
+       header.primary |= IPC_MOD_ID(dma_id);
+
+       ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0);
+
+       if (ret < 0)
+               dev_err(ipc->dev, "ipc: load lib failed\n");
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(skl_sst_ipc_load_library);
index 31e5bc356aa2bd92ff8307045f100a6e131e280d..fc46779f80c3c8efdf1c6dceb75f68760f1f70d0 100644 (file)
@@ -151,6 +151,9 @@ int skl_ipc_set_large_config(struct sst_generic_ipc *ipc,
 int skl_ipc_get_large_config(struct sst_generic_ipc *ipc,
                struct skl_ipc_large_config_msg *msg, u32 *param);
 
+int skl_sst_ipc_load_library(struct sst_generic_ipc *ipc,
+                       u8 dma_id, u8 table_id);
+
 void skl_ipc_int_enable(struct sst_dsp *dsp);
 void skl_ipc_op_int_enable(struct sst_dsp *ctx);
 void skl_ipc_op_int_disable(struct sst_dsp *ctx);