MLK-17915: cmd: blob: Instantiate RNG before running CMD_BLOB
authorBreno Lima <breno.lima@nxp.com>
Fri, 23 Mar 2018 20:05:47 +0000 (17:05 -0300)
committerYe Li <ye.li@nxp.com>
Mon, 2 Apr 2018 02:41:33 +0000 (19:41 -0700)
U-Boot can instantiate CAAM RNG if needed by crypto operations.
Call sec_init() prior running a blob operation to ensure
RNG is correctly instantiated.

Make sure CAAM clock is enabled and check if a job ring is
available for that operation.

Signed-off-by: Breno Lima <breno.lima@nxp.com>
Reviewed-by: Ye Li <ye.li@nxp.com>
(cherry picked from commit b2b745515d06f05ea288524e26cf2389d6924ff2)

cmd/blob.c
include/fsl_sec.h

index bdd4cfd..8d96fd6 100644 (file)
 #include <malloc.h>
 #include <asm/byteorder.h>
 #include <linux/compiler.h>
+#if defined(CONFIG_ARCH_MX6) || defined(CONFIG_ARCH_MX7)
+#include <fsl_sec.h>
+#include <asm/arch/clock.h>
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -77,6 +81,16 @@ static int do_blob(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
        src_ptr = (uint8_t *)(uintptr_t)src_addr;
        dst_ptr = (uint8_t *)(uintptr_t)dst_addr;
 
+#if defined(CONFIG_ARCH_MX6) || defined(CONFIG_ARCH_MX7)
+
+       hab_caam_clock_enable(1);
+
+       u32 out_jr_size = sec_in32(CONFIG_SYS_FSL_JR0_ADDR +
+                                  FSL_CAAM_ORSR_JRa_OFFSET);
+       if (out_jr_size != FSL_CAAM_MAX_JR_SIZE)
+               sec_init();
+#endif
+
        if (enc)
                ret = blob_encap(km_ptr, src_ptr, dst_ptr, len);
        else
index fc0603b..2b23216 100644 (file)
@@ -298,6 +298,9 @@ struct sg_entry {
 #define FSL_CAAM_MP_PRVK_BYTES             32
 #define FSL_CAAM_MP_MES_DGST_BYTES         32
 
+#define FSL_CAAM_ORSR_JRa_OFFSET       0x102c
+#define FSL_CAAM_MAX_JR_SIZE           4
+
 /* blob_dek:
  * Encapsulates the src in a secure blob and stores it dst
  * @src: reference to the plaintext