summaryrefslogtreecommitdiff
path: root/drivers/rng
diff options
context:
space:
mode:
authorSam Day <me@samcday.com>2025-02-12 07:01:55 +0000
committerCaleb Connolly <caleb.connolly@linaro.org>2025-03-17 13:38:18 +0000
commit2babb61428dcb55067a81f88bbc2124924807345 (patch)
tree0ea7959468e52b9a3ff757d6033713ac56bfcffe /drivers/rng
parentdc8754e8e40813ee39f061506fba27115363061f (diff)
rng: msm: keep core clock disabled when PRNG not in use
This is how the kernel does it. APQ8016E TRM also states that this clock can be turned off when no random numbers are needed. Signed-off-by: Sam Day <me@samcday.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> Link: https://lore.kernel.org/r/20250212-msm-rng-fixes-v2-5-645cf8d3fd3c@samcday.com Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
Diffstat (limited to 'drivers/rng')
-rw-r--r--drivers/rng/msm_rng.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/rng/msm_rng.c b/drivers/rng/msm_rng.c
index 01505509103..aab602c5ed0 100644
--- a/drivers/rng/msm_rng.c
+++ b/drivers/rng/msm_rng.c
@@ -44,6 +44,11 @@ static int msm_rng_read(struct udevice *dev, void *data, size_t len)
u32 *retdata = data;
size_t maxsize;
u32 val;
+ int ret;
+
+ ret = clk_enable(&priv->clk);
+ if (ret < 0)
+ return ret;
/* calculate max size bytes to transfer back to caller */
maxsize = min_t(size_t, MAX_HW_FIFO_SIZE, len);
@@ -66,6 +71,8 @@ static int msm_rng_read(struct udevice *dev, void *data, size_t len)
break;
} while (currsize < maxsize);
+ clk_disable(&priv->clk);
+
return 0;
}
@@ -118,7 +125,9 @@ static int msm_rng_probe(struct udevice *dev)
if (ret < 0)
return ret;
- return msm_rng_enable(priv, 1);
+ ret = msm_rng_enable(priv, 1);
+ clk_disable(&priv->clk);
+ return ret;
}
static int msm_rng_remove(struct udevice *dev)