On 10.12.19 08:56, Horia Geanta wrote: > On 12/6/2019 9:55 PM, Adam Ford wrote: >> On Wed, Dec 4, 2019 at 5:38 AM Schrempf Frieder >> <frieder.schrempf@xxxxxxxxxx> wrote: >>> >>> Hi Adam, >>> >>> On 30.11.19 23:51, Adam Ford wrote: >>>> The i.MX8M Mini uses the same crypto engine as the i.MX8MQ, but >>>> the driver is restricting the check to just the i.MX8MQ. >>>> >>>> This patch lets the driver support all i.MX8M Variants if enabled. >>>> >>>> Signed-off-by: Adam Ford <aford173@xxxxxxxxx> >>> >>> What about the following lines in run_descriptor_deco0()? Does this >>> condition also apply to i.MX8MM? >> >> I think that's a question for NXP. I am not seeing that in the NXP >> Linux Release, and I don't have an 8MQ to compare. >> > IIRC the i.MX BSP releases use the JRI for initializing the RNG, > and not the DECO register interface. > >> I was able to get the driver working on the i.MXMM with the patch. >> > You are probably using a newer U-boot, which includes > commit dfaec76029f2 ("crypto/fsl: instantiate all rng state handles") > >> NXP Team, >> >> Do you have any opinions on this? >> > Since current U-boot initializes both RNG state handles, practically > instantiate_rng() is a no-op. > > A simple experiment is to "lie" about the state_handle_mask, to exercise > the DECO acquire code (or, as mentioned above, to run with an older U-boot): > > @@ -268,12 +272,19 @@ static int instantiate_rng(struct device *ctrldev, int state_handle_mask, > struct caam_ctrl __iomem *ctrl; > u32 *desc, status = 0, rdsta_val; > int ret = 0, sh_idx; > + static int force_init = 1; > > ctrl = (struct caam_ctrl __iomem *)ctrlpriv->ctrl; > desc = kmalloc(CAAM_CMD_SZ * 7, GFP_KERNEL); > if (!desc) > return -ENOMEM; > > + if (force_init && (state_handle_mask == 0x3)) { > + dev_err(ctrldev, "Forcing reinit of RNG state handle 0!\n"); > + force_init = 0; > + state_handle_mask = 0x2; > + } > + > for (sh_idx = 0; sh_idx < RNG4_MAX_HANDLES; sh_idx++) { > /* > * If the corresponding bit is set, this state handle > > In this case boot log confirms the DECO cannot be acquired: > [ 2.137101] caam 30900000.crypto: Forcing reinit of RNG state handle 0! > [ 2.172293] caam 30900000.crypto: failed to acquire DECO 0 > [ 2.177786] caam 30900000.crypto: failed to instantiate RNG > > To sum up, writing to DECORSR is mandatory. Thanks Horia for providing the details. Adam, can you update your patch to enable the code in run_descriptor_deco0() for i.MX8MM? If I understand this correctly, this is necessary to have the RNG initialize correctly no matter what version of U-Boot is used. Thanks, Frieder