]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
hwrng: stm32 - support RNG configuration locking mechanism
authorGatien Chevallier <gatien.chevallier@foss.st.com>
Thu, 21 Sep 2023 08:02:59 +0000 (10:02 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 1 Oct 2023 08:28:15 +0000 (16:28 +0800)
If "st,rng-lock-conf" DT binding property is set for a stm32-rng node,
the RNG configuration will be locked until next hardware block reset
or platform reset.

Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/char/hw_random/stm32-rng.c

index 819f062f454d45774ef33eb68951d23acf238063..4a602d666dadfe2696c43ff35e0131d5e68a2703 100644 (file)
@@ -62,6 +62,7 @@ struct stm32_rng_private {
        struct reset_control *rst;
        const struct stm32_rng_data *data;
        bool ced;
+       bool lock_conf;
 };
 
 /*
@@ -301,6 +302,9 @@ static int stm32_rng_init(struct hwrng *rng)
 
                reg &= ~RNG_CR_CONDRST;
                reg |= RNG_CR_RNGEN;
+               if (priv->lock_conf)
+                       reg |= RNG_CR_CONFLOCK;
+
                writel_relaxed(reg, priv->base + RNG_CR);
 
                err = readl_relaxed_poll_timeout_atomic(priv->base + RNG_CR, reg,
@@ -439,6 +443,7 @@ static int stm32_rng_probe(struct platform_device *ofdev)
        }
 
        priv->ced = of_property_read_bool(np, "clock-error-detect");
+       priv->lock_conf = of_property_read_bool(np, "st,rng-lock-conf");
 
        priv->data = of_device_get_match_data(dev);
        if (!priv->data)