mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 00:54:09 +08:00
crypto: omap-des - handle error of pm_runtime_get_sync
pm_runtime_get_sync may not always succeed depending on SoC involved. So handle the error appropriately ensuring usage_count is accurate in case of failure. Signed-off-by: Nishanth Menon <nm@ti.com> Reviewed-by: Felipe Balbi <balbi@ti.com> Reported-by: Joachim Eastwood <manabian@gmail.com> Tested-by: Joachim Eastwood <manabian@gmail.com> Acked-by: Joel Fernandes <joelf@ti.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
8ece117104
commit
f51f593b3e
@ -223,12 +223,19 @@ static void omap_des_write_n(struct omap_des_dev *dd, u32 offset,
|
||||
|
||||
static int omap_des_hw_init(struct omap_des_dev *dd)
|
||||
{
|
||||
int err;
|
||||
|
||||
/*
|
||||
* clocks are enabled when request starts and disabled when finished.
|
||||
* It may be long delays between requests.
|
||||
* Device might go to off mode to save power.
|
||||
*/
|
||||
pm_runtime_get_sync(dd->dev);
|
||||
err = pm_runtime_get_sync(dd->dev);
|
||||
if (err < 0) {
|
||||
pm_runtime_put_noidle(dd->dev);
|
||||
dev_err(dd->dev, "%s: failed to get_sync(%d)\n", __func__, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!(dd->flags & FLAGS_INIT)) {
|
||||
dd->flags |= FLAGS_INIT;
|
||||
@ -1082,7 +1089,12 @@ static int omap_des_probe(struct platform_device *pdev)
|
||||
dd->phys_base = res->start;
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
pm_runtime_get_sync(dev);
|
||||
err = pm_runtime_get_sync(dev);
|
||||
if (err < 0) {
|
||||
pm_runtime_put_noidle(dev);
|
||||
dev_err(dd->dev, "%s: failed to get_sync(%d)\n", __func__, err);
|
||||
goto err_get;
|
||||
}
|
||||
|
||||
omap_des_dma_stop(dd);
|
||||
|
||||
@ -1147,6 +1159,7 @@ err_algs:
|
||||
err_irq:
|
||||
tasklet_kill(&dd->done_task);
|
||||
tasklet_kill(&dd->queue_task);
|
||||
err_get:
|
||||
pm_runtime_disable(dev);
|
||||
err_res:
|
||||
dd = NULL;
|
||||
@ -1190,7 +1203,14 @@ static int omap_des_suspend(struct device *dev)
|
||||
|
||||
static int omap_des_resume(struct device *dev)
|
||||
{
|
||||
pm_runtime_get_sync(dev);
|
||||
int err;
|
||||
|
||||
err = pm_runtime_get_sync(dev);
|
||||
if (err < 0) {
|
||||
pm_runtime_put_noidle(dev);
|
||||
dev_err(dev, "%s: failed to get_sync(%d)\n", __func__, err);
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user