Lines Matching +full:resume +full:- +full:offset

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
33 u32 offset = sdev->dsp_oops_offset; in imx8_get_registers() local
36 sof_mailbox_read(sdev, offset, xoops, sizeof(*xoops)); 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()
45 sof_mailbox_read(sdev, offset, panic_info, sizeof(*panic_info)); in imx8_get_registers()
48 offset += sizeof(*panic_info); in imx8_get_registers()
49 sof_mailbox_read(sdev, offset, stack, stack_words * sizeof(u32)); 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()
289 pdev = to_platform_device(sdev->dev); in imx_parse_ioremap_memory()
292 for (i = 0; chip_info->memory[i].name; i++) { in imx_parse_ioremap_memory()
293 blk_type = imx_region_name_to_blk_type(chip_info->memory[i].name); in imx_parse_ioremap_memory()
295 return dev_err_probe(sdev->dev, blk_type, in imx_parse_ioremap_memory()
297 chip_info->memory[i].name); in imx_parse_ioremap_memory()
299 if (!chip_info->memory[i].reserved) { in imx_parse_ioremap_memory()
301 chip_info->memory[i].name); in imx_parse_ioremap_memory()
303 return dev_err_probe(sdev->dev, -ENODEV, in imx_parse_ioremap_memory()
305 chip_info->memory[i].name); in imx_parse_ioremap_memory()
308 ret = of_reserved_mem_region_to_resource_byname(pdev->dev.of_node, in imx_parse_ioremap_memory()
309 chip_info->memory[i].name, in imx_parse_ioremap_memory()
312 return dev_err_probe(sdev->dev, ret, in imx_parse_ioremap_memory()
314 chip_info->memory[i].name); in imx_parse_ioremap_memory()
318 sdev->bar[blk_type] = devm_ioremap_resource(sdev->dev, res); in imx_parse_ioremap_memory()
319 if (IS_ERR(sdev->bar[blk_type])) in imx_parse_ioremap_memory()
320 return dev_err_probe(sdev->dev, in imx_parse_ioremap_memory()
321 PTR_ERR(sdev->bar[blk_type]), in imx_parse_ioremap_memory()
323 chip_info->memory[i].name); in imx_parse_ioremap_memory()
335 common = sdev->pdata->hw_pdata; in imx_unregister_action()
337 if (get_chip_info(sdev)->has_dma_reserved) in imx_unregister_action()
338 of_reserved_mem_device_release(sdev->dev); in imx_unregister_action()
340 platform_device_unregister(common->ipc_dev); in imx_unregister_action()
353 pdev = to_platform_device(sdev->dev); in imx_probe()
355 common = devm_kzalloc(sdev->dev, sizeof(*common), GFP_KERNEL); in imx_probe()
357 return -ENOMEM; in imx_probe()
359 sdev->pdata->hw_pdata = common; in imx_probe()
361 common->ipc_dev = platform_device_register_data(sdev->dev, "imx-dsp", in imx_probe()
364 if (IS_ERR(common->ipc_dev)) in imx_probe()
365 return dev_err_probe(sdev->dev, PTR_ERR(common->ipc_dev), in imx_probe()
368 if (get_chip_info(sdev)->has_dma_reserved) { in imx_probe()
369 ret = of_reserved_mem_device_init_by_name(sdev->dev, in imx_probe()
370 pdev->dev.of_node, in imx_probe()
373 platform_device_unregister(common->ipc_dev); in imx_probe()
375 return dev_err_probe(sdev->dev, ret, in imx_probe()
381 ret = devm_add_action_or_reset(sdev->dev, in imx_probe()
387 common->ipc_handle = dev_get_drvdata(&common->ipc_dev->dev); in imx_probe()
388 if (!common->ipc_handle) in imx_probe()
389 return dev_err_probe(sdev->dev, -EPROBE_DEFER, in imx_probe()
394 return dev_err_probe(sdev->dev, ret, in imx_probe()
397 if (!sdev->dev->pm_domain) { in imx_probe()
398 ret = devm_pm_domain_attach_list(sdev->dev, in imx_probe()
399 &domain_data, &common->pd_list); in imx_probe()
401 return dev_err_probe(sdev->dev, ret, "failed to attach PDs\n"); in imx_probe()
404 ret = devm_clk_bulk_get_all(sdev->dev, &common->clks); in imx_probe()
406 return dev_err_probe(sdev->dev, ret, "failed to fetch clocks\n"); in imx_probe()
407 common->clk_num = ret; in imx_probe()
409 ret = clk_bulk_prepare_enable(common->clk_num, common->clks); in imx_probe()
411 return dev_err_probe(sdev->dev, ret, "failed to enable clocks\n"); in imx_probe()
413 common->ipc_handle->ops = &imx_ipc_ops; in imx_probe()
414 imx_dsp_set_data(common->ipc_handle, sdev); in imx_probe()
416 sdev->num_cores = 1; in imx_probe()
417 sdev->mailbox_bar = SOF_FW_BLK_TYPE_SRAM; in imx_probe()
418 sdev->dsp_box.offset = get_chip_info(sdev)->ipc_info.boot_mbox_offset; in imx_probe()
428 common = sdev->pdata->hw_pdata; in imx_remove()
430 if (!pm_runtime_suspended(sdev->dev)) { in imx_remove()
433 dev_err(sdev->dev, "failed to shutdown core: %d\n", ret); in imx_remove()
435 clk_bulk_disable_unprepare(common->clk_num, common->clks); in imx_remove()
470 .resume = imx_resume,