mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/2] hwrng: cctrng - simplify runtime pm
@ 2026-11-14 17:03 Martin Kaiser
  2026-11-14 17:03 ` [PATCH 1/2] hwrng: cctrng - simplify runtime pm refcount code Martin Kaiser
  2026-11-14 17:03 ` [PATCH 2/2] hwrng: cctrng - use device-managed api for runtime pm Martin Kaiser
  0 siblings, 2 replies; 3+ messages in thread
From: Martin Kaiser @ 2026-11-14 17:03 UTC (permalink / raw)
  To: Herbert Xu; +Cc: linux-crypto, linux-kernel, Martin Kaiser

two patches to simplify the runtime pm code in the cctrng driver

compile-tested only
(the devres patch is similar to imx-rngc.c, which was tested on real hw)

Martin Kaiser (2):
  hwrng: cctrng - simplify runtime pm refcount code
  hwrng: cctrng - use device-managed api for runtime pm

 drivers/char/hw_random/cctrng.c | 47 +++++----------------------------
 1 file changed, 6 insertions(+), 41 deletions(-)

-- 
2.43.7


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

* [PATCH 1/2] hwrng: cctrng - simplify runtime pm refcount code
  2026-11-14 17:03 [PATCH 0/2] hwrng: cctrng - simplify runtime pm Martin Kaiser
@ 2026-11-14 17:03 ` Martin Kaiser
  2026-11-14 17:03 ` [PATCH 2/2] hwrng: cctrng - use device-managed api for runtime pm Martin Kaiser
  1 sibling, 0 replies; 3+ messages in thread
From: Martin Kaiser @ 2026-11-14 17:03 UTC (permalink / raw)
  To: Herbert Xu; +Cc: linux-crypto, linux-kernel, Martin Kaiser

Clean up the code for runtime pm refcounts.

The cc_trng_pm_get helper function isn't really useful, call
pm_runtime_resume_and_get directly.

In dev_err_probe, show the error code only once.

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
 drivers/char/hw_random/cctrng.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/char/hw_random/cctrng.c b/drivers/char/hw_random/cctrng.c
index b5f2c75d2eb8..ef3ca6d8cc85 100644
--- a/drivers/char/hw_random/cctrng.c
+++ b/drivers/char/hw_random/cctrng.c
@@ -85,12 +85,6 @@ static inline u32 cc_ioread(struct cctrng_drvdata *drvdata, u32 reg)
 	return ioread32(drvdata->cc_base + reg);
 }
 
-
-static int cc_trng_pm_get(struct device *dev)
-{
-	return pm_runtime_resume_and_get(dev);
-}
-
 static void cc_trng_pm_put_suspend(struct device *dev)
 {
 	pm_runtime_put_autosuspend(dev);
@@ -239,11 +233,11 @@ static int cctrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
 			/* re-check space in buffer to avoid potential race */
 			if (circ_buf_space(drvdata) >= CC_TRNG_EHR_IN_WORDS) {
 				/* increment device's usage counter */
-				int rc = cc_trng_pm_get(dev);
+				int rc = pm_runtime_resume_and_get(dev);
 
 				if (rc) {
 					dev_err(dev,
-						"cc_trng_pm_get returned %x\n",
+						"pm_runtime_resume_and_get returned %x\n",
 						rc);
 					return rc;
 				}
@@ -521,9 +515,9 @@ static int cctrng_probe(struct platform_device *pdev)
 		return dev_err_probe(dev, rc, "cc_trng_pm_init failed\n");
 
 	/* increment device's usage counter */
-	rc = cc_trng_pm_get(dev);
+	rc = pm_runtime_resume_and_get(dev);
 	if (rc)
-		return dev_err_probe(dev, rc, "cc_trng_pm_get returned %x\n", rc);
+		return dev_err_probe(dev, rc, "pm_runtime_resume_and_get failed\n");
 
 	/* set pending_hw to verify that HW won't be triggered from read */
 	atomic_set(&drvdata->pending_hw, 1);
-- 
2.43.7


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

* [PATCH 2/2] hwrng: cctrng - use device-managed api for runtime pm
  2026-11-14 17:03 [PATCH 0/2] hwrng: cctrng - simplify runtime pm Martin Kaiser
  2026-11-14 17:03 ` [PATCH 1/2] hwrng: cctrng - simplify runtime pm refcount code Martin Kaiser
@ 2026-11-14 17:03 ` Martin Kaiser
  1 sibling, 0 replies; 3+ messages in thread
From: Martin Kaiser @ 2026-11-14 17:03 UTC (permalink / raw)
  To: Herbert Xu; +Cc: linux-crypto, linux-kernel, Martin Kaiser

Use the device-managed api to enable runtime pm in the probe function.
The disable function is called from the devres layer when the device
is removed.

Disabling runtime pm was the only operation in the driver's remove
function. It can now be deleted.

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
 drivers/char/hw_random/cctrng.c | 33 ++-------------------------------
 1 file changed, 2 insertions(+), 31 deletions(-)

diff --git a/drivers/char/hw_random/cctrng.c b/drivers/char/hw_random/cctrng.c
index ef3ca6d8cc85..ac77c6afea5b 100644
--- a/drivers/char/hw_random/cctrng.c
+++ b/drivers/char/hw_random/cctrng.c
@@ -97,26 +97,10 @@ static int cc_trng_pm_init(struct cctrng_drvdata *drvdata)
 	/* must be before the enabling to avoid redundant suspending */
 	pm_runtime_set_autosuspend_delay(dev, CC_TRNG_SUSPEND_TIMEOUT);
 	pm_runtime_use_autosuspend(dev);
-	/* set us as active - note we won't do PM ops until cc_trng_pm_go()! */
+	/* set us as active - note we won't do PM ops until devm_pm_runtime_enable()! */
 	return pm_runtime_set_active(dev);
 }
 
-static void cc_trng_pm_go(struct cctrng_drvdata *drvdata)
-{
-	struct device *dev = &(drvdata->pdev->dev);
-
-	/* enable the PM module*/
-	pm_runtime_enable(dev);
-}
-
-static void cc_trng_pm_fini(struct cctrng_drvdata *drvdata)
-{
-	struct device *dev = &(drvdata->pdev->dev);
-
-	pm_runtime_disable(dev);
-}
-
-
 static inline int cc_trng_parse_sampling_ratio(struct cctrng_drvdata *drvdata)
 {
 	struct device *dev = &(drvdata->pdev->dev);
@@ -534,25 +518,13 @@ static int cctrng_probe(struct platform_device *pdev)
 	cc_trng_hw_trigger(drvdata);
 
 	/* All set, we can allow auto-suspend */
-	cc_trng_pm_go(drvdata);
+	devm_pm_runtime_enable(dev);
 
 	dev_info(dev, "ARM cctrng device initialized\n");
 
 	return 0;
 }
 
-static void cctrng_remove(struct platform_device *pdev)
-{
-	struct cctrng_drvdata *drvdata = platform_get_drvdata(pdev);
-	struct device *dev = &pdev->dev;
-
-	dev_dbg(dev, "Releasing cctrng resources...\n");
-
-	cc_trng_pm_fini(drvdata);
-
-	dev_info(dev, "ARM cctrng device terminated\n");
-}
-
 static int __maybe_unused cctrng_suspend(struct device *dev)
 {
 	struct cctrng_drvdata *drvdata = dev_get_drvdata(dev);
@@ -634,7 +606,6 @@ static struct platform_driver cctrng_driver = {
 		.pm = &cctrng_pm,
 	},
 	.probe = cctrng_probe,
-	.remove = cctrng_remove,
 };
 
 module_platform_driver(cctrng_driver);
-- 
2.43.7


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

end of thread, other threads:[~2026-11-14 17:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-14 17:03 [PATCH 0/2] hwrng: cctrng - simplify runtime pm Martin Kaiser
2026-11-14 17:03 ` [PATCH 1/2] hwrng: cctrng - simplify runtime pm refcount code Martin Kaiser
2026-11-14 17:03 ` [PATCH 2/2] hwrng: cctrng - use device-managed api for runtime pm Martin Kaiser

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®