64 lines
2.3 KiB
Diff
64 lines
2.3 KiB
Diff
From e1a89cdf6fa6b04806eb24b939738bb89ab62914 Mon Sep 17 00:00:00 2001
|
|
From: Aymen Sghaier <aymen.sghaier@nxp.com>
|
|
Date: Thu, 13 Sep 2018 16:41:03 +0200
|
|
Subject: [PATCH] MLK-19053 crypto: caam - RNG4 TRNG errata
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The TRNG as used in RNG4, used in CAAM has a documentation issue. The
|
|
effect is that it is possible that the entropy used to instantiate the
|
|
DRBG may be old entropy, rather than newly generated entropy. There is
|
|
proper programming guidance, but it is not in the documentation.
|
|
|
|
Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
|
|
Signed-off-by: Vipul Kumar <vipul_kumar@mentor.com>
|
|
(cherry picked from commit ea2b30c8171acf7624e3d44276737c3878ca900d)
|
|
|
|
-ported to RNG initialization in ctrl.c
|
|
-changed commit headline
|
|
|
|
Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
|
|
---
|
|
drivers/crypto/caam/ctrl.c | 9 +++++++--
|
|
drivers/crypto/caam/regs.h | 3 ++-
|
|
2 files changed, 9 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/crypto/caam/ctrl.c
|
|
+++ b/drivers/crypto/caam/ctrl.c
|
|
@@ -339,7 +339,11 @@ static void kick_trng(struct platform_de
|
|
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
|
|
@@ -369,7 +373,8 @@ start_rng:
|
|
* 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)
|
|
--- a/drivers/crypto/caam/regs.h
|
|
+++ b/drivers/crypto/caam/regs.h
|
|
@@ -492,7 +492,8 @@ struct rngtst {
|
|
|
|
/* 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 */
|