diff options
-rw-r--r-- | drivers/remoteproc/omap_remoteproc.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/remoteproc/omap_remoteproc.c b/drivers/remoteproc/omap_remoteproc.c index 4e84428328ea..e4db09f0cec7 100644 --- a/drivers/remoteproc/omap_remoteproc.c +++ b/drivers/remoteproc/omap_remoteproc.c @@ -333,9 +333,10 @@ static int _suspend(struct rproc *rproc, bool auto_suspend) struct platform_device *pdev = to_platform_device(dev); struct omap_rproc_pdata *pdata = dev->platform_data; struct omap_rproc *oproc = rproc->priv; + struct omap_rproc_timers_info *timers = pdata->timers; unsigned long to = msecs_to_jiffies(oproc->suspend_timeout); unsigned long ta = jiffies + to; - int ret; + int ret, i; init_completion(&oproc->pm_comp); oproc->suspend_acked = false; @@ -366,6 +367,9 @@ static int _suspend(struct rproc *rproc, bool auto_suspend) if (ret) return ret; + for (i = 0; i < pdata->timers_cnt; i++) + omap_dm_timer_stop(timers[i].odt); + oproc->suspended = true; return 0; @@ -393,6 +397,8 @@ static int omap_rproc_resume(struct rproc *rproc) struct platform_device *pdev = to_platform_device(dev); struct omap_rproc_pdata *pdata = dev->platform_data; struct omap_rproc *oproc = rproc->priv; + struct omap_rproc_timers_info *timers = pdata->timers; + int ret, i; oproc->suspended = false; /* boot address could be lost after suspend, so restore it */ @@ -410,7 +416,15 @@ static int omap_rproc_resume(struct rproc *rproc) oproc->need_kick = false; } - return pdata->device_enable(pdev); + for (i = 0; i < pdata->timers_cnt; i++) + omap_dm_timer_start(timers[i].odt); + + ret = pdata->device_enable(pdev); + if (ret) + for (i = 0; i < pdata->timers_cnt; i++) + omap_dm_timer_stop(timers[i].odt); + + return ret; } static struct rproc_ops omap_rproc_ops = { |