Lines Matching refs:sdev

17 static int get_ext_windows(struct snd_sof_dev *sdev,  in get_ext_windows()  argument
27 sdev->info_window = kmemdup(w, struct_size(w, window, w->num_windows), in get_ext_windows()
29 if (!sdev->info_window) in get_ext_windows()
36 int snd_sof_fw_parse_ext_data(struct snd_sof_dev *sdev, u32 bar, u32 offset) in snd_sof_fw_parse_ext_data() argument
47 snd_sof_dsp_block_read(sdev, bar, offset, ext_data, in snd_sof_fw_parse_ext_data()
54 snd_sof_dsp_block_read(sdev, bar, offset, in snd_sof_fw_parse_ext_data()
58 dev_dbg(sdev->dev, "found ext header type %d size 0x%x\n", in snd_sof_fw_parse_ext_data()
66 ret = get_ext_windows(sdev, ext_hdr); in snd_sof_fw_parse_ext_data()
73 dev_err(sdev->dev, "error: failed to parse ext data type %d\n", in snd_sof_fw_parse_ext_data()
80 snd_sof_dsp_block_read(sdev, bar, offset, ext_data, in snd_sof_fw_parse_ext_data()
93 static void sof_get_windows(struct snd_sof_dev *sdev) in sof_get_windows() argument
106 if (!sdev->info_window) { in sof_get_windows()
107 dev_err(sdev->dev, "error: have no window info\n"); in sof_get_windows()
111 bar = snd_sof_dsp_get_bar_index(sdev, SOF_FW_BLK_TYPE_SRAM); in sof_get_windows()
113 dev_err(sdev->dev, "error: have no bar mapping\n"); in sof_get_windows()
117 for (i = 0; i < sdev->info_window->num_windows; i++) { in sof_get_windows()
118 elem = &sdev->info_window->window[i]; in sof_get_windows()
120 window_offset = snd_sof_dsp_get_window_offset(sdev, elem->id); in sof_get_windows()
122 dev_warn(sdev->dev, "warn: no offset for window %d\n", in sof_get_windows()
131 snd_sof_debugfs_io_item(sdev, in sof_get_windows()
132 sdev->bar[bar] + in sof_get_windows()
140 snd_sof_debugfs_io_item(sdev, in sof_get_windows()
141 sdev->bar[bar] + in sof_get_windows()
147 snd_sof_debugfs_io_item(sdev, in sof_get_windows()
148 sdev->bar[bar] + in sof_get_windows()
155 snd_sof_debugfs_io_item(sdev, in sof_get_windows()
156 sdev->bar[bar] + in sof_get_windows()
165 snd_sof_debugfs_io_item(sdev, in sof_get_windows()
166 sdev->bar[bar] + in sof_get_windows()
172 snd_sof_debugfs_io_item(sdev, in sof_get_windows()
173 sdev->bar[bar] + in sof_get_windows()
180 sdev->dsp_oops_offset = window_offset + elem->offset; in sof_get_windows()
181 snd_sof_debugfs_io_item(sdev, in sof_get_windows()
182 sdev->bar[bar] + in sof_get_windows()
189 dev_err(sdev->dev, "error: get illegal window info\n"); in sof_get_windows()
195 dev_err(sdev->dev, "error: get illegal mailbox window\n"); in sof_get_windows()
199 snd_sof_dsp_mailbox_init(sdev, inbox_offset, inbox_size, in sof_get_windows()
201 sdev->stream_box.offset = stream_offset; in sof_get_windows()
202 sdev->stream_box.size = stream_size; in sof_get_windows()
204 dev_dbg(sdev->dev, " mailbox upstream 0x%x - size 0x%x\n", in sof_get_windows()
206 dev_dbg(sdev->dev, " mailbox downstream 0x%x - size 0x%x\n", in sof_get_windows()
208 dev_dbg(sdev->dev, " stream region 0x%x - size 0x%x\n", in sof_get_windows()
213 int sof_fw_ready(struct snd_sof_dev *sdev, u32 msg_id) in sof_fw_ready() argument
215 struct sof_ipc_fw_ready *fw_ready = &sdev->fw_ready; in sof_fw_ready()
221 offset = snd_sof_dsp_get_mailbox_offset(sdev); in sof_fw_ready()
223 dev_err(sdev->dev, "error: have no mailbox offset\n"); in sof_fw_ready()
227 bar = snd_sof_dsp_get_bar_index(sdev, SOF_FW_BLK_TYPE_SRAM); in sof_fw_ready()
229 dev_err(sdev->dev, "error: have no bar mapping\n"); in sof_fw_ready()
233 dev_dbg(sdev->dev, "ipc: DSP is ready 0x%8.8x offset 0x%x\n", in sof_fw_ready()
237 if (!sdev->first_boot) in sof_fw_ready()
241 sof_block_read(sdev, bar, offset, fw_ready, sizeof(*fw_ready)); in sof_fw_ready()
244 ret = snd_sof_ipc_valid(sdev); in sof_fw_ready()
249 snd_sof_fw_parse_ext_data(sdev, bar, offset + in sof_fw_ready()
252 sof_get_windows(sdev); in sof_fw_ready()
259 int snd_sof_parse_module_memcpy(struct snd_sof_dev *sdev, in snd_sof_parse_module_memcpy() argument
267 dev_dbg(sdev->dev, "new module size 0x%x blocks 0x%x type 0x%x\n", in snd_sof_parse_module_memcpy()
277 dev_err(sdev->dev, "error: not enough data remaining\n"); in snd_sof_parse_module_memcpy()
285 dev_warn(sdev->dev, in snd_sof_parse_module_memcpy()
287 dev_warn(sdev->dev, " type 0x%x offset 0x%x\n", in snd_sof_parse_module_memcpy()
300 bar = snd_sof_dsp_get_bar_index(sdev, block->type); in snd_sof_parse_module_memcpy()
302 dev_err(sdev->dev, in snd_sof_parse_module_memcpy()
309 dev_err(sdev->dev, "error: bad type 0x%x for block 0x%x\n", in snd_sof_parse_module_memcpy()
314 dev_dbg(sdev->dev, in snd_sof_parse_module_memcpy()
320 dev_err(sdev->dev, "error: invalid block size 0x%x\n", in snd_sof_parse_module_memcpy()
324 snd_sof_dsp_block_write(sdev, bar, offset, in snd_sof_parse_module_memcpy()
328 dev_err(sdev->dev, "error: not enough data remaining\n"); in snd_sof_parse_module_memcpy()
343 static int check_header(struct snd_sof_dev *sdev, const struct firmware *fw) in check_header() argument
352 dev_err(sdev->dev, "error: invalid firmware signature\n"); in check_header()
358 dev_err(sdev->dev, "error: invalid filesize mismatch got 0x%zx expected 0x%zx\n", in check_header()
363 dev_dbg(sdev->dev, "header size=0x%x modules=0x%x abi=0x%x size=%zu\n", in check_header()
370 static int load_modules(struct snd_sof_dev *sdev, const struct firmware *fw) in load_modules() argument
380 load_module = sof_ops(sdev)->load_module; in load_modules()
389 dev_err(sdev->dev, "error: fw size smaller than header size\n"); in load_modules()
396 dev_err(sdev->dev, "error: not enough data remaining\n"); in load_modules()
404 ret = load_module(sdev, module); in load_modules()
406 dev_err(sdev->dev, "error: invalid module %d\n", count); in load_modules()
411 dev_err(sdev->dev, "error: not enough data remaining\n"); in load_modules()
424 int snd_sof_load_firmware_raw(struct snd_sof_dev *sdev) in snd_sof_load_firmware_raw() argument
426 struct snd_sof_pdata *plat_data = sdev->pdata; in snd_sof_load_firmware_raw()
431 sdev->code_loading = 1; in snd_sof_load_firmware_raw()
443 ret = request_firmware(&plat_data->fw, fw_filename, sdev->dev); in snd_sof_load_firmware_raw()
446 dev_err(sdev->dev, "error: request firmware %s failed err: %d\n", in snd_sof_load_firmware_raw()
456 int snd_sof_load_firmware_memcpy(struct snd_sof_dev *sdev) in snd_sof_load_firmware_memcpy() argument
458 struct snd_sof_pdata *plat_data = sdev->pdata; in snd_sof_load_firmware_memcpy()
461 ret = snd_sof_load_firmware_raw(sdev); in snd_sof_load_firmware_memcpy()
466 ret = check_header(sdev, plat_data->fw); in snd_sof_load_firmware_memcpy()
468 dev_err(sdev->dev, "error: invalid FW header\n"); in snd_sof_load_firmware_memcpy()
473 ret = snd_sof_dsp_reset(sdev); in snd_sof_load_firmware_memcpy()
475 dev_err(sdev->dev, "error: failed to reset DSP\n"); in snd_sof_load_firmware_memcpy()
480 ret = load_modules(sdev, plat_data->fw); in snd_sof_load_firmware_memcpy()
482 dev_err(sdev->dev, "error: invalid FW modules\n"); in snd_sof_load_firmware_memcpy()
496 int snd_sof_load_firmware(struct snd_sof_dev *sdev) in snd_sof_load_firmware() argument
498 dev_dbg(sdev->dev, "loading firmware\n"); in snd_sof_load_firmware()
500 if (sof_ops(sdev)->load_firmware) in snd_sof_load_firmware()
501 return sof_ops(sdev)->load_firmware(sdev); in snd_sof_load_firmware()
506 int snd_sof_run_firmware(struct snd_sof_dev *sdev) in snd_sof_run_firmware() argument
511 init_waitqueue_head(&sdev->boot_wait); in snd_sof_run_firmware()
512 sdev->boot_complete = false; in snd_sof_run_firmware()
515 if (sdev->first_boot) { in snd_sof_run_firmware()
516 ret = snd_sof_debugfs_buf_item(sdev, &sdev->fw_version, in snd_sof_run_firmware()
517 sizeof(sdev->fw_version), in snd_sof_run_firmware()
521 dev_err(sdev->dev, "error: snd_sof_debugfs_buf_item failed\n"); in snd_sof_run_firmware()
527 ret = snd_sof_dsp_pre_fw_run(sdev); in snd_sof_run_firmware()
529 dev_err(sdev->dev, "error: failed pre fw run op\n"); in snd_sof_run_firmware()
533 dev_dbg(sdev->dev, "booting DSP firmware\n"); in snd_sof_run_firmware()
536 ret = snd_sof_dsp_run(sdev); in snd_sof_run_firmware()
538 dev_err(sdev->dev, "error: failed to reset DSP\n"); in snd_sof_run_firmware()
545 ret = wait_event_timeout(sdev->boot_wait, sdev->boot_complete, in snd_sof_run_firmware()
546 msecs_to_jiffies(sdev->boot_timeout)); in snd_sof_run_firmware()
548 dev_err(sdev->dev, "error: firmware boot failure\n"); in snd_sof_run_firmware()
549 snd_sof_dsp_dbg_dump(sdev, SOF_DBG_REGS | SOF_DBG_MBOX | in snd_sof_run_firmware()
552 sdev->boot_complete = true; in snd_sof_run_firmware()
556 dev_info(sdev->dev, "firmware boot complete\n"); in snd_sof_run_firmware()
559 ret = snd_sof_dsp_post_fw_run(sdev); in snd_sof_run_firmware()
561 dev_err(sdev->dev, "error: failed post fw run op\n"); in snd_sof_run_firmware()
566 sdev->enabled_cores_mask = init_core_mask; in snd_sof_run_firmware()
572 void snd_sof_fw_unload(struct snd_sof_dev *sdev) in snd_sof_fw_unload() argument