Reviewed-by: Vabhav Sharma <vabhav.sharma@xxxxxxx> > -----Original Message----- > From: Fabio Estevam <festevam@xxxxxxxxx> > Sent: Wednesday, April 20, 2022 5:36 PM > To: herbert@xxxxxxxxxxxxxxxxxxx > Cc: Horia Geanta <horia.geanta@xxxxxxx>; Gaurav Jain > <gaurav.jain@xxxxxxx>; Varun Sethi <V.Sethi@xxxxxxx>; linux- > crypto@xxxxxxxxxxxxxxx; Fabio Estevam <festevam@xxxxxxx>; > stable@xxxxxxxxxxxxxxx > Subject: [PATCH v5] crypto: caam - fix i.MX6SX entropy delay value > > From: Fabio Estevam <festevam@xxxxxxx> > > Since commit 358ba762d9f1 ("crypto: caam - enable prediction resistance in > HRWNG") the following CAAM errors can be seen on i.MX6SX: > > caam_jr 2101000.jr: 20003c5b: CCB: desc idx 60: RNG: Hardware error > hwrng: no data available > > This error is due to an incorrect entropy delay for i.MX6SX. > > Fix it by increasing the minimum entropy delay for i.MX6SX as done in U-Boot: > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch > work.ozlabs.org%2Fproject%2Fuboot%2Fpatch%2F20220415111049.2565744- > 1- > gaurav.jain%40nxp.com%2F&data=05%7C01%7Cmeenakshi.aggarwal%4 > 0nxp.com%7Caf57d0186dde479aa9cf08da22c687d0%7C686ea1d3bc2b4c6fa92 > cd99c5c301635%7C0%7C0%7C637860533324307730%7CUnknown%7CTWFpb > GZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI > 6Mn0%3D%7C3000%7C%7C%7C&sdata=UhqjgESpgMhOhJS%2BT4ghI6y > NIvyybOI8yEv5%2FjKNcDE%3D&reserved=0 > > As explained in the U-Boot patch: > > "RNG self tests are run to determine the correct entropy delay. > Such tests are executed with different voltages and temperatures to identify > the worst case value for the entropy delay. For i.MX6SX, it was determined > that after adding a margin value of 1000 the minimum entropy delay should > be at least 12000." > > Cc: <stable@xxxxxxxxxxxxxxx> > Fixes: 358ba762d9f1 ("crypto: caam - enable prediction resistance in HRWNG") > Signed-off-by: Fabio Estevam <festevam@xxxxxxx> > Reviewed-by: Horia Geantă <horia.geanta@xxxxxxx> > --- > Changes since v4: > - Change the function name to needs_entropy_delay_adjustment() - > Vabhav > - Improve the commit log by adding the explanation from the U-Boot patch - > Vabhav > > drivers/crypto/caam/ctrl.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c index > ca0361b2dbb0..f87aa2169e5f 100644 > --- a/drivers/crypto/caam/ctrl.c > +++ b/drivers/crypto/caam/ctrl.c > @@ -609,6 +609,13 @@ static bool check_version(struct fsl_mc_version > *mc_version, u32 major, } #endif > > +static bool needs_entropy_delay_adjustment(void) > +{ > + if (of_machine_is_compatible("fsl,imx6sx")) > + return true; > + return false; > +} > + > /* Probe routine for CAAM top (controller) level */ static int > caam_probe(struct platform_device *pdev) { @@ -855,6 +862,8 @@ static > int caam_probe(struct platform_device *pdev) > * Also, if a handle was instantiated, do not change > * the TRNG parameters. > */ > + if (needs_entropy_delay_adjustment()) > + ent_delay = 12000; > if (!(ctrlpriv->rng4_sh_init || inst_handles)) { > dev_info(dev, > "Entropy delay = %u\n", > @@ -871,6 +880,15 @@ static int caam_probe(struct platform_device *pdev) > */ > ret = instantiate_rng(dev, inst_handles, > gen_sk); > + /* > + * Entropy delay is determined via TRNG > characterization. > + * TRNG characterization is run across different > voltages > + * and temperatures. > + * If worst case value for ent_dly is identified, > + * the loop can be skipped for that platform. > + */ > + if (needs_entropy_delay_adjustment()) > + break; > if (ret == -EAGAIN) > /* > * if here, the loop will rerun, > -- > 2.25.1