Lines Matching refs:sdev

34 static void hda_ssp_set_cbp_cfp(struct snd_sof_dev *sdev)  in hda_ssp_set_cbp_cfp()  argument
36 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_ssp_set_cbp_cfp()
42 snd_sof_dsp_update_bits_unlocked(sdev, HDA_DSP_BAR, in hda_ssp_set_cbp_cfp()
56 struct snd_sof_dev *sdev = dev_get_drvdata(dev); in hda_cl_prepare() local
61 hext_stream = hda_dsp_stream_get(sdev, direction, 0); in hda_cl_prepare()
64 dev_err(sdev->dev, "error: no stream available\n"); in hda_cl_prepare()
79 dev_err(sdev->dev, "%s: memory alloc failed: %d\n", in hda_cl_prepare()
90 ret = hda_dsp_iccmax_stream_hw_params(sdev, hext_stream, dmab, NULL); in hda_cl_prepare()
92 dev_err(sdev->dev, "error: iccmax stream prepare failed: %d\n", ret); in hda_cl_prepare()
96 ret = hda_dsp_stream_hw_params(sdev, hext_stream, dmab, NULL); in hda_cl_prepare()
98 dev_err(sdev->dev, "error: hdac prepare failed: %d\n", ret); in hda_cl_prepare()
101 hda_dsp_stream_spib_config(sdev, hext_stream, HDA_DSP_SPIB_ENABLE, size); in hda_cl_prepare()
113 hda_dsp_stream_put(sdev, direction, hstream->stream_tag); in hda_cl_prepare()
123 int cl_dsp_init(struct snd_sof_dev *sdev, int stream_tag, bool imr_boot) in cl_dsp_init() argument
125 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in cl_dsp_init()
134 ret = hda_dsp_core_power_up(sdev, chip->host_managed_cores_mask); in cl_dsp_init()
137 dev_err(sdev->dev, "error: dsp core 0/1 power up failed\n"); in cl_dsp_init()
141 hda_ssp_set_cbp_cfp(sdev); in cl_dsp_init()
148 snd_sof_dsp_write(sdev, HDA_DSP_BAR, chip->ipc_req, ipc_hdr); in cl_dsp_init()
151 ret = hda_dsp_core_run(sdev, chip->init_core_mask); in cl_dsp_init()
154 dev_err(sdev->dev, in cl_dsp_init()
161 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, in cl_dsp_init()
170 dev_err(sdev->dev, in cl_dsp_init()
177 snd_sof_dsp_update_bits_forced(sdev, HDA_DSP_BAR, in cl_dsp_init()
183 ret = hda_dsp_core_reset_power_down(sdev, chip->host_managed_cores_mask & in cl_dsp_init()
187 dev_err(sdev->dev, in cl_dsp_init()
193 hda_dsp_ipc_int_enable(sdev); in cl_dsp_init()
205 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, in cl_dsp_init()
213 sdev->enabled_cores_mask |= chip->init_core_mask; in cl_dsp_init()
214 mask = sdev->enabled_cores_mask; in cl_dsp_init()
216 sdev->dsp_core_ref_count[j]++; in cl_dsp_init()
221 dev_err(sdev->dev, in cl_dsp_init()
234 snd_sof_dsp_dbg_dump(sdev, dump_msg, flags); in cl_dsp_init()
235 hda_dsp_core_reset_power_down(sdev, chip->host_managed_cores_mask); in cl_dsp_init()
244 struct snd_sof_dev *sdev = dev_get_drvdata(dev); in hda_cl_trigger() local
256 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL, in hda_cl_trigger()
260 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, in hda_cl_trigger()
270 return hda_dsp_stream_trigger(sdev, hext_stream, cmd); in hda_cl_trigger()
278 struct snd_sof_dev *sdev = dev_get_drvdata(dev); in hda_cl_cleanup() local
284 ret = hda_dsp_stream_spib_config(sdev, hext_stream, HDA_DSP_SPIB_DISABLE, 0); in hda_cl_cleanup()
286 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, sd_offset, in hda_cl_cleanup()
289 hda_dsp_stream_put(sdev, hstream->direction, hstream->stream_tag); in hda_cl_cleanup()
294 snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, in hda_cl_cleanup()
296 snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, in hda_cl_cleanup()
299 snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, sd_offset, 0); in hda_cl_cleanup()
315 int hda_cl_copy_fw(struct snd_sof_dev *sdev, struct hdac_ext_stream *hext_stream) in hda_cl_copy_fw() argument
317 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_cl_copy_fw()
322 dev_dbg(sdev->dev, "Code loader DMA starting\n"); in hda_cl_copy_fw()
324 ret = hda_cl_trigger(sdev->dev, hext_stream, SNDRV_PCM_TRIGGER_START); in hda_cl_copy_fw()
326 dev_err(sdev->dev, "error: DMA trigger start failed\n"); in hda_cl_copy_fw()
330 dev_dbg(sdev->dev, "waiting for FW_ENTERED status\n"); in hda_cl_copy_fw()
332 status = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, in hda_cl_copy_fw()
344 dev_err(sdev->dev, in hda_cl_copy_fw()
348 dev_dbg(sdev->dev, "Code loader FW_ENTERED status\n"); in hda_cl_copy_fw()
351 ret = hda_cl_trigger(sdev->dev, hext_stream, SNDRV_PCM_TRIGGER_STOP); in hda_cl_copy_fw()
353 dev_err(sdev->dev, "error: DMA trigger stop failed\n"); in hda_cl_copy_fw()
357 dev_dbg(sdev->dev, "Code loader DMA stopped\n"); in hda_cl_copy_fw()
363 int hda_dsp_cl_boot_firmware_iccmax(struct snd_sof_dev *sdev) in hda_dsp_cl_boot_firmware_iccmax() argument
365 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_cl_boot_firmware_iccmax()
371 original_gb = snd_sof_dsp_read8(sdev, HDA_DSP_HDA_BAR, HDA_VS_INTEL_LTRP) & in hda_dsp_cl_boot_firmware_iccmax()
378 iccmax_stream = hda_cl_prepare(sdev->dev, HDA_CL_STREAM_FORMAT, PAGE_SIZE, in hda_dsp_cl_boot_firmware_iccmax()
382 dev_err(sdev->dev, "error: dma prepare for ICCMAX stream failed\n"); in hda_dsp_cl_boot_firmware_iccmax()
386 ret = hda_dsp_cl_boot_firmware(sdev); in hda_dsp_cl_boot_firmware_iccmax()
392 ret1 = hda_cl_cleanup(sdev->dev, &hda->iccmax_dmab, in hda_dsp_cl_boot_firmware_iccmax()
395 dev_err(sdev->dev, "error: ICCMAX stream cleanup failed\n"); in hda_dsp_cl_boot_firmware_iccmax()
403 snd_sof_dsp_update8(sdev, HDA_DSP_HDA_BAR, HDA_VS_INTEL_LTRP, in hda_dsp_cl_boot_firmware_iccmax()
410 static int hda_dsp_boot_imr(struct snd_sof_dev *sdev) in hda_dsp_boot_imr() argument
415 chip_info = get_chip_info(sdev->pdata); in hda_dsp_boot_imr()
417 ret = chip_info->cl_init(sdev, 0, true); in hda_dsp_boot_imr()
422 hda_sdw_process_wakeen(sdev); in hda_dsp_boot_imr()
427 int hda_dsp_cl_boot_firmware(struct snd_sof_dev *sdev) in hda_dsp_cl_boot_firmware() argument
429 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_cl_boot_firmware()
430 struct snd_sof_pdata *plat_data = sdev->pdata; in hda_dsp_cl_boot_firmware()
437 if (hda->imrboot_supported && !sdev->first_boot && !hda->skip_imr_boot) { in hda_dsp_cl_boot_firmware()
438 dev_dbg(sdev->dev, "IMR restore supported, booting from IMR directly\n"); in hda_dsp_cl_boot_firmware()
440 ret = hda_dsp_boot_imr(sdev); in hda_dsp_cl_boot_firmware()
446 dev_warn(sdev->dev, "IMR restore failed, trying to cold boot\n"); in hda_dsp_cl_boot_firmware()
453 if (sdev->basefw.fw->size <= sdev->basefw.payload_offset) { in hda_dsp_cl_boot_firmware()
454 dev_err(sdev->dev, "error: firmware size must be greater than firmware offset\n"); in hda_dsp_cl_boot_firmware()
459 init_waitqueue_head(&sdev->boot_wait); in hda_dsp_cl_boot_firmware()
462 stripped_firmware.size = sdev->basefw.fw->size - sdev->basefw.payload_offset; in hda_dsp_cl_boot_firmware()
463 hext_stream = hda_cl_prepare(sdev->dev, HDA_CL_STREAM_FORMAT, in hda_dsp_cl_boot_firmware()
468 dev_err(sdev->dev, "error: dma prepare for fw loading failed\n"); in hda_dsp_cl_boot_firmware()
479 stripped_firmware.data = sdev->basefw.fw->data + sdev->basefw.payload_offset; in hda_dsp_cl_boot_firmware()
486 dev_dbg(sdev->dev, in hda_dsp_cl_boot_firmware()
491 ret = chip_info->cl_init(sdev, hext_stream->hstream.stream_tag, false); in hda_dsp_cl_boot_firmware()
501 dev_err(sdev->dev, "error: dsp init failed after %d attempts with err: %d\n", in hda_dsp_cl_boot_firmware()
521 if (!sdev->first_boot) in hda_dsp_cl_boot_firmware()
522 hda_sdw_process_wakeen(sdev); in hda_dsp_cl_boot_firmware()
532 ret = hda_cl_copy_fw(sdev, hext_stream); in hda_dsp_cl_boot_firmware()
534 dev_dbg(sdev->dev, "Firmware download successful, booting...\n"); in hda_dsp_cl_boot_firmware()
537 snd_sof_dsp_dbg_dump(sdev, "Firmware download failed", in hda_dsp_cl_boot_firmware()
548 ret1 = hda_cl_cleanup(sdev->dev, &hda->cl_dmab, in hda_dsp_cl_boot_firmware()
551 dev_err(sdev->dev, "error: Code loader DSP cleanup failed\n"); in hda_dsp_cl_boot_firmware()
566 hda_dsp_ctrl_ppcap_enable(sdev, false); in hda_dsp_cl_boot_firmware()
572 int hda_dsp_ipc4_load_library(struct snd_sof_dev *sdev, in hda_dsp_ipc4_load_library() argument
575 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_ipc4_load_library()
576 struct sof_ipc4_fw_data *ipc4_data = sdev->private; in hda_dsp_ipc4_load_library()
601 hext_stream = hda_cl_prepare(sdev->dev, HDA_CL_STREAM_FORMAT, in hda_dsp_ipc4_load_library()
606 dev_err(sdev->dev, "%s: DMA prepare failed\n", __func__); in hda_dsp_ipc4_load_library()
624 ret = sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0); in hda_dsp_ipc4_load_library()
634 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_HDA_BAR, in hda_dsp_ipc4_load_library()
642 dev_warn(sdev->dev, in hda_dsp_ipc4_load_library()
648 ret = hda_cl_trigger(sdev->dev, hext_stream, SNDRV_PCM_TRIGGER_START); in hda_dsp_ipc4_load_library()
650 dev_err(sdev->dev, "%s: DMA trigger start failed\n", __func__); in hda_dsp_ipc4_load_library()
662 ret = sof_ipc_tx_message_no_reply(sdev->ipc, &msg, 0); in hda_dsp_ipc4_load_library()
665 ret1 = hda_cl_trigger(sdev->dev, hext_stream, SNDRV_PCM_TRIGGER_STOP); in hda_dsp_ipc4_load_library()
667 dev_err(sdev->dev, "%s: DMA trigger stop failed\n", __func__); in hda_dsp_ipc4_load_library()
674 ret1 = hda_cl_cleanup(sdev->dev, &hda->cl_dmab, persistent_cl_buffer, in hda_dsp_ipc4_load_library()
677 dev_err(sdev->dev, "%s: Code loader DSP cleanup failed\n", __func__); in hda_dsp_ipc4_load_library()
688 int hda_dsp_ext_man_get_cavs_config_data(struct snd_sof_dev *sdev, in hda_dsp_ext_man_get_cavs_config_data() argument
693 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_ext_man_get_cavs_config_data()
700 dev_err(sdev->dev, "cavs config data is inconsistent: %d\n", elem_num); in hda_dsp_ext_man_get_cavs_config_data()
711 dev_dbg(sdev->dev, "FW clock config: %s\n", in hda_dsp_ext_man_get_cavs_config_data()
719 dev_info(sdev->dev, "unsupported token type: %d\n", in hda_dsp_ext_man_get_cavs_config_data()