Lines Matching refs:sdev
116 static int cl_skl_cldma_setup_bdle(struct snd_sof_dev *sdev, in cl_skl_cldma_setup_bdle() argument
136 static void cl_skl_cldma_stream_run(struct snd_sof_dev *sdev, bool enable) in cl_skl_cldma_stream_run() argument
143 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_run()
152 val = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_run()
162 dev_err(sdev->dev, "%s: failed to set Run bit=%d enable=%d\n", in cl_skl_cldma_stream_run()
166 static void cl_skl_cldma_stream_clear(struct snd_sof_dev *sdev) in cl_skl_cldma_stream_clear() argument
171 cl_skl_cldma_stream_run(sdev, 0); in cl_skl_cldma_stream_clear()
176 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
179 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
183 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
185 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
189 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
192 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_stream_clear()
196 static void cl_skl_cldma_setup_spb(struct snd_sof_dev *sdev, in cl_skl_cldma_setup_spb() argument
202 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_spb()
207 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_spb()
211 static void cl_skl_cldma_set_intr(struct snd_sof_dev *sdev, bool enable) in cl_skl_cldma_set_intr() argument
215 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIC, in cl_skl_cldma_set_intr()
219 static void cl_skl_cldma_cleanup_spb(struct snd_sof_dev *sdev) in cl_skl_cldma_cleanup_spb() argument
223 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_cleanup_spb()
228 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_cleanup_spb()
232 static void cl_skl_cldma_setup_controller(struct snd_sof_dev *sdev, in cl_skl_cldma_setup_controller() argument
239 cl_skl_cldma_stream_clear(sdev); in cl_skl_cldma_setup_controller()
242 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
245 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
250 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
253 snd_sof_dsp_write(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
259 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
262 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, in cl_skl_cldma_setup_controller()
268 static int cl_stream_prepare_skl(struct snd_sof_dev *sdev, in cl_stream_prepare_skl() argument
278 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, sdev->dev, bufsize, dmab); in cl_stream_prepare_skl()
280 dev_err(sdev->dev, "%s: failed to alloc fw buffer: %x\n", __func__, ret); in cl_stream_prepare_skl()
284 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, sdev->dev, bufsize, dmab_bdl); in cl_stream_prepare_skl()
286 dev_err(sdev->dev, "%s: failed to alloc blde: %x\n", __func__, ret); in cl_stream_prepare_skl()
292 frags = cl_skl_cldma_setup_bdle(sdev, dmab, &bdl, bufsize, 1); in cl_stream_prepare_skl()
293 cl_skl_cldma_setup_controller(sdev, dmab_bdl, bufsize, frags); in cl_stream_prepare_skl()
298 static void cl_cleanup_skl(struct snd_sof_dev *sdev, in cl_cleanup_skl() argument
302 cl_skl_cldma_cleanup_spb(sdev); in cl_cleanup_skl()
303 cl_skl_cldma_stream_clear(sdev); in cl_cleanup_skl()
308 static int cl_dsp_init_skl(struct snd_sof_dev *sdev, in cl_dsp_init_skl() argument
312 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in cl_dsp_init_skl()
321 if (hda_dsp_core_is_enabled(sdev, chip->init_core_mask)) { in cl_dsp_init_skl()
323 ret = hda_dsp_core_stall_reset(sdev, chip->init_core_mask); in cl_dsp_init_skl()
327 ret = hda_dsp_core_run(sdev, chip->init_core_mask); in cl_dsp_init_skl()
329 dev_err(sdev->dev, "%s: dsp core start failed %d\n", __func__, ret); in cl_dsp_init_skl()
336 ret = hda_dsp_core_reset_power_down(sdev, chip->init_core_mask); in cl_dsp_init_skl()
338 dev_err(sdev->dev, "%s: dsp core0 disable fail: %d\n", __func__, ret); in cl_dsp_init_skl()
341 ret = hda_dsp_enable_core(sdev, chip->init_core_mask); in cl_dsp_init_skl()
343 dev_err(sdev->dev, "%s: dsp core0 enable fail: %d\n", __func__, ret); in cl_dsp_init_skl()
349 ret = cl_stream_prepare_skl(sdev, dmab, dmab_bdl); in cl_dsp_init_skl()
351 dev_err(sdev->dev, "%s: dma prepare fw loading err: %x\n", __func__, ret); in cl_dsp_init_skl()
356 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIC, in cl_dsp_init_skl()
360 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, chip->ipc_ctl, in cl_dsp_init_skl()
365 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, chip->ipc_ctl, in cl_dsp_init_skl()
370 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, in cl_dsp_init_skl()
385 snd_sof_dsp_dbg_dump(sdev, "Boot failed\n", flags); in cl_dsp_init_skl()
386 cl_cleanup_skl(sdev, dmab, dmab_bdl); in cl_dsp_init_skl()
387 hda_dsp_core_reset_power_down(sdev, chip->init_core_mask); in cl_dsp_init_skl()
391 static void cl_skl_cldma_fill_buffer(struct snd_sof_dev *sdev, in cl_skl_cldma_fill_buffer() argument
398 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in cl_skl_cldma_fill_buffer()
410 cl_skl_cldma_set_intr(sdev, true); in cl_skl_cldma_fill_buffer()
413 cl_skl_cldma_setup_spb(sdev, size, true); in cl_skl_cldma_fill_buffer()
416 cl_skl_cldma_stream_run(sdev, true); in cl_skl_cldma_fill_buffer()
419 static int cl_skl_cldma_wait_interruptible(struct snd_sof_dev *sdev, in cl_skl_cldma_wait_interruptible() argument
422 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in cl_skl_cldma_wait_interruptible()
433 dev_err(sdev->dev, "cldma copy timeout\n"); in cl_skl_cldma_wait_interruptible()
434 dev_err(sdev->dev, "ROM code=%#x: FW status=%#x\n", in cl_skl_cldma_wait_interruptible()
435 snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_ROM_ERROR), in cl_skl_cldma_wait_interruptible()
436 snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->rom_status_reg)); in cl_skl_cldma_wait_interruptible()
441 cl_dma_intr_status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in cl_skl_cldma_wait_interruptible()
445 dev_err(sdev->dev, "cldma copy failed\n"); in cl_skl_cldma_wait_interruptible()
449 dev_dbg(sdev->dev, "cldma buffer copy complete\n"); in cl_skl_cldma_wait_interruptible()
454 cl_skl_cldma_copy_to_buf(struct snd_sof_dev *sdev, in cl_skl_cldma_copy_to_buf() argument
468 dev_dbg(sdev->dev, "cldma copy %#x bytes\n", bufsize); in cl_skl_cldma_copy_to_buf()
470 cl_skl_cldma_fill_buffer(sdev, dmab, bufsize, bufsize, curr_pos, true); in cl_skl_cldma_copy_to_buf()
472 ret = cl_skl_cldma_wait_interruptible(sdev, false); in cl_skl_cldma_copy_to_buf()
474 dev_err(sdev->dev, "%s: fw failed to load. %#x bytes remaining\n", in cl_skl_cldma_copy_to_buf()
482 dev_dbg(sdev->dev, "cldma copy %#x bytes\n", bytes_left); in cl_skl_cldma_copy_to_buf()
484 cl_skl_cldma_set_intr(sdev, false); in cl_skl_cldma_copy_to_buf()
485 cl_skl_cldma_fill_buffer(sdev, dmab, bufsize, bytes_left, curr_pos, false); in cl_skl_cldma_copy_to_buf()
493 static int cl_copy_fw_skl(struct snd_sof_dev *sdev, in cl_copy_fw_skl() argument
497 const struct firmware *fw = sdev->basefw.fw; in cl_copy_fw_skl()
502 stripped_firmware.data = fw->data + sdev->basefw.payload_offset; in cl_copy_fw_skl()
503 stripped_firmware.size = fw->size - sdev->basefw.payload_offset; in cl_copy_fw_skl()
505 dev_dbg(sdev->dev, "firmware size: %#zx buffer size %#x\n", fw->size, bufsize); in cl_copy_fw_skl()
507 ret = cl_skl_cldma_copy_to_buf(sdev, dmab, stripped_firmware.data, in cl_copy_fw_skl()
510 dev_err(sdev->dev, "%s: fw copy failed %d\n", __func__, ret); in cl_copy_fw_skl()
515 int hda_dsp_cl_boot_firmware_skl(struct snd_sof_dev *sdev) in hda_dsp_cl_boot_firmware_skl() argument
517 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_cl_boot_firmware_skl()
525 ret = cl_dsp_init_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
529 ret = cl_dsp_init_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
531 dev_err(sdev->dev, "Error code=%#x: FW status=%#x\n", in hda_dsp_cl_boot_firmware_skl()
532 snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_ROM_ERROR), in hda_dsp_cl_boot_firmware_skl()
533 snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->rom_status_reg)); in hda_dsp_cl_boot_firmware_skl()
534 dev_err(sdev->dev, "Core En/ROM load fail:%d\n", ret); in hda_dsp_cl_boot_firmware_skl()
539 dev_dbg(sdev->dev, "ROM init successful\n"); in hda_dsp_cl_boot_firmware_skl()
544 ret = cl_copy_fw_skl(sdev, &dmab); in hda_dsp_cl_boot_firmware_skl()
546 dev_err(sdev->dev, "%s: load firmware failed : %d\n", __func__, ret); in hda_dsp_cl_boot_firmware_skl()
550 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, in hda_dsp_cl_boot_firmware_skl()
557 dev_dbg(sdev->dev, "Firmware download successful, booting...\n"); in hda_dsp_cl_boot_firmware_skl()
559 cl_skl_cldma_stream_run(sdev, false); in hda_dsp_cl_boot_firmware_skl()
560 cl_cleanup_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
570 snd_sof_dsp_dbg_dump(sdev, "Boot failed\n", flags); in hda_dsp_cl_boot_firmware_skl()
573 hda_dsp_core_reset_power_down(sdev, chip->init_core_mask); in hda_dsp_cl_boot_firmware_skl()
574 cl_skl_cldma_stream_run(sdev, false); in hda_dsp_cl_boot_firmware_skl()
575 cl_cleanup_skl(sdev, &dmab, &dmab_bdl); in hda_dsp_cl_boot_firmware_skl()
577 dev_err(sdev->dev, "%s: load fw failed err: %d\n", __func__, ret); in hda_dsp_cl_boot_firmware_skl()