From: Matthias Brugger <mbrug...@suse.com>

When trying to disable the block we bitwise or the control
register with value zero. This will leave the block always turned on.
Fix this by setting the corresponding bit to zero.

Fixes: c83d45d5685f ("hwrng: iproc-rng200 - Add Broadcom IPROC RNG driver")
Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---

 drivers/char/hw_random/iproc-rng200.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/char/hw_random/iproc-rng200.c 
b/drivers/char/hw_random/iproc-rng200.c
index 01583faf9893..e106ce3c0146 100644
--- a/drivers/char/hw_random/iproc-rng200.c
+++ b/drivers/char/hw_random/iproc-rng200.c
@@ -28,7 +28,6 @@
 #define RNG_CTRL_OFFSET                                        0x00
 #define RNG_CTRL_RNG_RBGEN_MASK                                0x00001FFF
 #define RNG_CTRL_RNG_RBGEN_ENABLE                      0x00000001
-#define RNG_CTRL_RNG_RBGEN_DISABLE                     0x00000000
 
 #define RNG_SOFT_RESET_OFFSET                          0x04
 #define RNG_SOFT_RESET                                 0x00000001
@@ -61,7 +60,7 @@ static void iproc_rng200_restart(void __iomem *rng_base)
        /* Disable RBG */
        val = ioread32(rng_base + RNG_CTRL_OFFSET);
        val &= ~RNG_CTRL_RNG_RBGEN_MASK;
-       val |= RNG_CTRL_RNG_RBGEN_DISABLE;
+       val &= ~RNG_CTRL_RNG_RBGEN_ENABLE;
        iowrite32(val, rng_base + RNG_CTRL_OFFSET);
 
        /* Clear all interrupt status */
@@ -174,7 +173,7 @@ static void iproc_rng200_cleanup(struct hwrng *rng)
        /* Disable RNG hardware */
        val = ioread32(priv->base + RNG_CTRL_OFFSET);
        val &= ~RNG_CTRL_RNG_RBGEN_MASK;
-       val |= RNG_CTRL_RNG_RBGEN_DISABLE;
+       val &= ~RNG_CTRL_RNG_RBGEN_ENABLE;
        iowrite32(val, priv->base + RNG_CTRL_OFFSET);
 }
 
-- 
2.29.2

Reply via email to