Lines Matching defs:rproc
73 * struct omap_rproc_timer - data structure for a timer used by a omap rproc
91 * @num_timers: number of rproc timer(s)
92 * @num_wd_timers: number of rproc watchdog timers
93 * @timers: timer(s) info used by rproc
96 * @rproc: rproc handle
113 struct rproc *rproc;
181 * @timer: handle to a OMAP rproc timer
197 * @timer: handle to a OMAP rproc timer
214 * @timer: handle to a OMAP rproc timer
229 * @timer: handle to a OMAP rproc timer
244 * @timer: handle to a OMAP rproc timer
262 * timers associated with a rproc (like IPUs which have 2 watchdog timers,
273 struct rproc *rproc = data;
274 struct omap_rproc *oproc = rproc->priv;
275 struct device *dev = rproc->dev.parent;
295 rproc_report_crash(rproc, RPROC_WATCHDOG);
302 * @rproc: handle of a remote processor
312 static int omap_rproc_enable_timers(struct rproc *rproc, bool configure)
319 struct omap_rproc *oproc = rproc->priv;
321 struct device *dev = rproc->dev.parent;
393 "rproc-wdt", rproc);
430 free_irq(timers[i].irq, rproc);
442 * @rproc: handle of a remote processor
452 static int omap_rproc_disable_timers(struct rproc *rproc, bool configure)
455 struct omap_rproc *oproc = rproc->priv;
466 free_irq(timers[i].irq, rproc);
495 struct device *dev = oproc->rproc->dev.parent;
496 const char *name = oproc->rproc->name;
504 * remoteproc detected an exception, notify the rproc core.
507 dev_err(dev, "omap rproc %s crashed\n", name);
508 rproc_report_crash(oproc->rproc, RPROC_FATAL_ERROR);
521 if (msg > oproc->rproc->max_notifyid) {
526 if (rproc_vq_interrupt(oproc->rproc, msg) == IRQ_NONE)
532 static void omap_rproc_kick(struct rproc *rproc, int vqid)
534 struct omap_rproc *oproc = rproc->priv;
535 struct device *dev = rproc->dev.parent;
538 /* wake up the rproc before kicking it */
559 * @rproc: handle of a remote processor
565 static int omap_rproc_write_dsp_boot_addr(struct rproc *rproc)
567 struct device *dev = rproc->dev.parent;
568 struct omap_rproc *oproc = rproc->priv;
574 if (rproc->bootaddr & (SZ_1K - 1)) {
576 rproc->bootaddr);
580 value = rproc->bootaddr >> bdata->boot_reg_shift;
589 * This function will be invoked only after the firmware for this rproc
593 static int omap_rproc_start(struct rproc *rproc)
595 struct omap_rproc *oproc = rproc->priv;
596 struct device *dev = rproc->dev.parent;
601 ret = omap_rproc_write_dsp_boot_addr(rproc);
633 ret = omap_rproc_enable_timers(rproc, true);
660 omap_rproc_disable_timers(rproc, true);
667 static int omap_rproc_stop(struct rproc *rproc)
669 struct device *dev = rproc->dev.parent;
670 struct omap_rproc *oproc = rproc->priv;
691 ret = omap_rproc_disable_timers(rproc, true);
719 * @rproc: remote processor to apply the address translation for
723 * Custom function implementing the rproc .da_to_va ops to provide address
731 static void *omap_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len)
733 struct omap_rproc *oproc = rproc->priv;
771 static int _omap_rproc_suspend(struct rproc *rproc, bool auto_suspend)
773 struct device *dev = rproc->dev.parent;
774 struct omap_rproc *oproc = rproc->priv;
820 ret = omap_rproc_disable_timers(rproc, false);
833 ret = omap_iommu_domain_deactivate(rproc->domain);
845 omap_rproc_enable_timers(rproc, false);
851 static int _omap_rproc_resume(struct rproc *rproc, bool auto_suspend)
853 struct device *dev = rproc->dev.parent;
854 struct omap_rproc *oproc = rproc->priv;
863 ret = omap_iommu_domain_activate(rproc->domain);
872 ret = omap_rproc_write_dsp_boot_addr(rproc);
879 ret = omap_rproc_enable_timers(rproc, false);
894 omap_rproc_disable_timers(rproc, false);
897 omap_iommu_domain_deactivate(rproc->domain);
905 struct rproc *rproc = platform_get_drvdata(pdev);
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);
942 struct rproc *rproc = platform_get_drvdata(pdev);
943 struct omap_rproc *oproc = rproc->priv;
946 mutex_lock(&rproc->lock);
947 if (rproc->state == RPROC_OFFLINE)
950 if (rproc->state != RPROC_SUSPENDED) {
963 ret = _omap_rproc_resume(rproc, false);
970 rproc->state = RPROC_RUNNING;
974 mutex_unlock(&rproc->lock);
980 struct rproc *rproc = dev_get_drvdata(dev);
981 struct omap_rproc *oproc = rproc->priv;
984 mutex_lock(&rproc->lock);
985 if (rproc->state == RPROC_CRASHED) {
986 dev_dbg(dev, "rproc cannot be runtime suspended when crashed!\n");
991 if (WARN_ON(rproc->state != RPROC_RUNNING)) {
992 dev_err(dev, "rproc cannot be runtime suspended when not running!\n");
1006 ret = _omap_rproc_suspend(rproc, true);
1010 rproc->state = RPROC_SUSPENDED;
1011 mutex_unlock(&rproc->lock);
1017 mutex_unlock(&rproc->lock);
1023 struct rproc *rproc = dev_get_drvdata(dev);
1026 mutex_lock(&rproc->lock);
1027 if (WARN_ON(rproc->state != RPROC_SUSPENDED)) {
1028 dev_err(dev, "rproc cannot be runtime resumed if not suspended! state=%d\n",
1029 rproc->state);
1034 ret = _omap_rproc_resume(rproc, true);
1040 rproc->state = RPROC_RUNNING;
1042 mutex_unlock(&rproc->lock);
1132 struct rproc *rproc)
1135 struct omap_rproc *oproc = rproc->priv;
1171 struct rproc *rproc)
1173 struct omap_rproc *oproc = rproc->priv;
1246 struct rproc *rproc)
1249 struct omap_rproc *oproc = rproc->priv;
1285 struct rproc *rproc;
1309 rproc = rproc_alloc(&pdev->dev, dev_name(&pdev->dev), &omap_rproc_ops,
1311 if (!rproc)
1314 oproc = rproc->priv;
1315 oproc->rproc = rproc;
1318 rproc->has_iommu = true;
1320 ret = omap_rproc_of_get_internal_memories(pdev, rproc);
1324 ret = omap_rproc_get_boot_data(pdev, rproc);
1328 ret = omap_rproc_of_get_timers(pdev, rproc);
1353 platform_set_drvdata(pdev, rproc);
1355 ret = rproc_add(rproc);
1364 rproc_free(rproc);
1370 struct rproc *rproc = platform_get_drvdata(pdev);
1372 rproc_del(rproc);
1373 rproc_free(rproc);
1389 .name = "omap-rproc",