Lines Matching refs:ctx

33 static bool skl_check_fw_status(struct sst_dsp *ctx, u32 status)
37 cur_sts = sst_dsp_shim_read(ctx, SKL_ADSP_FW_STATUS) & SKL_FW_STS_MASK;
42 static int skl_transfer_firmware(struct sst_dsp *ctx,
47 ret = ctx->cl_dev.ops.cl_copy_to_dmabuf(ctx, basefw, base_fw_size,
52 ret = sst_dsp_register_poll(ctx,
59 ctx->cl_dev.ops.cl_stop_dma(ctx);
66 static int skl_load_base_firmware(struct sst_dsp *ctx)
69 struct skl_dev *skl = ctx->thread_context;
76 if (ctx->fw == NULL) {
77 ret = request_firmware(&ctx->fw, ctx->fw_name, ctx->dev);
79 dev_err(ctx->dev, "Request firmware failed %d\n", ret);
86 ret = snd_skl_parse_uuids(ctx, ctx->fw, SKL_ADSP_FW_BIN_HDR_OFFSET, 0);
88 dev_err(ctx->dev, "UUID parsing err: %d\n", ret);
89 release_firmware(ctx->fw);
90 skl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK);
96 stripped_fw.data = ctx->fw->data;
97 stripped_fw.size = ctx->fw->size;
101 ret = skl_dsp_boot(ctx);
103 dev_err(ctx->dev, "Boot dsp core failed ret: %d\n", ret);
107 ret = skl_cldma_prepare(ctx);
109 dev_err(ctx->dev, "CL dma prepare failed : %d\n", ret);
114 skl_ipc_int_enable(ctx);
115 skl_ipc_op_int_enable(ctx);
119 if (skl_check_fw_status(ctx, SKL_FW_INIT)) {
120 dev_dbg(ctx->dev,
127 reg = sst_dsp_shim_read(ctx, SKL_ADSP_FW_STATUS);
128 dev_err(ctx->dev,
134 ret = skl_transfer_firmware(ctx, stripped_fw.data, stripped_fw.size);
136 dev_err(ctx->dev, "Transfer firmware failed%d\n", ret);
142 dev_err(ctx->dev, "DSP boot failed, FW Ready timed-out\n");
147 dev_dbg(ctx->dev, "Download firmware successful%d\n", ret);
152 ctx->cl_dev.ops.cl_cleanup_controller(ctx);
154 skl_dsp_disable_core(ctx, SKL_DSP_CORE0_MASK);
155 release_firmware(ctx->fw);
156 ctx->fw = NULL;
160 static int skl_set_dsp_D0(struct sst_dsp *ctx, unsigned int core_id)
164 struct skl_dev *skl = ctx->thread_context;
169 ret = skl_load_base_firmware(ctx);
171 dev_err(ctx->dev, "unable to load firmware\n");
177 ret = ctx->fw_ops.load_library(ctx, skl->lib_info,
180 dev_err(ctx->dev, "reload libs failed: %d\n",
193 ret = skl_dsp_enable_core(ctx, core_mask);
203 dev_err(ctx->dev, "Failed to set dsp to D0:core id= %d\n",
205 skl_dsp_disable_core(ctx, core_mask);
214 static int skl_set_dsp_D3(struct sst_dsp *ctx, unsigned int core_id)
218 struct skl_dev *skl = ctx->thread_context;
226 dev_err(ctx->dev, "set Dx core %d fail: %d\n", core_id, ret);
230 ctx->cl_dev.ops.cl_cleanup_controller(ctx);
231 skl_cldma_int_disable(ctx);
232 skl_ipc_op_int_disable(ctx);
233 skl_ipc_int_disable(ctx);
236 ret = skl_dsp_disable_core(ctx, core_mask);
244 static unsigned int skl_get_errorcode(struct sst_dsp *ctx)
246 return sst_dsp_shim_read(ctx, SKL_ADSP_ERROR_CODE);
253 static int skl_get_module(struct sst_dsp *ctx, u16 mod_id)
257 list_for_each_entry(module, &ctx->module_list, list) {
265 static int skl_put_module(struct sst_dsp *ctx, u16 mod_id)
269 list_for_each_entry(module, &ctx->module_list, list) {
277 static struct skl_module_table *skl_fill_module_table(struct sst_dsp *ctx,
285 ret = request_firmware(&fw, mod_name, ctx->dev);
287 dev_err(ctx->dev, "Request Module %s failed :%d\n",
292 skl_module = devm_kzalloc(ctx->dev, sizeof(*skl_module), GFP_KERNEL);
299 skl_module->mod_info = devm_kzalloc(ctx->dev, size, GFP_KERNEL);
307 list_add(&skl_module->list, &ctx->module_list);
314 struct sst_dsp *ctx, u16 mod_id)
318 if (list_empty(&ctx->module_list)) {
319 dev_err(ctx->dev, "Module list is empty\n");
323 list_for_each_entry(module, &ctx->module_list, list) {
331 static int skl_transfer_module(struct sst_dsp *ctx, const void *data,
335 struct skl_dev *skl = ctx->thread_context;
338 bytes_left = ctx->cl_dev.ops.cl_copy_to_dmabuf(ctx, data, size, false);
349 dev_err(ctx->dev, "Failed to Load %s with err %d\n",
362 ret = skl_cldma_wait_interruptible(ctx);
366 bytes_left = ctx->cl_dev.ops.cl_copy_to_dmabuf(ctx,
374 dev_err(ctx->dev, "Module Load failed\n");
379 ctx->cl_dev.ops.cl_stop_dma(ctx);
385 skl_load_library(struct sst_dsp *ctx, struct skl_lib_info *linfo, int lib_count)
387 struct skl_dev *skl = ctx->thread_context;
397 ret = skl_transfer_module(ctx, stripped_fw.data,
410 static int skl_load_module(struct sst_dsp *ctx, u16 mod_id, u8 *guid)
418 module_entry = skl_module_get_from_id(ctx, mod_id);
420 module_entry = skl_fill_module_table(ctx, mod_name, mod_id);
422 dev_err(ctx->dev, "Failed to Load module\n");
428 ret = skl_transfer_module(ctx, module_entry->mod_info->fw->data,
432 dev_err(ctx->dev, "Failed to Load module\n");
437 ret = skl_get_module(ctx, mod_id);
442 static int skl_unload_module(struct sst_dsp *ctx, u16 mod_id)
445 struct skl_dev *skl = ctx->thread_context;
448 usage_cnt = skl_put_module(ctx, mod_id);
450 dev_err(ctx->dev, "Module bad usage cnt!:%d\n", usage_cnt);
461 dev_err(ctx->dev, "Failed to UnLoad module\n");
462 skl_get_module(ctx, mod_id);
469 void skl_clear_module_cnt(struct sst_dsp *ctx)
473 if (list_empty(&ctx->module_list))
476 list_for_each_entry(module, &ctx->module_list, list) {
482 static void skl_clear_module_table(struct sst_dsp *ctx)
486 if (list_empty(&ctx->module_list))
489 list_for_each_entry_safe(module, tmp, &ctx->module_list, list) {