Lines Matching refs:skl
3 * skl-message.c - HDA DSP interface for FW registration, Pipe and Module
16 #include <uapi/sound/skl-tplg-interface.h>
17 #include "skl-sst-dsp.h"
19 #include "skl-sst-ipc.h"
20 #include "skl.h"
23 #include "skl-topology.h"
39 void skl_dsp_set_astate_cfg(struct skl_dev *skl, u32 cnt, void *data)
47 skl_ipc_set_large_config(&skl->ipc, &msg, data);
249 int skl_init_dsp(struct skl_dev *skl)
252 struct hdac_bus *bus = skl_to_bus(skl);
264 mmio_base = pci_ioremap_bar(skl->pci, 4);
270 ops = skl_get_dsp_ops(skl->pci->device);
278 skl->fw_name, loader_ops,
279 &skl);
284 skl->dsp_ops = ops;
285 cores = &skl->cores;
314 int skl_free_dsp(struct skl_dev *skl)
316 struct hdac_bus *bus = skl_to_bus(skl);
321 skl->dsp_ops->cleanup(bus->dev, skl);
323 kfree(skl->cores.state);
324 kfree(skl->cores.usage_count);
326 if (skl->dsp->addr.lpe)
327 iounmap(skl->dsp->addr.lpe);
339 int skl_suspend_late_dsp(struct skl_dev *skl)
343 if (!skl)
346 dwork = &skl->d0i3.work;
349 if (skl->supend_active)
358 int skl_suspend_dsp(struct skl_dev *skl)
360 struct hdac_bus *bus = skl_to_bus(skl);
367 ret = skl_dsp_sleep(skl->dsp);
378 int skl_resume_dsp(struct skl_dev *skl)
380 struct hdac_bus *bus = skl_to_bus(skl);
392 if (skl->is_first_boot)
399 skl->enable_miscbdcge(skl->dev, false);
400 skl->clock_power_gating(skl->dev, false);
402 ret = skl_dsp_wake(skl->dsp);
403 skl->enable_miscbdcge(skl->dev, true);
404 skl->clock_power_gating(skl->dev, true);
408 if (skl->cfg.astate_cfg != NULL) {
409 skl_dsp_set_astate_cfg(skl, skl->cfg.astate_cfg->count,
410 skl->cfg.astate_cfg);
442 static void skl_set_base_module_format(struct skl_dev *skl,
459 dev_dbg(skl->dev, "bit_depth=%x valid_bd=%x ch_config=%x\n",
491 static void skl_set_base_ext_module_format(struct skl_dev *skl,
565 static u32 skl_get_node_id(struct skl_dev *skl,
622 static void skl_setup_cpr_gateway_cfg(struct skl_dev *skl,
630 cpr_mconfig->gtw_cfg.node_id = skl_get_node_id(skl, mconfig);
637 if (skl->nr_modules) {
661 dev_warn(skl->dev, "wrong connection type: %d\n",
687 int skl_dsp_set_dma_control(struct skl_dev *skl, u32 *caps,
720 err = skl_ipc_set_large_config(&skl->ipc, &msg, (u32 *)dma_ctrl);
727 static void skl_setup_out_format(struct skl_dev *skl,
745 dev_dbg(skl->dev, "copier out format chan=%d fre=%d bitdepth=%d\n",
754 static void skl_set_src_format(struct skl_dev *skl,
762 skl_set_base_module_format(skl, mconfig,
773 static void skl_set_updown_mixer_format(struct skl_dev *skl,
781 skl_set_base_module_format(skl, mconfig,
794 static void skl_set_copier_format(struct skl_dev *skl,
801 skl_set_base_module_format(skl, mconfig, base_cfg);
803 skl_setup_out_format(skl, mconfig, out_fmt);
804 skl_setup_cpr_gateway_cfg(skl, mconfig, cpr_mconfig);
814 static void skl_set_base_outfmt_format(struct skl_dev *skl,
822 skl_set_base_module_format(skl, mconfig, base_cfg);
823 skl_setup_out_format(skl, mconfig, out_fmt);
826 static u16 skl_get_module_param_size(struct skl_dev *skl,
875 static int skl_set_module_format(struct skl_dev *skl,
882 param_size = skl_get_module_param_size(skl, module_config);
892 skl_set_copier_format(skl, module_config, *param_data);
896 skl_set_src_format(skl, module_config, *param_data);
900 skl_set_updown_mixer_format(skl, module_config, *param_data);
905 skl_set_base_outfmt_format(skl, module_config, *param_data);
910 skl_set_base_module_format(skl, module_config, *param_data);
915 skl_set_base_module_format(skl, module_config, *param_data);
916 skl_set_base_ext_module_format(skl, module_config,
922 dev_dbg(skl->dev, "Module type=%d id=%d config size: %d bytes\n",
1024 int skl_init_module(struct skl_dev *skl,
1032 dev_dbg(skl->dev, "%s: module_id = %d instance=%d\n", __func__,
1036 dev_err(skl->dev, "Pipe not created state= %d pipe_id= %d\n",
1041 ret = skl_set_module_format(skl, mconfig,
1044 dev_err(skl->dev, "Failed to set module format ret=%d\n", ret);
1055 ret = skl_ipc_init_instance(&skl->ipc, &msg, param_data);
1057 dev_err(skl->dev, "Failed to init instance ret=%d\n", ret);
1066 static void skl_dump_bind_info(struct skl_dev *skl, struct skl_module_cfg
1069 dev_dbg(skl->dev, "%s: src module_id = %d src_instance=%d\n",
1071 dev_dbg(skl->dev, "%s: dst_module=%d dst_instance=%d\n", __func__,
1074 dev_dbg(skl->dev, "src_module state = %d dst module state = %d\n",
1083 int skl_unbind_modules(struct skl_dev *skl,
1095 skl_dump_bind_info(skl, src_mcfg, dst_mcfg);
1124 ret = skl_ipc_bind_unbind(&skl->ipc, &msg);
1149 int skl_bind_modules(struct skl_dev *skl,
1163 skl_dump_bind_info(skl, src_mcfg, dst_mcfg);
1195 ret = skl_set_module_params(skl, (void *)&pin_fmt,
1205 dev_dbg(skl->dev, "src queue = %d dst queue =%d\n",
1214 ret = skl_ipc_bind_unbind(&skl->ipc, &msg);
1230 static int skl_set_pipe_state(struct skl_dev *skl, struct skl_pipe *pipe,
1233 dev_dbg(skl->dev, "%s: pipe_state = %d\n", __func__, state);
1235 return skl_ipc_set_pipeline_state(&skl->ipc, pipe->ppl_id, state);
1244 int skl_create_pipeline(struct skl_dev *skl, struct skl_pipe *pipe)
1248 dev_dbg(skl->dev, "%s: pipe_id = %d\n", __func__, pipe->ppl_id);
1250 ret = skl_ipc_create_pipeline(&skl->ipc, pipe->memory_pages,
1254 dev_err(skl->dev, "Failed to create pipeline\n");
1269 int skl_delete_pipe(struct skl_dev *skl, struct skl_pipe *pipe)
1273 dev_dbg(skl->dev, "%s: pipe = %d\n", __func__, pipe->ppl_id);
1281 ret = skl_set_pipe_state(skl, pipe, PPL_PAUSED);
1283 dev_err(skl->dev, "Failed to stop pipeline\n");
1291 ret = skl_set_pipe_state(skl, pipe, PPL_RESET);
1293 dev_err(skl->dev, "Failed to reset pipe ret=%d\n", ret);
1299 ret = skl_ipc_delete_pipeline(&skl->ipc, pipe->ppl_id);
1301 dev_err(skl->dev, "Failed to delete pipeline\n");
1315 int skl_run_pipe(struct skl_dev *skl, struct skl_pipe *pipe)
1319 dev_dbg(skl->dev, "%s: pipe = %d\n", __func__, pipe->ppl_id);
1326 ret = skl_set_pipe_state(skl, pipe, PPL_PAUSED);
1328 dev_err(skl->dev, "Failed to pause pipe\n");
1334 ret = skl_set_pipe_state(skl, pipe, PPL_RUNNING);
1336 dev_err(skl->dev, "Failed to start pipe\n");
1349 int skl_stop_pipe(struct skl_dev *skl, struct skl_pipe *pipe)
1353 dev_dbg(skl->dev, "In %s pipe=%d\n", __func__, pipe->ppl_id);
1359 ret = skl_set_pipe_state(skl, pipe, PPL_PAUSED);
1361 dev_dbg(skl->dev, "Failed to stop pipe\n");
1374 int skl_reset_pipe(struct skl_dev *skl, struct skl_pipe *pipe)
1382 ret = skl_set_pipe_state(skl, pipe, PPL_RESET);
1384 dev_dbg(skl->dev, "Failed to reset pipe ret=%d\n", ret);
1394 int skl_set_module_params(struct skl_dev *skl, u32 *params, int size,
1404 return skl_ipc_set_large_config(&skl->ipc, &msg, params);
1407 int skl_get_module_params(struct skl_dev *skl, u32 *params, int size,
1418 return skl_ipc_get_large_config(&skl->ipc, &msg, ¶ms, &bytes);