int snd_sof_run_firmware(struct snd_sof_dev *sdev)
 {
        int ret;
-       int init_core_mask;
 
        init_waitqueue_head(&sdev->boot_wait);
 
                return ret;
        }
 
-       init_core_mask = ret;
-
        /*
         * now wait for the DSP to boot. There are 3 possible outcomes:
         * 1. Boot wait times out indicating FW boot failure.
                return ret;
        }
 
-       /* fw boot is complete. Update the active cores mask */
-       sdev->enabled_cores_mask = init_core_mask;
-
        return 0;
 }
 EXPORT_SYMBOL(snd_sof_run_firmware);
 
 static inline int snd_sof_dsp_core_power_up(struct snd_sof_dev *sdev,
                                            unsigned int core_mask)
 {
-       if (sof_ops(sdev)->core_power_up)
-               return sof_ops(sdev)->core_power_up(sdev, core_mask);
+       int ret = 0;
 
-       return 0;
+       if (sof_ops(sdev)->core_power_up) {
+               ret = sof_ops(sdev)->core_power_up(sdev, core_mask);
+               if (!ret)
+                       sdev->enabled_cores_mask |= core_mask;
+       }
+
+       return ret;
 }
 
 static inline int snd_sof_dsp_core_power_down(struct snd_sof_dev *sdev,
                                              unsigned int core_mask)
 {
-       if (sof_ops(sdev)->core_power_down)
-               return sof_ops(sdev)->core_power_down(sdev, core_mask);
+       int ret = 0;
 
-       return 0;
+       if (sof_ops(sdev)->core_power_down) {
+               ret = sof_ops(sdev)->core_power_down(sdev, core_mask);
+               if (!ret)
+                       sdev->enabled_cores_mask &= ~core_mask;
+       }
+
+       return ret;
 }
 
 /* pre/post fw load */
 
 
        /* reset FW state */
        sdev->fw_state = SOF_FW_BOOT_NOT_STARTED;
-       sdev->enabled_cores_mask = 0;
 
        return ret;
 }
 
                        core, ret);
                goto err;
        }
-
-       /* update enabled cores mask */
-       sdev->enabled_cores_mask |= BIT(core);
-
        return ret;
 err:
        /* power down core if it is host managed and return the original error if this fails too */
                if (ret < 0)
                        dev_err(scomp->dev, "error: powering down pipeline schedule core %d\n",
                                pipeline->core);
-
-               /* update enabled cores mask */
-               sdev->enabled_cores_mask &= ~(1 << pipeline->core);
-
                break;
        default:
                break;