On 4/18/2022 3:27 PM, Fabio Estevam wrote: > 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 > caam_jr 2101000.jr: 20003c5b: CCB: desc idx 60: RNG: Hardware error > > 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://patchwork.ozlabs.org/project/uboot/patch/20220415111049.2565744-1-gaurav.jain@xxxxxxx/ > > Fixes: 358ba762d9f1 ("crypto: caam - enable prediction resistance in HRWNG") > Signed-off-by: Fabio Estevam <festevam@xxxxxxx> > --- > Changes since v2: > - Added Fixes tag. (Horia) > > Change since v1: > - Align the fix with U-Boot. > > drivers/crypto/caam/ctrl.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c > index ca0361b2dbb0..c515c20442d5 100644 > --- a/drivers/crypto/caam/ctrl.c > +++ b/drivers/crypto/caam/ctrl.c > @@ -648,6 +648,8 @@ static int caam_probe(struct platform_device *pdev) > return ret; > } > > + if (of_machine_is_compatible("fsl,imx6sx")) > + ent_delay = 12000; > This looks rather randomly placed in the probe() function. I'd suggest moving it into the RNG initialization area. Another benefit would be calling of_machine_is_compatible() only once. > /* Get configuration properties from device tree */ > /* First, get register page */ > @@ -871,6 +873,15 @@ static int caam_probe(struct platform_device *pdev) > */ > ret = instantiate_rng(dev, inst_handles, > gen_sk); > + /* > + * Entropy delay is calculated via self-test method. > + * Self-test is run across different voltages and > + * temperatures. A clarification wrt. terminology: -"self-tests" refer to HW checks done when initializing the RNG (instantiating the RNG state handle), they are statistical tests to check the quality of the entropy -"TRNG characterization" is the offline process of determining the entropy delay values that are "suitable" - i.e. allowing TRNG to work correctly across ranges of temperature, voltage and clock frequency > + * If worst case value for ent_dly is identified, > + * the loop can be skipped for that platform. > + */ > + if (of_machine_is_compatible("fsl,imx6sx")) > + break; > if (ret == -EAGAIN) > /* > * if here, the loop will rerun, Thanks, Horia