ASoC: Intel: Skylake: Modify load_lib_ipc arguments for a nowait version
authorSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Tue, 25 Apr 2017 06:48:23 +0000 (12:18 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 26 Apr 2017 14:47:49 +0000 (15:47 +0100)
Kabylake uses code loader dma and wait on notification instead of ipc
reply for load library ipc status. So modify the argument of
skl_sst_ipc_load_library to check on flag to wait for ipc reply.

Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/bxt-sst.c
sound/soc/intel/skylake/skl-sst-ipc.c
sound/soc/intel/skylake/skl-sst-ipc.h

index d26545ee3e586bc48e26762fd04c0e12fc664636..fde4bc0f35b041f4f9b69ae1b11aa05cd135c79b 100644 (file)
@@ -81,7 +81,7 @@ bxt_load_library(struct sst_dsp *ctx, struct skl_lib_info *linfo, int lib_count)
                memcpy(dmab.area, stripped_fw.data, stripped_fw.size);
 
                ctx->dsp_ops.trigger(ctx->dev, true, stream_tag);
-               ret = skl_sst_ipc_load_library(&skl->ipc, dma_id, i);
+               ret = skl_sst_ipc_load_library(&skl->ipc, dma_id, i, true);
                if (ret < 0)
                        dev_err(ctx->dev, "IPC Load Lib for %s fail: %d\n",
                                        linfo[i].name, ret);
index e90fe2c0bf2c9d08509783dc3965295b946d3dd9..7147eddc6d3cd85d7699196a4270b13bc10453eb 100644 (file)
@@ -971,7 +971,7 @@ int skl_ipc_get_large_config(struct sst_generic_ipc *ipc,
 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)
+                               u8 dma_id, u8 table_id, bool wait)
 {
        struct skl_ipc_header header = {0};
        u64 *ipc_header = (u64 *)(&header);
@@ -983,7 +983,11 @@ int skl_sst_ipc_load_library(struct sst_generic_ipc *ipc,
        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 (wait)
+               ret = sst_ipc_tx_message_wait(ipc, *ipc_header,
+                                       NULL, 0, NULL, 0);
+       else
+               ret = sst_ipc_tx_message_nowait(ipc, *ipc_header, NULL, 0);
 
        if (ret < 0)
                dev_err(ipc->dev, "ipc: load lib failed\n");
index 4abf98c0e00ed55ddb76f534fb05210d57a9ff63..e057da2713c6cbfe188ff0165c17a0026c7d2476 100644 (file)
@@ -197,7 +197,7 @@ 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);
+                       u8 dma_id, u8 table_id, bool wait);
 
 int skl_ipc_set_d0ix(struct sst_generic_ipc *ipc,
                struct skl_ipc_d0ix_msg *msg);