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);
 
 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);
        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");
 
                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);