Lines Matching refs:skl
3 * skl-topology.c - Implements Platform component ALSA controls/widget
20 #include <uapi/sound/skl-tplg-interface.h>
21 #include "skl-sst-dsp.h"
22 #include "skl-sst-ipc.h"
23 #include "skl-topology.h"
24 #include "skl.h"
50 void skl_tplg_d0i3_get(struct skl_dev *skl, enum d0i3_capability caps)
52 struct skl_d0i3_data *d0i3 = &skl->d0i3;
69 void skl_tplg_d0i3_put(struct skl_dev *skl, enum d0i3_capability caps)
71 struct skl_d0i3_data *d0i3 = &skl->d0i3;
114 static void skl_dump_mconfig(struct skl_dev *skl, struct skl_module_cfg *mcfg)
118 dev_dbg(skl->dev, "Dumping config\n");
119 dev_dbg(skl->dev, "Input Format:\n");
120 dev_dbg(skl->dev, "channels = %d\n", iface->inputs[0].fmt.channels);
121 dev_dbg(skl->dev, "s_freq = %d\n", iface->inputs[0].fmt.s_freq);
122 dev_dbg(skl->dev, "ch_cfg = %d\n", iface->inputs[0].fmt.ch_cfg);
123 dev_dbg(skl->dev, "valid bit depth = %d\n",
125 dev_dbg(skl->dev, "Output Format:\n");
126 dev_dbg(skl->dev, "channels = %d\n", iface->outputs[0].fmt.channels);
127 dev_dbg(skl->dev, "s_freq = %d\n", iface->outputs[0].fmt.s_freq);
128 dev_dbg(skl->dev, "valid bit depth = %d\n",
130 dev_dbg(skl->dev, "ch_cfg = %d\n", iface->outputs[0].fmt.ch_cfg);
232 static void skl_tplg_update_buffer_size(struct skl_dev *skl,
284 struct skl_dev *skl)
298 dev_dbg(skl->dev, "Applying default cfg blob\n");
331 cfg = intel_nhlt_get_endpoint_blob(skl->dev, skl->nhlt, m_cfg->vbus_id,
338 dev_err(skl->dev, "Blob NULL for id %x type %d dirn %d\n",
340 dev_err(skl->dev, "PCM: ch %d, freq %d, fmt %d/%d\n",
349 struct skl_dev *skl)
359 dev_dbg(skl->dev, "Mconfig for widget=%s BEFORE updation\n",
362 skl_dump_mconfig(skl, m_cfg);
370 skl_tplg_update_buffer_size(skl, m_cfg);
372 dev_dbg(skl->dev, "Mconfig for widget=%s AFTER updation\n",
375 skl_dump_mconfig(skl, m_cfg);
384 struct skl_dev *skl)
396 ret = skl_set_module_params(skl, sp_cfg->caps,
410 ret = skl_set_module_params(skl,
457 static int skl_tplg_module_prepare(struct skl_dev *skl, struct skl_pipe *pipe,
462 return skl_pcm_host_dma_prepare(skl->dev, pipe->p_params);
465 return skl_pcm_link_dma_prepare(skl->dev, pipe->p_params);
477 skl_tplg_init_pipe_modules(struct skl_dev *skl, struct skl_pipe *pipe)
492 dev_err(skl->dev,
502 if (mconfig->module->loadable && skl->dsp->fw_ops.load_mod) {
503 ret = skl->dsp->fw_ops.load_mod(skl->dsp,
510 ret = skl_tplg_module_prepare(skl, pipe, w, mconfig);
515 skl_tplg_update_be_blob(w, skl);
521 skl_tplg_update_module_params(w, skl);
523 mconfig->id.pvt_id = skl_get_pvt_id(skl, uuid_mod,
529 ret = skl_dsp_get_core(skl->dsp, mconfig->core_id);
531 dev_err(skl->dev, "Failed to wake up core %d ret=%d\n",
536 ret = skl_init_module(skl, mconfig);
538 skl_put_pvt_id(skl, uuid_mod, &mconfig->id.pvt_id);
542 ret = skl_tplg_set_module_params(w, skl);
549 skl_dsp_put_core(skl->dsp, mconfig->core_id);
553 static int skl_tplg_unload_pipe_modules(struct skl_dev *skl,
565 if (mconfig->module->loadable && skl->dsp->fw_ops.unload_mod) {
566 ret = skl->dsp->fw_ops.unload_mod(skl->dsp,
571 skl_put_pvt_id(skl, uuid_mod, &mconfig->id.pvt_id);
573 ret = skl_dsp_put_core(skl->dsp, mconfig->core_id);
576 dev_err(skl->dev, "Failed to sleep core %d ret=%d\n",
599 skl_tplg_get_pipe_config(struct skl_dev *skl, struct skl_module_cfg *mconfig)
614 dev_dbg(skl->dev, "No conn_type or just 1 pathcfg, taking 0th for %d\n",
636 dev_dbg(skl->dev, "Using pipe config: %d\n", i);
641 dev_err(skl->dev, "Invalid pipe config: %d %d %d for pipe: %d\n",
654 struct skl_dev *skl)
663 ret = skl_tplg_get_pipe_config(skl, mconfig);
671 ret = skl_create_pipeline(skl, mconfig->pipe);
676 ret = skl_tplg_init_pipe_modules(skl, s_pipe);
689 ret = skl_bind_modules(skl, src_module, dst_module);
701 if (list_empty(&skl->bind_list))
704 list_for_each_entry(modules, &skl->bind_list, node) {
707 skl_bind_modules(skl, modules->src,
715 static int skl_fill_sink_instance_id(struct skl_dev *skl, u32 *params,
726 pvt_id = skl_get_pvt_instance_id_map(skl, inst->mod_id,
746 struct skl_module_cfg *mcfg, struct skl_dev *skl)
774 ret = skl_set_module_params(skl, sp_cfg->caps,
792 skl_fill_sink_instance_id(skl, params, bc->max,
795 ret = skl_set_module_params(skl, params,
808 static int skl_get_module_id(struct skl_dev *skl, guid_t *uuid)
812 list_for_each_entry(module, &skl->uuid_list, list) {
820 static int skl_tplg_find_moduleid_from_uuid(struct skl_dev *skl,
826 struct hdac_bus *bus = skl_to_bus(skl);
840 module_id = skl_get_module_id(skl,
864 void skl_tplg_add_moduleid_in_bind_params(struct skl_dev *skl,
881 (skl_tplg_find_moduleid_from_uuid(skl,
883 dev_err(skl->dev,
888 static int skl_tplg_module_add_deferred_bind(struct skl_dev *skl,
904 if (!list_empty(&skl->bind_list)) {
905 list_for_each_entry(modules, &skl->bind_list, node) {
918 list_add(&m_list->node, &skl->bind_list);
926 struct skl_dev *skl,
939 dev_dbg(skl->dev,
941 dev_dbg(skl->dev,
946 if (!is_skl_dsp_widget_type(p->sink, skl->dev))
947 return skl_tplg_bind_sinks(p->sink, skl, src_w, src_mconfig);
955 is_skl_dsp_widget_type(p->sink, skl->dev)) {
973 ret = skl_tplg_module_add_deferred_bind(skl,
987 ret = skl_bind_modules(skl, src_mconfig, sink_mconfig);
993 src_mconfig, skl);
995 sink_mconfig, skl);
1001 ret = skl_run_pipe(skl,
1010 return skl_tplg_bind_sinks(next_sink, skl, src_w, src_mconfig);
1026 struct skl_dev *skl)
1038 ret = skl_tplg_bind_sinks(w, skl, w, src_mconfig);
1044 return skl_run_pipe(skl, src_mconfig->pipe);
1050 struct snd_soc_dapm_widget *w, struct skl_dev *skl)
1060 dev_dbg(skl->dev, "sink widget=%s\n", w->name);
1061 dev_dbg(skl->dev, "src widget=%s\n", p->source->name);
1069 is_skl_dsp_widget_type(p->source, skl->dev)) {
1075 return skl_get_src_dsp_widget(src_w, skl);
1090 struct skl_dev *skl)
1105 source = skl_get_src_dsp_widget(w, skl);
1120 ret = skl_bind_modules(skl, src_mconfig, sink_mconfig);
1125 skl_tplg_set_module_bind_params(source, src_mconfig, skl);
1126 skl_tplg_set_module_bind_params(sink, sink_mconfig, skl);
1129 ret = skl_run_pipe(skl, sink_mconfig->pipe);
1142 struct skl_dev *skl)
1150 ret = skl_stop_pipe(skl, sink_mconfig->pipe);
1160 ret = skl_unbind_modules(skl,
1175 struct skl_dev *skl)
1187 if (list_empty(&skl->bind_list))
1192 list_for_each_entry_safe(modules, tmp, &skl->bind_list, node) {
1198 skl_unbind_modules(skl, modules->src,
1223 skl_unbind_modules(skl, src_module, dst_module);
1227 skl_delete_pipe(skl, mconfig->pipe);
1234 return skl_tplg_unload_pipe_modules(skl, s_pipe);
1243 struct skl_dev *skl)
1251 ret = skl_stop_pipe(skl, src_mconfig->pipe);
1264 ret = skl_unbind_modules(skl, src_mconfig,
1282 struct skl_dev *skl = get_skl_ctx(dapm->dev);
1286 return skl_tplg_mixer_dapm_pre_pmu_event(w, skl);
1289 return skl_tplg_mixer_dapm_post_pmu_event(w, skl);
1292 return skl_tplg_mixer_dapm_pre_pmd_event(w, skl);
1295 return skl_tplg_mixer_dapm_post_pmd_event(w, skl);
1312 struct skl_dev *skl = get_skl_ctx(dapm->dev);
1316 return skl_tplg_pga_dapm_pre_pmu_event(w, skl);
1319 return skl_tplg_pga_dapm_post_pmd_event(w, skl);
1332 struct skl_dev *skl = bus_to_skl(bus);
1346 list_for_each_entry(ppl, &skl->ppl_list, node) {
1395 struct skl_dev *skl = get_skl_ctx(w->dapm->dev);
1398 skl_get_module_params(skl, (u32 *)bc->params,
1430 struct skl_dev *skl = get_skl_ctx(w->dapm->dev);
1441 return skl_set_module_params(skl,
1603 struct skl_dev *skl = get_skl_ctx(dev);
1612 if (skl->nr_modules)
1800 struct skl_dev *skl = get_skl_ctx(dai->dev);
1811 ret = skl_tplg_get_pipe_config(skl, mconfig);
1815 dev_dbg(skl->dev, "%s using pipe config: %d\n", __func__, pipe->cur_config_idx);
1822 cfg = intel_nhlt_get_endpoint_blob(dai->dev, skl->nhlt,
2033 struct skl_module_cfg *mconfig, struct skl_dev *skl,
2040 list_for_each_entry(ppl, &skl->ppl_list, node) {
2064 list_add(&ppl->node, &skl->ppl_list);
2341 struct skl_dev *skl, struct skl_module_cfg *mconfig)
2357 if (skl->nr_modules == 0) {
2453 mconfig, skl, tkn_elem);
2598 char *pvt_data, struct skl_dev *skl,
2617 dev_warn(dev, "no string tokens expected for skl tplg\n");
2626 ret = skl_tplg_get_token(dev, array->value, skl,
2645 skl, mconfig);
2694 struct skl_module_cfg *mconfig, struct skl_dev *skl,
2701 list_for_each_entry(ppl, &skl->ppl_list, node) {
2729 list_add(&ppl->node, &skl->ppl_list);
2771 struct skl_dev *skl, struct device *dev,
2804 ret = skl_tplg_add_pipe_v4(dev, mconfig, skl, &dfw->pipe);
2872 struct skl_dev *skl, struct device *dev,
2885 return skl_tplg_get_pvt_data_v4(tplg_w, skl, dev, mconfig);
2921 skl, mconfig, block_size);
2960 void skl_cleanup_resources(struct skl_dev *skl)
2962 struct snd_soc_component *soc_component = skl->component;
2974 if (is_skl_dsp_widget_type(w, skl->dev) && w->priv != NULL)
2978 skl_clear_module_cnt(skl->dsp);
2994 struct skl_dev *skl = bus_to_skl(bus);
3005 if (skl->nr_modules == 0) {
3024 ret = skl_tplg_get_pvt_data(tplg_w, skl, bus->dev, mconfig);
3028 skl_debug_init_module(skl->debugfs, w, mconfig);
3150 struct skl_dev *skl)
3157 if (ref_count > skl->lib_count - 1) {
3162 strncpy(skl->lib_info[ref_count].name,
3164 ARRAY_SIZE(skl->lib_info[ref_count].name));
3179 struct skl_dev *skl)
3186 ret = skl_tplg_fill_str_mfest_tkn(dev, str_elem, skl);
3286 struct skl_dev *skl)
3298 if (skl->modules) {
3299 mod = skl->modules[mod_idx];
3306 skl->lib_count = tkn_elem->value;
3310 skl->nr_modules = tkn_elem->value;
3311 skl->modules = devm_kcalloc(dev, skl->nr_modules,
3312 sizeof(*skl->modules), GFP_KERNEL);
3313 if (!skl->modules)
3316 for (i = 0; i < skl->nr_modules; i++) {
3317 skl->modules[i] = devm_kzalloc(dev,
3319 if (!skl->modules[i])
3340 size = struct_size(skl->cfg.astate_cfg, astate_table,
3342 skl->cfg.astate_cfg = devm_kzalloc(dev, size, GFP_KERNEL);
3343 if (!skl->cfg.astate_cfg)
3346 astate_table = skl->cfg.astate_cfg->astate_table;
3347 count = skl->cfg.astate_cfg->count = tkn_elem->value;
3457 char *pvt_data, struct skl_dev *skl,
3474 ret = skl_tplg_get_str_tkn(dev, array, skl);
3490 if (uuid_index >= skl->nr_modules) {
3494 import_guid(&skl->modules[uuid_index++]->uuid,
3508 tkn_elem, skl);
3527 struct device *dev, struct skl_dev *skl)
3566 ret = skl_tplg_get_manifest_tkn(dev, data, skl,
3586 struct skl_dev *skl = bus_to_skl(bus);
3592 skl_tplg_get_manifest_data(manifest, bus->dev, skl);
3594 if (skl->lib_count > SKL_MAX_LIB) {
3596 skl->lib_count);
3685 static void skl_tplg_set_pipe_type(struct skl_dev *skl, struct skl_pipe *pipe)
3715 struct skl_dev *skl = bus_to_skl(bus);
3718 ret = request_firmware(&fw, skl->tplg_name, bus->dev);
3723 skl->mach->drv_name);
3725 skl->tplg_name, ret, alt_tplg_name);
3756 list_for_each_entry(ppl, &skl->ppl_list, node)
3757 skl_tplg_set_pipe_type(skl, ppl->pipe);
3766 struct skl_dev *skl = bus_to_skl(bus);
3769 list_for_each_entry_safe(ppl, tmp, &skl->ppl_list, node)