crypto: caam - disable RNG oscillator maximum frequency check
authorAlex Porosanu <alexandru.porosanu@freescale.com>
Mon, 11 Aug 2014 08:40:15 +0000 (11:40 +0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 25 Aug 2014 12:32:34 +0000 (20:32 +0800)
The rtfrqmax & rtfrqmin set the bounds of the expected frequency of the
oscillator, when SEC runs at its maximum frequency. For certain platforms
(f.i. T2080), the oscillator is very fast and thus if the SEC runs at
a lower than normal frequency, the ring oscillator is incorrectly detected
as being out of bounds.

This patch effectively disables the maximum frequency check, by setting a
high enough maximum allowable frequency for the oscillator. The reasoning
behind this is that usually a broken oscillator will run too slow
(i.e. not run at all) rather than run too fast.

Signed-off-by: Alex Porosanu <alexandru.porosanu@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/ctrl.c
drivers/crypto/caam/regs.h

index 3cade79ea41e2ec5e85ec390a2995bcccb3f88ec..8908d040b1f22c208e2aa0bbefe68c69cd6e7cc3 100644 (file)
@@ -355,8 +355,8 @@ static void kick_trng(struct platform_device *pdev, int ent_delay)
        wr_reg32(&r4tst->rtsdctl, val);
        /* min. freq. count, equal to 1/4 of the entropy sample length */
        wr_reg32(&r4tst->rtfrqmin, ent_delay >> 2);
-       /* max. freq. count, equal to 8 times the entropy sample length */
-       wr_reg32(&r4tst->rtfrqmax, ent_delay << 3);
+       /* disable maximum frequency count */
+       wr_reg32(&r4tst->rtfrqmax, RTFRQMAX_DISABLE);
        /* put RNG4 into run mode */
        clrbits32(&r4tst->rtmctl, RTMCTL_PRGM);
 }
index f48e344ffc3930af2f13a83283dcec1baab9fa66..b8bd980ac00ab8843ed35c054ed3111d39329795 100644 (file)
@@ -286,6 +286,7 @@ struct rng4tst {
                u32 rttotsam;   /* PRGM=0: total samples register */
        };
        u32 rtfrqmin;           /* frequency count min. limit register */
+#define RTFRQMAX_DISABLE       (1 << 20)
        union {
                u32 rtfrqmax;   /* PRGM=1: freq. count max. limit register */
                u32 rtfrqcnt;   /* PRGM=0: freq. count register */