diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/remoteproc/remoteproc.c | 7 | ||||
-rw-r--r-- | drivers/usb/host/ehci-q.c | 5 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/remoteproc/remoteproc.c b/drivers/remoteproc/remoteproc.c index 680a701..907fc01 100644 --- a/drivers/remoteproc/remoteproc.c +++ b/drivers/remoteproc/remoteproc.c @@ -675,7 +675,8 @@ static void rproc_start(struct rproc *rproc, u64 bootaddr) pm_runtime_set_autosuspend_delay(dev, rproc->sus_timeout); pm_runtime_get_noresume(rproc->dev); pm_runtime_set_active(rproc->dev); - pm_runtime_enable(rproc->dev); + if (!rproc->secure_mode) + pm_runtime_enable(rproc->dev); pm_runtime_mark_last_busy(rproc->dev); pm_runtime_put_autosuspend(rproc->dev); #endif @@ -1340,7 +1341,9 @@ void rproc_put(struct rproc *rproc) */ pm_runtime_get_sync(rproc->dev); pm_runtime_put_noidle(rproc->dev); - pm_runtime_disable(rproc->dev); + if (!rproc->secure_reset) + pm_runtime_disable(rproc->dev); + pm_runtime_set_suspended(rproc->dev); #endif ret = rproc->ops->stop(rproc); diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c index 2719879..6c6013c 100644 --- a/drivers/usb/host/ehci-q.c +++ b/drivers/usb/host/ehci-q.c @@ -498,6 +498,11 @@ qh_completions (struct ehci_hcd *ehci, struct ehci_qh *qh) last = list_entry (qtd->qtd_list.prev, struct ehci_qtd, qtd_list); last->hw_next = qtd->hw_next; + /* + * Make sure the new hw_next pointer is visible + * to the HW before freeing the old one + */ + wmb(); } /* remove qtd; it's recycled after possible urb completion */ |