Lines Matching full:rproc

78  * struct omap_rproc_timer - data structure for a timer used by a omap rproc
96 * @num_timers: number of rproc timer(s)
97 * @num_wd_timers: number of rproc watchdog timers
98 * @timers: timer(s) info used by rproc
101 * @rproc: rproc handle
118 struct rproc *rproc; member
186 * @timer: handle to a OMAP rproc timer
202 * @timer: handle to a OMAP rproc timer
219 * @timer: handle to a OMAP rproc timer
234 * @timer: handle to a OMAP rproc timer
249 * @timer: handle to a OMAP rproc timer
267 * timers associated with a rproc (like IPUs which have 2 watchdog timers,
278 struct rproc *rproc = data; in omap_rproc_watchdog_isr() local
279 struct omap_rproc *oproc = rproc->priv; in omap_rproc_watchdog_isr()
280 struct device *dev = rproc->dev.parent; in omap_rproc_watchdog_isr()
300 rproc_report_crash(rproc, RPROC_WATCHDOG); in omap_rproc_watchdog_isr()
307 * @rproc: handle of a remote processor
317 static int omap_rproc_enable_timers(struct rproc *rproc, bool configure) in omap_rproc_enable_timers() argument
324 struct omap_rproc *oproc = rproc->priv; in omap_rproc_enable_timers()
326 struct device *dev = rproc->dev.parent; in omap_rproc_enable_timers()
398 "rproc-wdt", rproc); in omap_rproc_enable_timers()
435 free_irq(timers[i].irq, rproc); in omap_rproc_enable_timers()
447 * @rproc: handle of a remote processor
457 static int omap_rproc_disable_timers(struct rproc *rproc, bool configure) in omap_rproc_disable_timers() argument
460 struct omap_rproc *oproc = rproc->priv; in omap_rproc_disable_timers()
471 free_irq(timers[i].irq, rproc); in omap_rproc_disable_timers()
500 struct device *dev = oproc->rproc->dev.parent; in omap_rproc_mbox_callback()
501 const char *name = oproc->rproc->name; in omap_rproc_mbox_callback()
509 * remoteproc detected an exception, notify the rproc core. in omap_rproc_mbox_callback()
512 dev_err(dev, "omap rproc %s crashed\n", name); in omap_rproc_mbox_callback()
513 rproc_report_crash(oproc->rproc, RPROC_FATAL_ERROR); in omap_rproc_mbox_callback()
526 if (msg > oproc->rproc->max_notifyid) { in omap_rproc_mbox_callback()
531 if (rproc_vq_interrupt(oproc->rproc, msg) == IRQ_NONE) in omap_rproc_mbox_callback()
537 static void omap_rproc_kick(struct rproc *rproc, int vqid) in omap_rproc_kick() argument
539 struct omap_rproc *oproc = rproc->priv; in omap_rproc_kick()
540 struct device *dev = rproc->dev.parent; in omap_rproc_kick()
543 /* wake up the rproc before kicking it */ in omap_rproc_kick()
564 * @rproc: handle of a remote processor
570 static int omap_rproc_write_dsp_boot_addr(struct rproc *rproc) in omap_rproc_write_dsp_boot_addr() argument
572 struct device *dev = rproc->dev.parent; in omap_rproc_write_dsp_boot_addr()
573 struct omap_rproc *oproc = rproc->priv; in omap_rproc_write_dsp_boot_addr()
579 if (rproc->bootaddr & (SZ_1K - 1)) { in omap_rproc_write_dsp_boot_addr()
581 rproc->bootaddr); in omap_rproc_write_dsp_boot_addr()
585 value = rproc->bootaddr >> bdata->boot_reg_shift; in omap_rproc_write_dsp_boot_addr()
594 * This function will be invoked only after the firmware for this rproc
598 static int omap_rproc_start(struct rproc *rproc) in omap_rproc_start() argument
600 struct omap_rproc *oproc = rproc->priv; in omap_rproc_start()
601 struct device *dev = rproc->dev.parent; in omap_rproc_start()
606 ret = omap_rproc_write_dsp_boot_addr(rproc); in omap_rproc_start()
638 ret = omap_rproc_enable_timers(rproc, true); in omap_rproc_start()
665 omap_rproc_disable_timers(rproc, true); in omap_rproc_start()
672 static int omap_rproc_stop(struct rproc *rproc) in omap_rproc_stop() argument
674 struct device *dev = rproc->dev.parent; in omap_rproc_stop()
675 struct omap_rproc *oproc = rproc->priv; in omap_rproc_stop()
696 ret = omap_rproc_disable_timers(rproc, true); in omap_rproc_stop()
724 * @rproc: remote processor to apply the address translation for
728 * Custom function implementing the rproc .da_to_va ops to provide address
736 static void *omap_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is_iomem) in omap_rproc_da_to_va() argument
738 struct omap_rproc *oproc = rproc->priv; in omap_rproc_da_to_va()
776 static int _omap_rproc_suspend(struct rproc *rproc, bool auto_suspend) in _omap_rproc_suspend() argument
778 struct device *dev = rproc->dev.parent; in _omap_rproc_suspend()
779 struct omap_rproc *oproc = rproc->priv; in _omap_rproc_suspend()
825 ret = omap_rproc_disable_timers(rproc, false); in _omap_rproc_suspend()
838 ret = omap_iommu_domain_deactivate(rproc->domain); in _omap_rproc_suspend()
850 omap_rproc_enable_timers(rproc, false); in _omap_rproc_suspend()
856 static int _omap_rproc_resume(struct rproc *rproc, bool auto_suspend) in _omap_rproc_resume() argument
858 struct device *dev = rproc->dev.parent; in _omap_rproc_resume()
859 struct omap_rproc *oproc = rproc->priv; in _omap_rproc_resume()
868 ret = omap_iommu_domain_activate(rproc->domain); in _omap_rproc_resume()
877 ret = omap_rproc_write_dsp_boot_addr(rproc); in _omap_rproc_resume()
884 ret = omap_rproc_enable_timers(rproc, false); in _omap_rproc_resume()
899 omap_rproc_disable_timers(rproc, false); in _omap_rproc_resume()
902 omap_iommu_domain_deactivate(rproc->domain); in _omap_rproc_resume()
909 struct rproc *rproc = dev_get_drvdata(dev); in omap_rproc_suspend() local
910 struct omap_rproc *oproc = rproc->priv; in omap_rproc_suspend()
913 mutex_lock(&rproc->lock); in omap_rproc_suspend()
914 if (rproc->state == RPROC_OFFLINE) in omap_rproc_suspend()
917 if (rproc->state == RPROC_SUSPENDED) in omap_rproc_suspend()
920 if (rproc->state != RPROC_RUNNING) { in omap_rproc_suspend()
925 ret = _omap_rproc_suspend(rproc, false); in omap_rproc_suspend()
936 rproc->state = RPROC_SUSPENDED; in omap_rproc_suspend()
939 mutex_unlock(&rproc->lock); in omap_rproc_suspend()
945 struct rproc *rproc = dev_get_drvdata(dev); in omap_rproc_resume() local
946 struct omap_rproc *oproc = rproc->priv; in omap_rproc_resume()
949 mutex_lock(&rproc->lock); in omap_rproc_resume()
950 if (rproc->state == RPROC_OFFLINE) in omap_rproc_resume()
953 if (rproc->state != RPROC_SUSPENDED) { in omap_rproc_resume()
966 ret = _omap_rproc_resume(rproc, false); in omap_rproc_resume()
973 rproc->state = RPROC_RUNNING; in omap_rproc_resume()
977 mutex_unlock(&rproc->lock); in omap_rproc_resume()
983 struct rproc *rproc = dev_get_drvdata(dev); in omap_rproc_runtime_suspend() local
984 struct omap_rproc *oproc = rproc->priv; in omap_rproc_runtime_suspend()
987 mutex_lock(&rproc->lock); in omap_rproc_runtime_suspend()
988 if (rproc->state == RPROC_CRASHED) { in omap_rproc_runtime_suspend()
989 dev_dbg(dev, "rproc cannot be runtime suspended when crashed!\n"); in omap_rproc_runtime_suspend()
994 if (WARN_ON(rproc->state != RPROC_RUNNING)) { in omap_rproc_runtime_suspend()
995 dev_err(dev, "rproc cannot be runtime suspended when not running!\n"); in omap_rproc_runtime_suspend()
1009 ret = _omap_rproc_suspend(rproc, true); in omap_rproc_runtime_suspend()
1013 rproc->state = RPROC_SUSPENDED; in omap_rproc_runtime_suspend()
1014 mutex_unlock(&rproc->lock); in omap_rproc_runtime_suspend()
1020 mutex_unlock(&rproc->lock); in omap_rproc_runtime_suspend()
1026 struct rproc *rproc = dev_get_drvdata(dev); in omap_rproc_runtime_resume() local
1029 mutex_lock(&rproc->lock); in omap_rproc_runtime_resume()
1030 if (WARN_ON(rproc->state != RPROC_SUSPENDED)) { in omap_rproc_runtime_resume()
1031 dev_err(dev, "rproc cannot be runtime resumed if not suspended! state=%d\n", in omap_rproc_runtime_resume()
1032 rproc->state); in omap_rproc_runtime_resume()
1037 ret = _omap_rproc_resume(rproc, true); in omap_rproc_runtime_resume()
1043 rproc->state = RPROC_RUNNING; in omap_rproc_runtime_resume()
1045 mutex_unlock(&rproc->lock); in omap_rproc_runtime_resume()
1135 struct rproc *rproc) in omap_rproc_get_boot_data() argument
1138 struct omap_rproc *oproc = rproc->priv; in omap_rproc_get_boot_data()
1171 struct rproc *rproc) in omap_rproc_of_get_internal_memories() argument
1173 struct omap_rproc *oproc = rproc->priv; in omap_rproc_of_get_internal_memories()
1246 struct rproc *rproc) in omap_rproc_of_get_timers() argument
1249 struct omap_rproc *oproc = rproc->priv; in omap_rproc_of_get_timers()
1292 struct rproc *rproc; in omap_rproc_probe() local
1316 rproc = devm_rproc_alloc(&pdev->dev, dev_name(&pdev->dev), &omap_rproc_ops, in omap_rproc_probe()
1318 if (!rproc) in omap_rproc_probe()
1321 oproc = rproc->priv; in omap_rproc_probe()
1322 oproc->rproc = rproc; in omap_rproc_probe()
1325 rproc->has_iommu = true; in omap_rproc_probe()
1330 * interfere with the core rproc->domain and we get the right DMA ops. in omap_rproc_probe()
1340 ret = omap_rproc_of_get_internal_memories(pdev, rproc); in omap_rproc_probe()
1344 ret = omap_rproc_get_boot_data(pdev, rproc); in omap_rproc_probe()
1348 ret = omap_rproc_of_get_timers(pdev, rproc); in omap_rproc_probe()
1374 platform_set_drvdata(pdev, rproc); in omap_rproc_probe()
1376 ret = devm_rproc_add(&pdev->dev, rproc); in omap_rproc_probe()
1392 .name = "omap-rproc",