}
 
        ret = skl_sst_dsp_init(bus->dev, mmio_base, irq,
-                       loader_ops, &skl->skl_sst);
+                       skl->fw_name, loader_ops, &skl->skl_sst);
        if (ret < 0)
                return ret;
 
 
 
 int skl_dsp_boot(struct sst_dsp *ctx);
 int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
-               struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp);
+               const char *fw_name, struct skl_dsp_loader_ops dsp_ops,
+               struct skl_sst **dsp);
 void skl_sst_dsp_cleanup(struct device *dev, struct skl_sst *ctx);
 
 #endif /*__SKL_SST_DSP_H__*/
 
        init_waitqueue_head(&skl->boot_wait);
 
        if (ctx->fw == NULL) {
-               ret = request_firmware(&ctx->fw, "dsp_fw_release.bin", ctx->dev);
+               ret = request_firmware(&ctx->fw, ctx->fw_name, ctx->dev);
                if (ret < 0) {
                        dev_err(ctx->dev, "Request firmware failed %d\n", ret);
                        skl_dsp_disable_core(ctx);
 };
 
 int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
-               struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp)
+               const char *fw_name, struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp)
 {
        struct skl_sst *skl;
        struct sst_dsp *sst;
 
        sst = skl->dsp;
 
+       sst->fw_name = fw_name;
        sst->addr.lpe = mmio_base;
        sst->addr.shim = mmio_base;
        sst_dsp_mailbox_init(sst, (SKL_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ),
 
                dev_err(bus->dev, "No matching machine driver found\n");
                return -ENODEV;
        }
+       skl->fw_name = mach->fw_filename;
 
        pdev = platform_device_alloc(mach->drv_name, -1);
        if (pdev == NULL) {