Lines Matching refs:rproc

74  * struct omap_rproc_timer - data structure for a timer used by a omap rproc
92 * @num_timers: number of rproc timer(s)
93 * @num_wd_timers: number of rproc watchdog timers
94 * @timers: timer(s) info used by rproc
97 * @rproc: rproc handle
114 struct rproc *rproc;
182 * @timer: handle to a OMAP rproc timer
198 * @timer: handle to a OMAP rproc timer
215 * @timer: handle to a OMAP rproc timer
230 * @timer: handle to a OMAP rproc timer
245 * @timer: handle to a OMAP rproc timer
263 * timers associated with a rproc (like IPUs which have 2 watchdog timers,
274 struct rproc *rproc = data;
275 struct omap_rproc *oproc = rproc->priv;
276 struct device *dev = rproc->dev.parent;
296 rproc_report_crash(rproc, RPROC_WATCHDOG);
303 * @rproc: handle of a remote processor
313 static int omap_rproc_enable_timers(struct rproc *rproc, bool configure)
320 struct omap_rproc *oproc = rproc->priv;
322 struct device *dev = rproc->dev.parent;
394 "rproc-wdt", rproc);
431 free_irq(timers[i].irq, rproc);
443 * @rproc: handle of a remote processor
453 static int omap_rproc_disable_timers(struct rproc *rproc, bool configure)
456 struct omap_rproc *oproc = rproc->priv;
467 free_irq(timers[i].irq, rproc);
496 struct device *dev = oproc->rproc->dev.parent;
497 const char *name = oproc->rproc->name;
505 * remoteproc detected an exception, notify the rproc core.
508 dev_err(dev, "omap rproc %s crashed\n", name);
509 rproc_report_crash(oproc->rproc, RPROC_FATAL_ERROR);
522 if (msg > oproc->rproc->max_notifyid) {
527 if (rproc_vq_interrupt(oproc->rproc, msg) == IRQ_NONE)
533 static void omap_rproc_kick(struct rproc *rproc, int vqid)
535 struct omap_rproc *oproc = rproc->priv;
536 struct device *dev = rproc->dev.parent;
539 /* wake up the rproc before kicking it */
560 * @rproc: handle of a remote processor
566 static int omap_rproc_write_dsp_boot_addr(struct rproc *rproc)
568 struct device *dev = rproc->dev.parent;
569 struct omap_rproc *oproc = rproc->priv;
575 if (rproc->bootaddr & (SZ_1K - 1)) {
577 rproc->bootaddr);
581 value = rproc->bootaddr >> bdata->boot_reg_shift;
590 * This function will be invoked only after the firmware for this rproc
594 static int omap_rproc_start(struct rproc *rproc)
596 struct omap_rproc *oproc = rproc->priv;
597 struct device *dev = rproc->dev.parent;
602 ret = omap_rproc_write_dsp_boot_addr(rproc);
634 ret = omap_rproc_enable_timers(rproc, true);
661 omap_rproc_disable_timers(rproc, true);
668 static int omap_rproc_stop(struct rproc *rproc)
670 struct device *dev = rproc->dev.parent;
671 struct omap_rproc *oproc = rproc->priv;
692 ret = omap_rproc_disable_timers(rproc, true);
720 * @rproc: remote processor to apply the address translation for
724 * Custom function implementing the rproc .da_to_va ops to provide address
732 static void *omap_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is_iomem)
734 struct omap_rproc *oproc = rproc->priv;
772 static int _omap_rproc_suspend(struct rproc *rproc, bool auto_suspend)
774 struct device *dev = rproc->dev.parent;
775 struct omap_rproc *oproc = rproc->priv;
821 ret = omap_rproc_disable_timers(rproc, false);
834 ret = omap_iommu_domain_deactivate(rproc->domain);
846 omap_rproc_enable_timers(rproc, false);
852 static int _omap_rproc_resume(struct rproc *rproc, bool auto_suspend)
854 struct device *dev = rproc->dev.parent;
855 struct omap_rproc *oproc = rproc->priv;
864 ret = omap_iommu_domain_activate(rproc->domain);
873 ret = omap_rproc_write_dsp_boot_addr(rproc);
880 ret = omap_rproc_enable_timers(rproc, false);
895 omap_rproc_disable_timers(rproc, false);
898 omap_iommu_domain_deactivate(rproc->domain);
905 struct rproc *rproc = dev_get_drvdata(dev);
906 struct omap_rproc *oproc = rproc->priv;
909 mutex_lock(&rproc->lock);
910 if (rproc->state == RPROC_OFFLINE)
913 if (rproc->state == RPROC_SUSPENDED)
916 if (rproc->state != RPROC_RUNNING) {
921 ret = _omap_rproc_suspend(rproc, false);
932 rproc->state = RPROC_SUSPENDED;
935 mutex_unlock(&rproc->lock);
941 struct rproc *rproc = dev_get_drvdata(dev);
942 struct omap_rproc *oproc = rproc->priv;
945 mutex_lock(&rproc->lock);
946 if (rproc->state == RPROC_OFFLINE)
949 if (rproc->state != RPROC_SUSPENDED) {
962 ret = _omap_rproc_resume(rproc, false);
969 rproc->state = RPROC_RUNNING;
973 mutex_unlock(&rproc->lock);
979 struct rproc *rproc = dev_get_drvdata(dev);
980 struct omap_rproc *oproc = rproc->priv;
983 mutex_lock(&rproc->lock);
984 if (rproc->state == RPROC_CRASHED) {
985 dev_dbg(dev, "rproc cannot be runtime suspended when crashed!\n");
990 if (WARN_ON(rproc->state != RPROC_RUNNING)) {
991 dev_err(dev, "rproc cannot be runtime suspended when not running!\n");
1005 ret = _omap_rproc_suspend(rproc, true);
1009 rproc->state = RPROC_SUSPENDED;
1010 mutex_unlock(&rproc->lock);
1016 mutex_unlock(&rproc->lock);
1022 struct rproc *rproc = dev_get_drvdata(dev);
1025 mutex_lock(&rproc->lock);
1026 if (WARN_ON(rproc->state != RPROC_SUSPENDED)) {
1027 dev_err(dev, "rproc cannot be runtime resumed if not suspended! state=%d\n",
1028 rproc->state);
1033 ret = _omap_rproc_resume(rproc, true);
1039 rproc->state = RPROC_RUNNING;
1041 mutex_unlock(&rproc->lock);
1131 struct rproc *rproc)
1134 struct omap_rproc *oproc = rproc->priv;
1170 struct rproc *rproc)
1172 struct omap_rproc *oproc = rproc->priv;
1245 struct rproc *rproc)
1248 struct omap_rproc *oproc = rproc->priv;
1284 struct rproc *rproc;
1308 rproc = rproc_alloc(&pdev->dev, dev_name(&pdev->dev), &omap_rproc_ops,
1310 if (!rproc)
1313 oproc = rproc->priv;
1314 oproc->rproc = rproc;
1317 rproc->has_iommu = true;
1319 ret = omap_rproc_of_get_internal_memories(pdev, rproc);
1323 ret = omap_rproc_get_boot_data(pdev, rproc);
1327 ret = omap_rproc_of_get_timers(pdev, rproc);
1352 platform_set_drvdata(pdev, rproc);
1354 ret = rproc_add(rproc);
1363 rproc_free(rproc);
1369 struct rproc *rproc = platform_get_drvdata(pdev);
1371 rproc_del(rproc);
1372 rproc_free(rproc);
1386 .name = "omap-rproc",