Lines Matching refs:rproc

96 static int stm32_rproc_pa_to_da(struct rproc *rproc, phys_addr_t pa, u64 *da)
99 struct stm32_rproc *ddata = rproc->priv;
109 dev_dbg(rproc->dev.parent, "pa %pa to da %llx\n", &pa, *da);
116 static int stm32_rproc_mem_alloc(struct rproc *rproc,
119 struct device *dev = rproc->dev.parent;
136 static int stm32_rproc_mem_release(struct rproc *rproc,
139 dev_dbg(rproc->dev.parent, "unmap memory: %pa\n", &mem->dma);
198 static int stm32_rproc_mbox_idx(struct rproc *rproc, const unsigned char *name)
200 struct stm32_rproc *ddata = rproc->priv;
207 dev_err(&rproc->dev, "mailbox %s not found\n", name);
212 static int stm32_rproc_prepare(struct rproc *rproc)
214 struct device *dev = rproc->dev.parent;
232 if (stm32_rproc_pa_to_da(rproc, rmem->base, &da) < 0) {
250 rproc_coredump_add_segment(rproc, da,
265 rproc_add_carveout(rproc, mem);
272 static int stm32_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw)
274 if (rproc_elf_load_rsc_table(rproc, fw))
275 dev_warn(&rproc->dev, "no resource table found for this firmware\n");
283 struct rproc *rproc = platform_get_drvdata(pdev);
285 rproc_report_crash(rproc, RPROC_WATCHDOG);
293 struct rproc *rproc = dev_get_drvdata(mb->client.dev);
295 mutex_lock(&rproc->lock);
297 if (rproc->state != RPROC_RUNNING)
300 if (rproc_vq_interrupt(rproc, mb->vq_id) == IRQ_NONE)
301 dev_dbg(&rproc->dev, "no message found in vq%d\n", mb->vq_id);
304 mutex_unlock(&rproc->lock);
309 struct rproc *rproc = dev_get_drvdata(cl->dev);
311 struct stm32_rproc *ddata = rproc->priv;
316 static void stm32_rproc_free_mbox(struct rproc *rproc)
318 struct stm32_rproc *ddata = rproc->priv;
365 static int stm32_rproc_request_mbox(struct rproc *rproc)
367 struct stm32_rproc *ddata = rproc->priv;
368 struct device *dev = &rproc->dev;
410 static int stm32_rproc_set_hold_boot(struct rproc *rproc, bool hold)
412 struct stm32_rproc *ddata = rproc->priv;
444 dev_err(&rproc->dev, "failed to set hold boot\n");
449 static void stm32_rproc_add_coredump_trace(struct rproc *rproc)
455 list_for_each_entry(trace, &rproc->traces, node) {
458 list_for_each_entry(segment, &rproc->dump_segments, node) {
466 rproc_coredump_add_segment(rproc, trace->trace_mem.da,
471 static int stm32_rproc_start(struct rproc *rproc)
473 struct stm32_rproc *ddata = rproc->priv;
476 stm32_rproc_add_coredump_trace(rproc);
483 dev_err(&rproc->dev, "failed to clear pdds\n");
488 err = stm32_rproc_set_hold_boot(rproc, false);
492 return stm32_rproc_set_hold_boot(rproc, true);
495 static int stm32_rproc_attach(struct rproc *rproc)
497 stm32_rproc_add_coredump_trace(rproc);
499 return stm32_rproc_set_hold_boot(rproc, true);
502 static int stm32_rproc_detach(struct rproc *rproc)
504 struct stm32_rproc *ddata = rproc->priv;
508 idx = stm32_rproc_mbox_idx(rproc, STM32_MBX_DETACH);
512 dev_warn(&rproc->dev, "warning: remote FW detach without ack\n");
516 return stm32_rproc_set_hold_boot(rproc, false);
519 static int stm32_rproc_stop(struct rproc *rproc)
521 struct stm32_rproc *ddata = rproc->priv;
525 if (rproc->state != RPROC_OFFLINE && rproc->state != RPROC_CRASHED) {
526 idx = stm32_rproc_mbox_idx(rproc, STM32_MBX_SHUTDOWN);
530 dev_warn(&rproc->dev, "warning: remote FW shutdown without ack\n");
534 err = stm32_rproc_set_hold_boot(rproc, true);
540 dev_err(&rproc->dev, "failed to assert the reset\n");
549 dev_err(&rproc->dev, "failed to set pdds\n");
561 dev_err(&rproc->dev, "failed to set copro state\n");
569 static void stm32_rproc_kick(struct rproc *rproc, int vqid)
571 struct stm32_rproc *ddata = rproc->priv;
585 dev_err(&rproc->dev, "%s: failed (%s, err:%d)\n",
591 static int stm32_rproc_da_to_pa(struct rproc *rproc,
594 struct stm32_rproc *ddata = rproc->priv;
595 struct device *dev = rproc->dev.parent;
618 stm32_rproc_get_loaded_rsc_table(struct rproc *rproc, size_t *table_sz)
620 struct stm32_rproc *ddata = rproc->priv;
621 struct device *dev = rproc->dev.parent;
640 err = stm32_rproc_da_to_pa(rproc, rsc_da, &rsc_pa);
657 * entire area by overwriting it with the initial values stored in rproc->clean_table.
838 struct rproc *rproc;
846 rproc = devm_rproc_alloc(dev, np->name, &st_rproc_ops, NULL, sizeof(*ddata));
847 if (!rproc)
850 ddata = rproc->priv;
852 rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE);
854 ret = stm32_rproc_parse_dt(pdev, ddata, &rproc->auto_boot);
867 rproc->state = RPROC_DETACHED;
869 rproc->has_iommu = false;
877 platform_set_drvdata(pdev, rproc);
879 ret = stm32_rproc_request_mbox(rproc);
883 ret = rproc_add(rproc);
890 stm32_rproc_free_mbox(rproc);
894 rproc_resource_cleanup(rproc);
905 struct rproc *rproc = platform_get_drvdata(pdev);
906 struct stm32_rproc *ddata = rproc->priv;
909 if (atomic_read(&rproc->power) > 0)
910 rproc_shutdown(rproc);
912 rproc_del(rproc);
913 stm32_rproc_free_mbox(rproc);
924 struct rproc *rproc = dev_get_drvdata(dev);
925 struct stm32_rproc *ddata = rproc->priv;
935 struct rproc *rproc = dev_get_drvdata(dev);
936 struct stm32_rproc *ddata = rproc->priv;
951 .name = "stm32-rproc",