ctrl = (struct caam_ctrl __iomem *)ctrlpriv->ctrl;
        r4tst = &ctrl->r4tst[0];
 
-       /* put RNG4 into program mode */
-       clrsetbits_32(&r4tst->rtmctl, 0, RTMCTL_PRGM);
+       /*
+        * Setting both RTMCTL:PRGM and RTMCTL:TRNG_ACC causes TRNG to
+        * properly invalidate the entropy in the entropy register and
+        * force re-generation.
+        */
+       clrsetbits_32(&r4tst->rtmctl, 0, RTMCTL_PRGM | RTMCTL_ACC);
 
        /*
         * Performance-wise, it does not make sense to
         * select raw sampling in both entropy shifter
         * and statistical checker; ; put RNG4 into run mode
         */
-       clrsetbits_32(&r4tst->rtmctl, RTMCTL_PRGM, RTMCTL_SAMP_MODE_RAW_ES_SC);
+       clrsetbits_32(&r4tst->rtmctl, RTMCTL_PRGM | RTMCTL_ACC,
+                     RTMCTL_SAMP_MODE_RAW_ES_SC);
 }
 
 static int caam_get_era_from_hw(struct caam_ctrl __iomem *ctrl)
 
 
 /* RNG4 TRNG test registers */
 struct rng4tst {
-#define RTMCTL_PRGM    0x00010000      /* 1 -> program mode, 0 -> run mode */
+#define RTMCTL_ACC  BIT(5)  /* TRNG access mode */
+#define RTMCTL_PRGM BIT(16) /* 1 -> program mode, 0 -> run mode */
 #define RTMCTL_SAMP_MODE_VON_NEUMANN_ES_SC     0 /* use von Neumann data in
                                                     both entropy shifter and
                                                     statistical checker */