linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] hwrng: stm32 - use pm_runtime_resume_and_get()
@ 2024-05-16  1:20 Marek Vasut
  2024-05-16  1:20 ` [PATCH 2/2] hwrng: stm32 - cache device pointer in struct stm32_rng_private Marek Vasut
  2024-05-16  8:12 ` [PATCH 1/2] hwrng: stm32 - use pm_runtime_resume_and_get() Gatien CHEVALLIER
  0 siblings, 2 replies; 6+ messages in thread
From: Marek Vasut @ 2024-05-16  1:20 UTC (permalink / raw)
  To: linux-crypto
  Cc: Marek Vasut, Uwe Kleine-König, Alexandre Torgue,
	Gatien Chevallier, Herbert Xu, Maxime Coquelin, Olivia Mackall,
	Rob Herring, Yang Yingliang, kernel, linux-arm-kernel,
	linux-stm32

include/linux/pm_runtime.h pm_runtime_get_sync() description suggests to
... consider using pm_runtime_resume_and_get() instead of it, especially
if its return value is checked by the caller, as this is likely to result
in cleaner code.

This is indeed better, switch to pm_runtime_resume_and_get() which
correctly suspends the device again in case of failure. Also add error
checking into the RNG driver in case pm_runtime_resume_and_get() does
fail, which is currently not done, and it does detect sporadic -EACCES
error return after resume, which would otherwise lead to a hang due to
register access on un-resumed hardware. Now the read simply errors out
and the system does not hang.

Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Gatien Chevallier <gatien.chevallier@foss.st.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Marek Vasut <marex@denx.de>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Olivia Mackall <olivia@selenic.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Yang Yingliang <yangyingliang@huawei.com>
Cc: kernel@dh-electronics.com
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-crypto@vger.kernel.org
Cc: linux-stm32@st-md-mailman.stormreply.com
---
 drivers/char/hw_random/stm32-rng.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/char/hw_random/stm32-rng.c b/drivers/char/hw_random/stm32-rng.c
index 0e903d6e22e30..6dec4adc49853 100644
--- a/drivers/char/hw_random/stm32-rng.c
+++ b/drivers/char/hw_random/stm32-rng.c
@@ -187,7 +187,9 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
 	int retval = 0, err = 0;
 	u32 sr;
 
-	pm_runtime_get_sync((struct device *) priv->rng.priv);
+	retval = pm_runtime_resume_and_get((struct device *)priv->rng.priv);
+	if (retval)
+		return retval;
 
 	if (readl_relaxed(priv->base + RNG_SR) & RNG_SR_SEIS)
 		stm32_rng_conceal_seed_error(rng);
-- 
2.43.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-05-16 11:48 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-16  1:20 [PATCH 1/2] hwrng: stm32 - use pm_runtime_resume_and_get() Marek Vasut
2024-05-16  1:20 ` [PATCH 2/2] hwrng: stm32 - cache device pointer in struct stm32_rng_private Marek Vasut
2024-05-16  9:37   ` Gatien CHEVALLIER
2024-05-16 10:52     ` Marek Vasut
2024-05-16 11:47       ` Gatien CHEVALLIER
2024-05-16  8:12 ` [PATCH 1/2] hwrng: stm32 - use pm_runtime_resume_and_get() Gatien CHEVALLIER

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).