Lines Matching refs:ctx

22 void skl_dsp_set_state_locked(struct sst_dsp *ctx, int state)
24 mutex_lock(&ctx->mutex);
25 ctx->sst_state = state;
26 mutex_unlock(&ctx->mutex);
34 void skl_dsp_init_core_state(struct sst_dsp *ctx)
36 struct skl_dev *skl = ctx->thread_context;
49 unsigned int skl_dsp_get_enabled_cores(struct sst_dsp *ctx)
51 struct skl_dev *skl = ctx->thread_context;
57 val = sst_dsp_shim_read_unlocked(ctx, SKL_ADSP_REG_ADSPCS);
72 dev_dbg(ctx->dev, "DSP enabled cores mask = %x\n", en_cores_mask);
78 skl_dsp_core_set_reset_state(struct sst_dsp *ctx, unsigned int core_mask)
83 sst_dsp_shim_update_bits_unlocked(ctx,
88 ret = sst_dsp_register_poll(ctx,
94 if ((sst_dsp_shim_read_unlocked(ctx, SKL_ADSP_REG_ADSPCS) &
97 dev_err(ctx->dev, "Set reset state failed: core_mask %x\n",
106 struct sst_dsp *ctx, unsigned int core_mask)
110 dev_dbg(ctx->dev, "In %s\n", __func__);
113 sst_dsp_shim_update_bits_unlocked(ctx, SKL_ADSP_REG_ADSPCS,
117 ret = sst_dsp_register_poll(ctx,
124 if ((sst_dsp_shim_read_unlocked(ctx, SKL_ADSP_REG_ADSPCS) &
126 dev_err(ctx->dev, "Unset reset state failed: core_mask %x\n",
135 is_skl_dsp_core_enable(struct sst_dsp *ctx, unsigned int core_mask)
140 val = sst_dsp_shim_read_unlocked(ctx, SKL_ADSP_REG_ADSPCS);
147 dev_dbg(ctx->dev, "DSP core(s) enabled? %d : core_mask %x\n",
153 static int skl_dsp_reset_core(struct sst_dsp *ctx, unsigned int core_mask)
156 sst_dsp_shim_update_bits_unlocked(ctx, SKL_ADSP_REG_ADSPCS,
161 return skl_dsp_core_set_reset_state(ctx, core_mask);
164 int skl_dsp_start_core(struct sst_dsp *ctx, unsigned int core_mask)
169 ret = skl_dsp_core_unset_reset_state(ctx, core_mask);
174 dev_dbg(ctx->dev, "unstall/run core: core_mask = %x\n", core_mask);
175 sst_dsp_shim_update_bits_unlocked(ctx, SKL_ADSP_REG_ADSPCS,
178 if (!is_skl_dsp_core_enable(ctx, core_mask)) {
179 skl_dsp_reset_core(ctx, core_mask);
180 dev_err(ctx->dev, "DSP start core failed: core_mask %x\n",
188 int skl_dsp_core_power_up(struct sst_dsp *ctx, unsigned int core_mask)
193 sst_dsp_shim_update_bits_unlocked(ctx, SKL_ADSP_REG_ADSPCS,
198 ret = sst_dsp_register_poll(ctx,
205 if ((sst_dsp_shim_read_unlocked(ctx, SKL_ADSP_REG_ADSPCS) &
208 dev_err(ctx->dev, "DSP core power up failed: core_mask %x\n",
216 int skl_dsp_core_power_down(struct sst_dsp *ctx, unsigned int core_mask)
219 sst_dsp_shim_update_bits_unlocked(ctx, SKL_ADSP_REG_ADSPCS,
223 return sst_dsp_register_poll(ctx,
231 int skl_dsp_enable_core(struct sst_dsp *ctx, unsigned int core_mask)
236 ret = skl_dsp_core_power_up(ctx, core_mask);
238 dev_err(ctx->dev, "dsp core power up failed: core_mask %x\n",
243 return skl_dsp_start_core(ctx, core_mask);
246 int skl_dsp_disable_core(struct sst_dsp *ctx, unsigned int core_mask)
250 ret = skl_dsp_reset_core(ctx, core_mask);
252 dev_err(ctx->dev, "dsp core reset failed: core_mask %x\n",
258 ret = skl_dsp_core_power_down(ctx, core_mask);
260 dev_err(ctx->dev, "dsp core power down fail mask %x: %d\n",
265 if (is_skl_dsp_core_enable(ctx, core_mask)) {
266 dev_err(ctx->dev, "dsp core disable fail mask %x: %d\n",
274 int skl_dsp_boot(struct sst_dsp *ctx)
278 if (is_skl_dsp_core_enable(ctx, SKL_DSP_CORE0_MASK)) {
279 ret = skl_dsp_reset_core(ctx, SKL_DSP_CORE0_MASK);
281 dev_err(ctx->dev, "dsp core0 reset fail: %d\n", ret);
285 ret = skl_dsp_start_core(ctx, SKL_DSP_CORE0_MASK);
287 dev_err(ctx->dev, "dsp core0 start fail: %d\n", ret);
291 ret = skl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK);
293 dev_err(ctx->dev, "dsp core0 disable fail: %d\n", ret);
296 ret = skl_dsp_enable_core(ctx, SKL_DSP_CORE0_MASK);
304 struct sst_dsp *ctx = dev_id;
308 spin_lock(&ctx->spinlock);
310 val = sst_dsp_shim_read_unlocked(ctx, SKL_ADSP_REG_ADSPIS);
311 ctx->intr_status = val;
314 spin_unlock(&ctx->spinlock);
319 skl_ipc_int_disable(ctx);
324 skl_cldma_int_disable(ctx);
328 spin_unlock(&ctx->spinlock);
336 int skl_dsp_get_core(struct sst_dsp *ctx, unsigned int core_id)
338 struct skl_dev *skl = ctx->thread_context;
342 dev_err(ctx->dev, "invalid core id: %d\n", core_id);
349 ret = ctx->fw_ops.set_state_D0(ctx, core_id);
351 dev_err(ctx->dev, "unable to get core%d\n", core_id);
357 dev_dbg(ctx->dev, "core id %d state %d usage_count %d\n",
365 int skl_dsp_put_core(struct sst_dsp *ctx, unsigned int core_id)
367 struct skl_dev *skl = ctx->thread_context;
371 dev_err(ctx->dev, "invalid core id: %d\n", core_id);
377 ret = ctx->fw_ops.set_state_D3(ctx, core_id);
379 dev_err(ctx->dev, "unable to put core %d: %d\n",
385 dev_dbg(ctx->dev, "core id %d state %d usage_count %d\n",
393 int skl_dsp_wake(struct sst_dsp *ctx)
395 return skl_dsp_get_core(ctx, SKL_DSP_CORE0_ID);
399 int skl_dsp_sleep(struct sst_dsp *ctx)
401 return skl_dsp_put_core(ctx, SKL_DSP_CORE0_ID);
458 bool is_skl_dsp_running(struct sst_dsp *ctx)
460 return (ctx->sst_state == SKL_DSP_RUNNING);