int skl_dsp_boot(struct sst_dsp *ctx) { int ret; if (is_skl_dsp_core_enable(ctx, SKL_DSP_CORE0_MASK)) { ret = skl_dsp_reset_core(ctx, SKL_DSP_CORE0_MASK); if (ret < 0) { dev_err(ctx->dev, "dsp core0 reset fail: %d\n", ret); return ret; } ret = skl_dsp_start_core(ctx, SKL_DSP_CORE0_MASK); if (ret < 0) { dev_err(ctx->dev, "dsp core0 start fail: %d\n", ret); return ret; } } else { ret = skl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK); if (ret < 0) { dev_err(ctx->dev, "dsp core0 disable fail: %d\n", ret); return ret; } ret = skl_dsp_enable_core(ctx, SKL_DSP_CORE0_MASK); } return ret; }
int skl_dsp_disable_core(struct sst_dsp *ctx, unsigned int core_mask) { int ret; ret = skl_dsp_reset_core(ctx, core_mask); if (ret < 0) { dev_err(ctx->dev, "dsp core reset failed: core_mask %x\n", core_mask); return ret; } /* power down core*/ ret = skl_dsp_core_power_down(ctx, core_mask); if (ret < 0) { dev_err(ctx->dev, "dsp core power down fail mask %x: %d\n", core_mask, ret); return ret; } if (is_skl_dsp_core_enable(ctx, core_mask)) { dev_err(ctx->dev, "dsp core disable fail mask %x: %d\n", core_mask, ret); ret = -EIO; } return ret; }
int skl_dsp_boot(struct sst_dsp *ctx) { int ret; if (is_skl_dsp_core_enable(ctx)) { dev_dbg(ctx->dev, "dsp core is already enabled, so reset the dap core\n"); ret = skl_dsp_reset_core(ctx); if (ret < 0) { dev_err(ctx->dev, "dsp reset failed\n"); return ret; } ret = skl_dsp_start_core(ctx); if (ret < 0) { dev_err(ctx->dev, "dsp start failed\n"); return ret; } } else { dev_dbg(ctx->dev, "disable and enable to make sure DSP is invalid state\n"); ret = skl_dsp_disable_core(ctx); if (ret < 0) { dev_err(ctx->dev, "dsp disable core failes\n"); return ret; } ret = skl_dsp_enable_core(ctx); } return ret; }
static int skl_dsp_start_core(struct sst_dsp *ctx) { int ret; /* unset reset state */ ret = skl_dsp_core_unset_reset_state(ctx); if (ret < 0) { dev_dbg(ctx->dev, "dsp unset reset fails\n"); return ret; } /* run core */ dev_dbg(ctx->dev, "run core...\n"); sst_dsp_shim_write_unlocked(ctx, SKL_ADSP_REG_ADSPCS, sst_dsp_shim_read_unlocked(ctx, SKL_ADSP_REG_ADSPCS) & ~SKL_ADSPCS_CSTALL(SKL_DSP_CORES_MASK)); if (!is_skl_dsp_core_enable(ctx)) { skl_dsp_reset_core(ctx); dev_err(ctx->dev, "DSP core enable failed\n"); ret = -EIO; } return ret; }
int skl_dsp_start_core(struct sst_dsp *ctx, unsigned int core_mask) { int ret; /* unset reset state */ ret = skl_dsp_core_unset_reset_state(ctx, core_mask); if (ret < 0) return ret; /* run core */ dev_dbg(ctx->dev, "unstall/run core: core_mask = %x\n", core_mask); sst_dsp_shim_update_bits_unlocked(ctx, SKL_ADSP_REG_ADSPCS, SKL_ADSPCS_CSTALL_MASK(core_mask), 0); if (!is_skl_dsp_core_enable(ctx, core_mask)) { skl_dsp_reset_core(ctx, core_mask); dev_err(ctx->dev, "DSP start core failed: core_mask %x\n", core_mask); ret = -EIO; } return ret; }
int skl_dsp_disable_core(struct sst_dsp *ctx) { int ret; ret = skl_dsp_reset_core(ctx); if (ret < 0) { dev_err(ctx->dev, "dsp core reset failed\n"); return ret; } /* power down core*/ ret = skl_dsp_core_power_down(ctx); if (ret < 0) { dev_err(ctx->dev, "dsp core power down failed\n"); return ret; } if (is_skl_dsp_core_enable(ctx)) { dev_err(ctx->dev, "DSP core disable failed\n"); ret = -EIO; } return ret; }