|
@@ -355,12 +355,13 @@ int skl_dsp_get_core(struct sst_dsp *ctx, unsigned int core_id)
|
|
|
ret = ctx->fw_ops.set_state_D0(ctx, core_id);
|
|
|
if (ret < 0) {
|
|
|
dev_err(ctx->dev, "unable to get core%d\n", core_id);
|
|
|
- return ret;
|
|
|
+ goto out;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
skl->cores.usage_count[core_id]++;
|
|
|
|
|
|
+out:
|
|
|
dev_dbg(ctx->dev, "core id %d state %d usage_count %d\n",
|
|
|
core_id, skl->cores.state[core_id],
|
|
|
skl->cores.usage_count[core_id]);
|
|
@@ -379,7 +380,8 @@ int skl_dsp_put_core(struct sst_dsp *ctx, unsigned int core_id)
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- if (--skl->cores.usage_count[core_id] == 0) {
|
|
|
+ if ((--skl->cores.usage_count[core_id] == 0) &&
|
|
|
+ (skl->cores.state[core_id] != SKL_DSP_RESET)) {
|
|
|
ret = ctx->fw_ops.set_state_D3(ctx, core_id);
|
|
|
if (ret < 0) {
|
|
|
dev_err(ctx->dev, "unable to put core %d: %d\n",
|