Lines Matching +full:no +full:- +full:dump +full:- +full:oops

1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
3 // Copyright 2020-2025 NXP
16 #include "imx-common.h"
19 * imx8_get_registers() - This function is called in case of DSP oops
25 * @stack: Stores the stack dump.
26 * @stack_words: Size of the stack dump.
33 u32 offset = sdev->dsp_oops_offset; in imx8_get_registers()
39 if (xoops->arch_hdr.totalsize > EXCEPT_MAX_HDR_SIZE) { in imx8_get_registers()
40 dev_err(sdev->dev, "invalid header size 0x%x. FW oops is bogus\n", in imx8_get_registers()
41 xoops->arch_hdr.totalsize); in imx8_get_registers()
44 offset += xoops->arch_hdr.totalsize; in imx8_get_registers()
53 * imx8_dump() - This function is called when a panic message is
68 sof_mailbox_read(sdev, sdev->debug_box.offset + 0x4, &status, 4); in imx8_dump()
89 spin_lock_irqsave(&sdev->ipc_lock, flags); in imx_handle_reply()
91 spin_unlock_irqrestore(&sdev->ipc_lock, flags); in imx_handle_reply()
101 if (get_chip_info(sdev)->ipc_info.has_panic_code) { in imx_handle_request()
102 sof_mailbox_read(sdev, sdev->debug_box.offset + 0x4, in imx_handle_request()
122 struct imx_common_data *common = sdev->pdata->hw_pdata; in imx_send_msg()
124 sof_mailbox_write(sdev, sdev->host_box.offset, msg->msg_data, msg->msg_size); in imx_send_msg()
125 imx_dsp_ring_doorbell(common->ipc_handle, 0x0); in imx_send_msg()
137 return -EINVAL; in imx_get_bar_index()
143 return get_chip_info(sdev)->ipc_info.boot_mbox_offset; in imx_get_mailbox_offset()
148 return get_chip_info(sdev)->ipc_info.window_offset; in imx_get_window_offset()
154 sdev->dsp_power_state = *target; in imx_set_power_state()
164 common = sdev->pdata->hw_pdata; in imx_common_resume()
166 ret = clk_bulk_prepare_enable(common->clk_num, common->clks); in imx_common_resume()
168 dev_err(sdev->dev, "failed to enable clocks: %d\n", ret); in imx_common_resume()
171 imx_dsp_request_channel(common->ipc_handle, i); in imx_common_resume()
182 common = sdev->pdata->hw_pdata; in imx_common_suspend()
186 dev_err(sdev->dev, "failed to shutdown core: %d\n", ret); in imx_common_suspend()
191 imx_dsp_free_channel(common->ipc_handle, i); in imx_common_suspend()
193 clk_bulk_disable_unprepare(common->clk_num, common->clks); in imx_common_suspend()
207 dev_err(sdev->dev, "failed to runtime common resume: %d\n", ret); in imx_runtime_resume()
223 dev_err(sdev->dev, "failed to common resume: %d\n", ret); in imx_resume()
227 if (pm_runtime_suspended(sdev->dev)) { in imx_resume()
228 pm_runtime_disable(sdev->dev); in imx_resume()
229 pm_runtime_set_active(sdev->dev); in imx_resume()
230 pm_runtime_mark_last_busy(sdev->dev); in imx_resume()
231 pm_runtime_enable(sdev->dev); in imx_resume()
232 pm_runtime_idle(sdev->dev); in imx_resume()
247 dev_err(sdev->dev, "failed to runtime common suspend: %d\n", ret); in imx_runtime_suspend()
259 if (!pm_runtime_suspended(sdev->dev)) { in imx_suspend()
262 dev_err(sdev->dev, "failed to common suspend: %d\n", ret); in imx_suspend()
279 return -EINVAL; in imx_region_name_to_blk_type()
292 pdev = to_platform_device(sdev->dev); in imx_parse_ioremap_memory()
295 for (i = 0; chip_info->memory[i].name; i++) { in imx_parse_ioremap_memory()
296 blk_type = imx_region_name_to_blk_type(chip_info->memory[i].name); in imx_parse_ioremap_memory()
298 return dev_err_probe(sdev->dev, blk_type, in imx_parse_ioremap_memory()
299 "no blk type for region %s\n", in imx_parse_ioremap_memory()
300 chip_info->memory[i].name); in imx_parse_ioremap_memory()
302 if (!chip_info->memory[i].reserved) { in imx_parse_ioremap_memory()
304 chip_info->memory[i].name); in imx_parse_ioremap_memory()
306 return dev_err_probe(sdev->dev, -ENODEV, in imx_parse_ioremap_memory()
308 chip_info->memory[i].name); in imx_parse_ioremap_memory()
310 base = res->start; in imx_parse_ioremap_memory()
313 ret = of_property_match_string(pdev->dev.of_node, in imx_parse_ioremap_memory()
314 "memory-region-names", in imx_parse_ioremap_memory()
315 chip_info->memory[i].name); in imx_parse_ioremap_memory()
317 return dev_err_probe(sdev->dev, ret, in imx_parse_ioremap_memory()
318 "no valid index for %s\n", in imx_parse_ioremap_memory()
319 chip_info->memory[i].name); in imx_parse_ioremap_memory()
321 res_np = of_parse_phandle(pdev->dev.of_node, in imx_parse_ioremap_memory()
322 "memory-region", in imx_parse_ioremap_memory()
325 return dev_err_probe(sdev->dev, -ENODEV, in imx_parse_ioremap_memory()
327 chip_info->memory[i].name); in imx_parse_ioremap_memory()
332 return dev_err_probe(sdev->dev, -ENODEV, in imx_parse_ioremap_memory()
334 chip_info->memory[i].name); in imx_parse_ioremap_memory()
336 base = reserved->base; in imx_parse_ioremap_memory()
337 size = reserved->size; in imx_parse_ioremap_memory()
340 sdev->bar[blk_type] = devm_ioremap(sdev->dev, base, size); in imx_parse_ioremap_memory()
341 if (!sdev->bar[blk_type]) in imx_parse_ioremap_memory()
342 return dev_err_probe(sdev->dev, in imx_parse_ioremap_memory()
343 -ENOMEM, in imx_parse_ioremap_memory()
345 chip_info->memory[i].name); in imx_parse_ioremap_memory()
357 common = sdev->pdata->hw_pdata; in imx_unregister_action()
359 if (get_chip_info(sdev)->has_dma_reserved) in imx_unregister_action()
360 of_reserved_mem_device_release(sdev->dev); in imx_unregister_action()
362 platform_device_unregister(common->ipc_dev); in imx_unregister_action()
368 .pd_names = NULL, /* no filtering */ in imx_probe()
375 pdev = to_platform_device(sdev->dev); in imx_probe()
377 common = devm_kzalloc(sdev->dev, sizeof(*common), GFP_KERNEL); in imx_probe()
379 return dev_err_probe(sdev->dev, -ENOMEM, in imx_probe()
381 sdev->pdata->hw_pdata = common; in imx_probe()
383 common->ipc_dev = platform_device_register_data(sdev->dev, "imx-dsp", in imx_probe()
386 if (IS_ERR(common->ipc_dev)) in imx_probe()
387 return dev_err_probe(sdev->dev, PTR_ERR(common->ipc_dev), in imx_probe()
390 if (get_chip_info(sdev)->has_dma_reserved) { in imx_probe()
391 ret = of_reserved_mem_device_init_by_name(sdev->dev, in imx_probe()
392 pdev->dev.of_node, in imx_probe()
395 platform_device_unregister(common->ipc_dev); in imx_probe()
397 return dev_err_probe(sdev->dev, ret, in imx_probe()
403 ret = devm_add_action_or_reset(sdev->dev, in imx_probe()
407 return dev_err_probe(sdev->dev, ret, "failed to add devm action\n"); in imx_probe()
409 common->ipc_handle = dev_get_drvdata(&common->ipc_dev->dev); in imx_probe()
410 if (!common->ipc_handle) in imx_probe()
411 return dev_err_probe(sdev->dev, -EPROBE_DEFER, in imx_probe()
416 return dev_err_probe(sdev->dev, ret, in imx_probe()
419 if (!sdev->dev->pm_domain) { in imx_probe()
420 ret = devm_pm_domain_attach_list(sdev->dev, in imx_probe()
421 &domain_data, &common->pd_list); in imx_probe()
423 return dev_err_probe(sdev->dev, ret, "failed to attach PDs\n"); in imx_probe()
426 ret = devm_clk_bulk_get_all(sdev->dev, &common->clks); in imx_probe()
428 return dev_err_probe(sdev->dev, ret, "failed to fetch clocks\n"); in imx_probe()
429 common->clk_num = ret; in imx_probe()
431 ret = clk_bulk_prepare_enable(common->clk_num, common->clks); in imx_probe()
433 return dev_err_probe(sdev->dev, ret, "failed to enable clocks\n"); in imx_probe()
435 common->ipc_handle->ops = &imx_ipc_ops; in imx_probe()
436 imx_dsp_set_data(common->ipc_handle, sdev); in imx_probe()
438 sdev->num_cores = 1; in imx_probe()
439 sdev->mailbox_bar = SOF_FW_BLK_TYPE_SRAM; in imx_probe()
440 sdev->dsp_box.offset = get_chip_info(sdev)->ipc_info.boot_mbox_offset; in imx_probe()
450 common = sdev->pdata->hw_pdata; in imx_remove()
452 if (!pm_runtime_suspended(sdev->dev)) { in imx_remove()
455 dev_err(sdev->dev, "failed to shutdown core: %d\n", ret); in imx_remove()
457 clk_bulk_disable_unprepare(common->clk_num, common->clks); in imx_remove()