Lines Matching refs:sdev
115 static int cl_skl_cldma_setup_bdle(struct snd_sof_dev *sdev, in cl_skl_cldma_setup_bdle() argument
135 static void cl_skl_cldma_stream_run(struct snd_sof_dev *sdev, bool enable) in cl_skl_cldma_stream_run() argument
142 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_run()
151 val = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_run()
161 dev_err(sdev->dev, "%s: failed to set Run bit=%d enable=%d\n", in cl_skl_cldma_stream_run()
165 static void cl_skl_cldma_stream_clear(struct snd_sof_dev *sdev) in cl_skl_cldma_stream_clear() argument
170 cl_skl_cldma_stream_run(sdev, 0); in cl_skl_cldma_stream_clear()
175 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
178 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
182 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
184 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
188 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
191 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
195 static void cl_skl_cldma_setup_spb(struct snd_sof_dev *sdev, in cl_skl_cldma_setup_spb() argument
201 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_spb()
206 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_spb()
210 static void cl_skl_cldma_set_intr(struct snd_sof_dev *sdev, bool enable) in cl_skl_cldma_set_intr() argument
214 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIC, in cl_skl_cldma_set_intr()
218 static void cl_skl_cldma_cleanup_spb(struct snd_sof_dev *sdev) in cl_skl_cldma_cleanup_spb() argument
222 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_cleanup_spb()
227 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_cleanup_spb()
231 static void cl_skl_cldma_setup_controller(struct snd_sof_dev *sdev, in cl_skl_cldma_setup_controller() argument
238 cl_skl_cldma_stream_clear(sdev); in cl_skl_cldma_setup_controller()
241 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
244 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
249 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
252 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
258 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
261 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
267 static int cl_stream_prepare_skl(struct snd_sof_dev *sdev, in cl_stream_prepare_skl() argument
277 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, sdev->dev, bufsize, dmab); in cl_stream_prepare_skl()
279 dev_err(sdev->dev, "%s: failed to alloc fw buffer: %x\n", __func__, ret); in cl_stream_prepare_skl()
283 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, sdev->dev, bufsize, dmab_bdl); in cl_stream_prepare_skl()
285 dev_err(sdev->dev, "%s: failed to alloc blde: %x\n", __func__, ret); in cl_stream_prepare_skl()
291 frags = cl_skl_cldma_setup_bdle(sdev, dmab, &bdl, bufsize, 1); in cl_stream_prepare_skl()
292 cl_skl_cldma_setup_controller(sdev, dmab_bdl, bufsize, frags); in cl_stream_prepare_skl()
297 static void cl_cleanup_skl(struct snd_sof_dev *sdev, in cl_cleanup_skl() argument
301 cl_skl_cldma_cleanup_spb(sdev); in cl_cleanup_skl()
302 cl_skl_cldma_stream_clear(sdev); in cl_cleanup_skl()
307 static int cl_dsp_init_skl(struct snd_sof_dev *sdev, in cl_dsp_init_skl() argument
311 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in cl_dsp_init_skl()
320 if (hda_dsp_core_is_enabled(sdev, chip->init_core_mask)) { in cl_dsp_init_skl()
322 ret = hda_dsp_core_stall_reset(sdev, chip->init_core_mask); in cl_dsp_init_skl()
326 ret = hda_dsp_core_run(sdev, chip->init_core_mask); in cl_dsp_init_skl()
328 dev_err(sdev->dev, "%s: dsp core start failed %d\n", __func__, ret); in cl_dsp_init_skl()
335 ret = hda_dsp_core_reset_power_down(sdev, chip->init_core_mask); in cl_dsp_init_skl()
337 dev_err(sdev->dev, "%s: dsp core0 disable fail: %d\n", __func__, ret); in cl_dsp_init_skl()
340 ret = hda_dsp_enable_core(sdev, chip->init_core_mask); in cl_dsp_init_skl()
342 dev_err(sdev->dev, "%s: dsp core0 enable fail: %d\n", __func__, ret); in cl_dsp_init_skl()
348 ret = cl_stream_prepare_skl(sdev, dmab, dmab_bdl); in cl_dsp_init_skl()
350 dev_err(sdev->dev, "%s: dma prepare fw loading err: %x\n", __func__, ret); in cl_dsp_init_skl()
355 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIC, in cl_dsp_init_skl()
359 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, chip->ipc_ctl, in cl_dsp_init_skl()
364 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, chip->ipc_ctl, in cl_dsp_init_skl()
369 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, in cl_dsp_init_skl()
384 snd_sof_dsp_dbg_dump(sdev, "Boot failed\n", flags); in cl_dsp_init_skl()
385 cl_cleanup_skl(sdev, dmab, dmab_bdl); in cl_dsp_init_skl()
386 hda_dsp_core_reset_power_down(sdev, chip->init_core_mask); in cl_dsp_init_skl()
390 static void cl_skl_cldma_fill_buffer(struct snd_sof_dev *sdev, in cl_skl_cldma_fill_buffer() argument
397 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in cl_skl_cldma_fill_buffer()
409 cl_skl_cldma_set_intr(sdev, true); in cl_skl_cldma_fill_buffer()
412 cl_skl_cldma_setup_spb(sdev, size, true); in cl_skl_cldma_fill_buffer()
415 cl_skl_cldma_stream_run(sdev, true); in cl_skl_cldma_fill_buffer()
418 static int cl_skl_cldma_wait_interruptible(struct snd_sof_dev *sdev, in cl_skl_cldma_wait_interruptible() argument
421 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in cl_skl_cldma_wait_interruptible()
432 dev_err(sdev->dev, "cldma copy timeout\n"); in cl_skl_cldma_wait_interruptible()
433 dev_err(sdev->dev, "ROM code=%#x: FW status=%#x\n", in cl_skl_cldma_wait_interruptible()
434 snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_ROM_ERROR), in cl_skl_cldma_wait_interruptible()
435 snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->rom_status_reg)); in cl_skl_cldma_wait_interruptible()
440 cl_dma_intr_status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in cl_skl_cldma_wait_interruptible()
444 dev_err(sdev->dev, "cldma copy failed\n"); in cl_skl_cldma_wait_interruptible()
448 dev_dbg(sdev->dev, "cldma buffer copy complete\n"); in cl_skl_cldma_wait_interruptible()
453 cl_skl_cldma_copy_to_buf(struct snd_sof_dev *sdev, in cl_skl_cldma_copy_to_buf() argument
467 dev_dbg(sdev->dev, "cldma copy %#x bytes\n", bufsize); in cl_skl_cldma_copy_to_buf()
469 cl_skl_cldma_fill_buffer(sdev, dmab, bufsize, bufsize, curr_pos, true); in cl_skl_cldma_copy_to_buf()
471 ret = cl_skl_cldma_wait_interruptible(sdev, false); in cl_skl_cldma_copy_to_buf()
473 dev_err(sdev->dev, "%s: fw failed to load. %#x bytes remaining\n", in cl_skl_cldma_copy_to_buf()
481 dev_dbg(sdev->dev, "cldma copy %#x bytes\n", bytes_left); in cl_skl_cldma_copy_to_buf()
483 cl_skl_cldma_set_intr(sdev, false); in cl_skl_cldma_copy_to_buf()
484 cl_skl_cldma_fill_buffer(sdev, dmab, bufsize, bytes_left, curr_pos, false); in cl_skl_cldma_copy_to_buf()
492 static int cl_copy_fw_skl(struct snd_sof_dev *sdev, in cl_copy_fw_skl() argument
496 const struct firmware *fw = sdev->basefw.fw; in cl_copy_fw_skl()
501 stripped_firmware.data = fw->data + sdev->basefw.payload_offset; in cl_copy_fw_skl()
502 stripped_firmware.size = fw->size - sdev->basefw.payload_offset; in cl_copy_fw_skl()
504 dev_dbg(sdev->dev, "firmware size: %#zx buffer size %#x\n", fw->size, bufsize); in cl_copy_fw_skl()
506 ret = cl_skl_cldma_copy_to_buf(sdev, dmab, stripped_firmware.data, in cl_copy_fw_skl()
509 dev_err(sdev->dev, "%s: fw copy failed %d\n", __func__, ret); in cl_copy_fw_skl()
514 int hda_dsp_cl_boot_firmware_skl(struct snd_sof_dev *sdev) in hda_dsp_cl_boot_firmware_skl() argument
516 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_cl_boot_firmware_skl()
524 ret = cl_dsp_init_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
528 ret = cl_dsp_init_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
530 dev_err(sdev->dev, "Error code=%#x: FW status=%#x\n", in hda_dsp_cl_boot_firmware_skl()
531 snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_ROM_ERROR), in hda_dsp_cl_boot_firmware_skl()
532 snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->rom_status_reg)); in hda_dsp_cl_boot_firmware_skl()
533 dev_err(sdev->dev, "Core En/ROM load fail:%d\n", ret); in hda_dsp_cl_boot_firmware_skl()
538 dev_dbg(sdev->dev, "ROM init successful\n"); in hda_dsp_cl_boot_firmware_skl()
543 ret = cl_copy_fw_skl(sdev, &dmab); in hda_dsp_cl_boot_firmware_skl()
545 dev_err(sdev->dev, "%s: load firmware failed : %d\n", __func__, ret); in hda_dsp_cl_boot_firmware_skl()
549 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, in hda_dsp_cl_boot_firmware_skl()
556 dev_dbg(sdev->dev, "Firmware download successful, booting...\n"); in hda_dsp_cl_boot_firmware_skl()
558 cl_skl_cldma_stream_run(sdev, false); in hda_dsp_cl_boot_firmware_skl()
559 cl_cleanup_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
569 snd_sof_dsp_dbg_dump(sdev, "Boot failed\n", flags); in hda_dsp_cl_boot_firmware_skl()
572 hda_dsp_core_reset_power_down(sdev, chip->init_core_mask); in hda_dsp_cl_boot_firmware_skl()
573 cl_skl_cldma_stream_run(sdev, false); in hda_dsp_cl_boot_firmware_skl()
574 cl_cleanup_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
576 dev_err(sdev->dev, "%s: load fw failed err: %d\n", __func__, ret); in hda_dsp_cl_boot_firmware_skl()