crypto: sun8i-ce - undo runtime PM changes during driver removal
[ Upstream commit 9334f427576e6d361a409959b52246b0aa10476f ]
The pm_runtime_use_autosuspend() call must be undone with
pm_runtime_dont_use_autosuspend() at driver exit, but this is not
currently handled in the driver.
To fix this issue and at the same time simplify error handling, switch
to devm_pm_runtime_enable(). It will call both pm_runtime_disable() and
pm_runtime_dont_use_autosuspend() during driver removal.
Fixes: 06f751b613 ("crypto: allwinner - Add sun8i-ce Crypto Engine")
Signed-off-by: Ovidiu Panait <ovidiu.panait.oss@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
57a52d7449
commit
c93930857f
@@ -832,13 +832,12 @@ static int sun8i_ce_pm_init(struct sun8i_ce_dev *ce)
|
||||
err = pm_runtime_set_suspended(ce->dev);
|
||||
if (err)
|
||||
return err;
|
||||
pm_runtime_enable(ce->dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void sun8i_ce_pm_exit(struct sun8i_ce_dev *ce)
|
||||
{
|
||||
pm_runtime_disable(ce->dev);
|
||||
err = devm_pm_runtime_enable(ce->dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sun8i_ce_get_clks(struct sun8i_ce_dev *ce)
|
||||
@@ -1041,7 +1040,7 @@ static int sun8i_ce_probe(struct platform_device *pdev)
|
||||
"sun8i-ce-ns", ce);
|
||||
if (err) {
|
||||
dev_err(ce->dev, "Cannot request CryptoEngine Non-secure IRQ (err=%d)\n", err);
|
||||
goto error_irq;
|
||||
goto error_pm;
|
||||
}
|
||||
|
||||
err = sun8i_ce_register_algs(ce);
|
||||
@@ -1082,8 +1081,6 @@ static int sun8i_ce_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
error_alg:
|
||||
sun8i_ce_unregister_algs(ce);
|
||||
error_irq:
|
||||
sun8i_ce_pm_exit(ce);
|
||||
error_pm:
|
||||
sun8i_ce_free_chanlist(ce, MAXFLOW - 1);
|
||||
return err;
|
||||
@@ -1104,8 +1101,6 @@ static void sun8i_ce_remove(struct platform_device *pdev)
|
||||
#endif
|
||||
|
||||
sun8i_ce_free_chanlist(ce, MAXFLOW - 1);
|
||||
|
||||
sun8i_ce_pm_exit(ce);
|
||||
}
|
||||
|
||||
static const struct of_device_id sun8i_ce_crypto_of_match_table[] = {
|
||||
|
||||
Reference in New Issue
Block a user