Lines Matching refs:ctx

46 static int cnl_prepare_fw(struct sst_dsp *ctx, const void *fwdata, u32 fwsize)
51 stream_tag = ctx->dsp_ops.prepare(ctx->dev, 0x40, fwsize, &ctx->dmab);
53 dev_err(ctx->dev, "dma prepare failed: 0%#x\n", stream_tag);
57 ctx->dsp_ops.stream_tag = stream_tag;
58 memcpy(ctx->dmab.area, fwdata, fwsize);
60 ret = skl_dsp_core_power_up(ctx, SKL_DSP_CORE0_MASK);
62 dev_err(ctx->dev, "dsp core0 power up failed\n");
68 sst_dsp_shim_write(ctx, CNL_ADSP_REG_HIPCIDR,
72 ret = skl_dsp_start_core(ctx, SKL_DSP_CORE0_MASK);
74 dev_err(ctx->dev, "Start dsp core failed ret: %d\n", ret);
79 ret = sst_dsp_register_poll(ctx, CNL_ADSP_REG_HIPCIDA,
84 dev_err(ctx->dev, "timeout for purge request: %d\n", ret);
89 cnl_ipc_int_enable(ctx);
90 cnl_ipc_op_int_enable(ctx);
92 ret = sst_dsp_register_poll(ctx, CNL_ADSP_FW_STATUS, CNL_FW_STS_MASK,
96 dev_err(ctx->dev, "rom init timeout, ret: %d\n", ret);
103 ctx->dsp_ops.cleanup(ctx->dev, &ctx->dmab, stream_tag);
104 cnl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK);
109 static int sst_transfer_fw_host_dma(struct sst_dsp *ctx)
113 ctx->dsp_ops.trigger(ctx->dev, true, ctx->dsp_ops.stream_tag);
114 ret = sst_dsp_register_poll(ctx, CNL_ADSP_FW_STATUS, CNL_FW_STS_MASK,
118 ctx->dsp_ops.trigger(ctx->dev, false, ctx->dsp_ops.stream_tag);
119 ctx->dsp_ops.cleanup(ctx->dev, &ctx->dmab, ctx->dsp_ops.stream_tag);
124 static int cnl_load_base_firmware(struct sst_dsp *ctx)
127 struct skl_dev *cnl = ctx->thread_context;
130 if (!ctx->fw) {
131 ret = request_firmware(&ctx->fw, ctx->fw_name, ctx->dev);
133 dev_err(ctx->dev, "request firmware failed: %d\n", ret);
140 ret = snd_skl_parse_uuids(ctx, ctx->fw,
146 stripped_fw.data = ctx->fw->data;
147 stripped_fw.size = ctx->fw->size;
151 ret = cnl_prepare_fw(ctx, stripped_fw.data, stripped_fw.size);
154 dev_dbg(ctx->dev, "prepare firmware failed: %d\n", ret);
160 ret = sst_transfer_fw_host_dma(ctx);
162 dev_err(ctx->dev, "transfer firmware failed: %d\n", ret);
163 cnl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK);
170 dev_err(ctx->dev, "FW ready timed-out\n");
171 cnl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK);
181 dev_err(ctx->dev, "firmware load failed: %d\n", ret);
182 release_firmware(ctx->fw);
183 ctx->fw = NULL;
188 static int cnl_set_dsp_D0(struct sst_dsp *ctx, unsigned int core_id)
190 struct skl_dev *cnl = ctx->thread_context;
197 ret = cnl_load_base_firmware(ctx);
199 dev_err(ctx->dev, "fw reload failed: %d\n", ret);
207 ret = cnl_dsp_enable_core(ctx, core_mask);
209 dev_err(ctx->dev, "enable dsp core %d failed: %d\n",
216 cnl_ipc_int_enable(ctx);
217 cnl_ipc_op_int_enable(ctx);
223 dev_err(ctx->dev,
225 sst_dsp_shim_read(ctx, CNL_ADSP_FW_STATUS),
226 sst_dsp_shim_read(ctx, CNL_ADSP_ERROR_CODE));
237 dev_err(ctx->dev, "set_dx failed, core: %d ret: %d\n",
246 cnl_dsp_disable_core(ctx, core_mask);
251 static int cnl_set_dsp_D3(struct sst_dsp *ctx, unsigned int core_id)
253 struct skl_dev *cnl = ctx->thread_context;
264 dev_err(ctx->dev,
272 skl_ipc_op_int_disable(ctx);
273 skl_ipc_int_disable(ctx);
276 ret = cnl_dsp_disable_core(ctx, core_mask);
278 dev_err(ctx->dev, "disable dsp core %d failed: %d\n",
288 static unsigned int cnl_get_errno(struct sst_dsp *ctx)
290 return sst_dsp_shim_read(ctx, CNL_ADSP_ERROR_CODE);