Lines Matching full:rproc
94 static int stm32_rproc_pa_to_da(struct rproc *rproc, phys_addr_t pa, u64 *da) in stm32_rproc_pa_to_da() argument
97 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_pa_to_da()
107 dev_dbg(rproc->dev.parent, "pa %pa to da %llx\n", &pa, *da); in stm32_rproc_pa_to_da()
114 static int stm32_rproc_mem_alloc(struct rproc *rproc, in stm32_rproc_mem_alloc() argument
117 struct device *dev = rproc->dev.parent; in stm32_rproc_mem_alloc()
134 static int stm32_rproc_mem_release(struct rproc *rproc, in stm32_rproc_mem_release() argument
137 dev_dbg(rproc->dev.parent, "unmap memory: %pa\n", &mem->dma); in stm32_rproc_mem_release()
196 static int stm32_rproc_mbox_idx(struct rproc *rproc, const unsigned char *name) in stm32_rproc_mbox_idx() argument
198 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_mbox_idx()
205 dev_err(&rproc->dev, "mailbox %s not found\n", name); in stm32_rproc_mbox_idx()
210 static int stm32_rproc_elf_load_rsc_table(struct rproc *rproc, in stm32_rproc_elf_load_rsc_table() argument
213 if (rproc_elf_load_rsc_table(rproc, fw)) in stm32_rproc_elf_load_rsc_table()
214 dev_warn(&rproc->dev, "no resource table found for this firmware\n"); in stm32_rproc_elf_load_rsc_table()
219 static int stm32_rproc_parse_memory_regions(struct rproc *rproc) in stm32_rproc_parse_memory_regions() argument
221 struct device *dev = rproc->dev.parent; in stm32_rproc_parse_memory_regions()
238 if (stm32_rproc_pa_to_da(rproc, rmem->base, &da) < 0) { in stm32_rproc_parse_memory_regions()
255 rproc_coredump_add_segment(rproc, da, in stm32_rproc_parse_memory_regions()
268 rproc_add_carveout(rproc, mem); in stm32_rproc_parse_memory_regions()
275 static int stm32_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) in stm32_rproc_parse_fw() argument
277 int ret = stm32_rproc_parse_memory_regions(rproc); in stm32_rproc_parse_fw()
282 return stm32_rproc_elf_load_rsc_table(rproc, fw); in stm32_rproc_parse_fw()
288 struct rproc *rproc = platform_get_drvdata(pdev); in stm32_rproc_wdg() local
290 rproc_report_crash(rproc, RPROC_WATCHDOG); in stm32_rproc_wdg()
298 struct rproc *rproc = dev_get_drvdata(mb->client.dev); in stm32_rproc_mb_vq_work() local
300 if (rproc_vq_interrupt(rproc, mb->vq_id) == IRQ_NONE) in stm32_rproc_mb_vq_work()
301 dev_dbg(&rproc->dev, "no message found in vq%d\n", mb->vq_id); in stm32_rproc_mb_vq_work()
306 struct rproc *rproc = dev_get_drvdata(cl->dev); in stm32_rproc_mb_callback() local
308 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_mb_callback()
313 static void stm32_rproc_free_mbox(struct rproc *rproc) in stm32_rproc_free_mbox() argument
315 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_free_mbox()
353 static int stm32_rproc_request_mbox(struct rproc *rproc) in stm32_rproc_request_mbox() argument
355 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_request_mbox()
356 struct device *dev = &rproc->dev; in stm32_rproc_request_mbox()
393 static int stm32_rproc_set_hold_boot(struct rproc *rproc, bool hold) in stm32_rproc_set_hold_boot() argument
395 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_set_hold_boot()
412 dev_err(&rproc->dev, "failed to set hold boot\n"); in stm32_rproc_set_hold_boot()
417 static void stm32_rproc_add_coredump_trace(struct rproc *rproc) in stm32_rproc_add_coredump_trace() argument
423 list_for_each_entry(trace, &rproc->traces, node) { in stm32_rproc_add_coredump_trace()
426 list_for_each_entry(segment, &rproc->dump_segments, node) { in stm32_rproc_add_coredump_trace()
434 rproc_coredump_add_segment(rproc, trace->trace_mem.da, in stm32_rproc_add_coredump_trace()
439 static int stm32_rproc_start(struct rproc *rproc) in stm32_rproc_start() argument
441 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_start()
444 stm32_rproc_add_coredump_trace(rproc); in stm32_rproc_start()
451 dev_err(&rproc->dev, "failed to clear pdds\n"); in stm32_rproc_start()
456 err = stm32_rproc_set_hold_boot(rproc, false); in stm32_rproc_start()
460 return stm32_rproc_set_hold_boot(rproc, true); in stm32_rproc_start()
463 static int stm32_rproc_attach(struct rproc *rproc) in stm32_rproc_attach() argument
465 stm32_rproc_add_coredump_trace(rproc); in stm32_rproc_attach()
467 return stm32_rproc_set_hold_boot(rproc, true); in stm32_rproc_attach()
470 static int stm32_rproc_stop(struct rproc *rproc) in stm32_rproc_stop() argument
472 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_stop()
476 if (rproc->state != RPROC_OFFLINE) { in stm32_rproc_stop()
477 idx = stm32_rproc_mbox_idx(rproc, STM32_MBX_SHUTDOWN); in stm32_rproc_stop()
483 dev_warn(&rproc->dev, "warning: remote FW shutdown without ack\n"); in stm32_rproc_stop()
487 err = stm32_rproc_set_hold_boot(rproc, true); in stm32_rproc_stop()
493 dev_err(&rproc->dev, "failed to assert the reset\n"); in stm32_rproc_stop()
502 dev_err(&rproc->dev, "failed to set pdds\n"); in stm32_rproc_stop()
514 dev_err(&rproc->dev, "failed to set copro state\n"); in stm32_rproc_stop()
522 static void stm32_rproc_kick(struct rproc *rproc, int vqid) in stm32_rproc_kick() argument
524 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_kick()
538 dev_err(&rproc->dev, "%s: failed (%s, err:%d)\n", in stm32_rproc_kick()
722 struct rproc *rproc, in stm32_rproc_get_loaded_rsc_table() argument
756 rproc->cached_table = NULL; in stm32_rproc_get_loaded_rsc_table()
758 rproc->table_sz = RSC_TBL_SIZE; in stm32_rproc_get_loaded_rsc_table()
759 rproc->table_ptr = (struct resource_table *)ddata->rsc_va; in stm32_rproc_get_loaded_rsc_table()
769 struct rproc *rproc; in stm32_rproc_probe() local
777 rproc = rproc_alloc(dev, np->name, &st_rproc_ops, NULL, sizeof(*ddata)); in stm32_rproc_probe()
778 if (!rproc) in stm32_rproc_probe()
781 ddata = rproc->priv; in stm32_rproc_probe()
783 rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE); in stm32_rproc_probe()
785 ret = stm32_rproc_parse_dt(pdev, ddata, &rproc->auto_boot); in stm32_rproc_probe()
798 rproc->state = RPROC_DETACHED; in stm32_rproc_probe()
800 ret = stm32_rproc_parse_memory_regions(rproc); in stm32_rproc_probe()
804 ret = stm32_rproc_get_loaded_rsc_table(pdev, rproc, ddata); in stm32_rproc_probe()
809 rproc->has_iommu = false; in stm32_rproc_probe()
817 platform_set_drvdata(pdev, rproc); in stm32_rproc_probe()
819 ret = stm32_rproc_request_mbox(rproc); in stm32_rproc_probe()
823 ret = rproc_add(rproc); in stm32_rproc_probe()
830 stm32_rproc_free_mbox(rproc); in stm32_rproc_probe()
834 rproc_resource_cleanup(rproc); in stm32_rproc_probe()
840 rproc_free(rproc); in stm32_rproc_probe()
846 struct rproc *rproc = platform_get_drvdata(pdev); in stm32_rproc_remove() local
847 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_remove()
850 if (atomic_read(&rproc->power) > 0) in stm32_rproc_remove()
851 rproc_shutdown(rproc); in stm32_rproc_remove()
853 rproc_del(rproc); in stm32_rproc_remove()
854 stm32_rproc_free_mbox(rproc); in stm32_rproc_remove()
861 rproc_free(rproc); in stm32_rproc_remove()
868 struct rproc *rproc = dev_get_drvdata(dev); in stm32_rproc_suspend() local
869 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_suspend()
879 struct rproc *rproc = dev_get_drvdata(dev); in stm32_rproc_resume() local
880 struct stm32_rproc *ddata = rproc->priv; in stm32_rproc_resume()
895 .name = "stm32-rproc",