diff options
author | Subhransu S. Prusty <subhransu.s.prusty@intel.com> | 2017-08-22 16:45:53 +0530 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-08-23 11:55:18 +0100 |
commit | 7b992c24de78a206b3abd07192686d2d5db5012c (patch) | |
tree | 20af735de3da1b85e1d935b307a421d16a942346 /sound/soc | |
parent | c360e0c3ab8ef8d0fd6b5501a407b9a2be4f204d (diff) | |
download | op-kernel-dev-7b992c24de78a206b3abd07192686d2d5db5012c.zip op-kernel-dev-7b992c24de78a206b3abd07192686d2d5db5012c.tar.gz |
ASoC: Intel: Skylake: Fix DSP core ref count for init failure
During dsp init failure, the ref count is not incremented and dsp is
powered down. But as the skl driver calls put_core for the init failure it
decrements the dsp core ref count and ref count becomes unbalanced.
This results in dsp core powered up in further runtime suspend/resume
cycles and never powered down.
So increment the ref count before dsp core powerup and for any failure,
decrement in put_core will be balanced.
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Acked-By: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/intel/skylake/skl-sst-dsp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sound/soc/intel/skylake/skl-sst-dsp.c b/sound/soc/intel/skylake/skl-sst-dsp.c index c2ba5ff..19ee1d4 100644 --- a/sound/soc/intel/skylake/skl-sst-dsp.c +++ b/sound/soc/intel/skylake/skl-sst-dsp.c @@ -351,6 +351,8 @@ int skl_dsp_get_core(struct sst_dsp *ctx, unsigned int core_id) return -EINVAL; } + skl->cores.usage_count[core_id]++; + if (skl->cores.state[core_id] == SKL_DSP_RESET) { ret = ctx->fw_ops.set_state_D0(ctx, core_id); if (ret < 0) { @@ -359,8 +361,6 @@ int skl_dsp_get_core(struct sst_dsp *ctx, unsigned int core_id) } } - 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], |