]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
rng: msm: don't enable PRNG if it's already enabled
authorSam Day <me@samcday.com>
Wed, 12 Feb 2025 07:01:39 +0000 (07:01 +0000)
committerCaleb Connolly <caleb.connolly@linaro.org>
Mon, 17 Mar 2025 13:38:18 +0000 (13:38 +0000)
msm_rng_enable is supposed to skip writing to LFSR_CFG + CONFIG
registers in the PRNG_ block if PRNG_CONFIG_HW_ENABLE is already set.
The logic to test for this was inverted.

Without this fix, the driver was causing SError aborts on my MSM8916
device. Stephan Gerhold suggested this was probably because TZ has
marked this as a protected register, since it would also be using it for
RNG.

Fixes: 033ec636fcb ("rng: Add Qualcomm MSM PRNG driver")
Suggested-by: Stephan Gerhold <stephan.gerhold@linaro.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Sam Day <me@samcday.com>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
Link: https://lore.kernel.org/r/20250212-msm-rng-fixes-v2-3-645cf8d3fd3c@samcday.com
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
drivers/rng/msm_rng.c

index f790d3b60f99bfc04ecd9acdd21405a8c38c257a..01505509103f28f7c91dd47edb83c23359163c82 100644 (file)
@@ -76,7 +76,7 @@ static int msm_rng_enable(struct msm_rng_priv *priv, int enable)
        if (enable) {
                /* Enable PRNG only if it is not already enabled */
                val = readl_relaxed(priv->base + PRNG_CONFIG);
-               if (val & PRNG_CONFIG_HW_ENABLE) {
+               if (!(val & PRNG_CONFIG_HW_ENABLE)) {
                        val = readl_relaxed(priv->base + PRNG_LFSR_CFG);
                        val &= ~PRNG_LFSR_CFG_MASK;
                        val |= PRNG_LFSR_CFG_CLOCKS;