Thread (10 messages) 10 messages, 3 authors, 2019-12-11

Re: [PATCH 1/2] crypto: caam: Change the i.MX8MQ check support all i.MX8M variants

From: Adam Ford <hidden>
Date: 2019-12-11 14:27:29
Also in: linux-crypto, linux-devicetree, lkml

On Wed, Dec 11, 2019 at 8:23 AM Schrempf Frieder
[off-list ref] wrote:
On 10.12.19 08:56, Horia Geanta wrote:
quoted
On 12/6/2019 9:55 PM, Adam Ford wrote:
quoted
On Wed, Dec 4, 2019 at 5:38 AM Schrempf Frieder
[off-list ref] wrote:
quoted
Hi Adam,

On 30.11.19 23:51, Adam Ford wrote:
quoted
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 <redacted>
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.
quoted
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")
quoted
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.
I appreciate it too.
Adam, can you update your patch to enable the code in
run_descriptor_deco0() for i.MX8MM?
I will work on that.  I have been trying to get the mainline U-Boot to
start correctly, because I wanted to see if/how this interacted. I'll
try to get a V2 pushed today.
If I understand this correctly, this is necessary to have the RNG
initialize correctly no matter what version of U-Boot is used.
That makes sense based on Horia's feedback.  With the holidays this
month, my spare time and weekends have been full.

adam
Thanks,
Frieder
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help