LFU-126-3 i.MX8M: Enable Job ring driver model in SPL and U-Boot.
authorGaurav Jain <gaurav.jain@nxp.com>
Tue, 27 Apr 2021 11:29:31 +0000 (16:59 +0530)
committerYe Li <ye.li@nxp.com>
Thu, 29 Apr 2021 12:06:41 +0000 (05:06 -0700)
i.MX8MM/MN/MP/MQ - added support for JR driver model.
sec is initialized based on job ring information processed
from device tree.

Signed-off-by: Gaurav Jain <gaurav.jain@nxp.com>
13 files changed:
arch/arm/Kconfig
arch/arm/dts/imx8mn-ddr4-evk-u-boot.dtsi
arch/arm/dts/imx8mn-evk-u-boot.dtsi
arch/arm/dts/imx8mp-evk-u-boot.dtsi
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/imx8m/Kconfig
arch/arm/mach-imx/imx8m/soc.c
arch/arm/mach-imx/misc.c
board/freescale/imx8mm_evk/spl.c
board/freescale/imx8mn_evk/spl.c
board/freescale/imx8mp_evk/spl.c
board/freescale/imx8mq_evk/spl.c
include/fsl_caam.h

index 0a1ed38..a09cf07 100644 (file)
@@ -839,13 +839,12 @@ config ARCH_IMX8
 config ARCH_IMX8M
        bool "NXP i.MX8M platform"
        select ARM64
-       select SYS_FSL_HAS_SEC if IMX_HAB
+       select SYS_FSL_HAS_SEC
        select SYS_FSL_SEC_COMPAT_4
        select SYS_FSL_SEC_LE
        select DM
        select SUPPORT_SPL
        imply CMD_DM
-       select IMX_SEC_INIT if HAS_CAAM
 
 config ARCH_IMXRT
        bool "NXP i.MXRT platform"
@@ -883,7 +882,6 @@ config ARCH_MX7ULP
        select SYS_FSL_SEC_COMPAT_4
        select SYS_FSL_SEC_LE
        select ROM_UNIFIED_SECTIONS
-       select IMX_SEC_INIT if HAS_CAAM
        imply MXC_GPIO
        imply SYS_THUMB_BUILD
 
@@ -895,7 +893,6 @@ config ARCH_MX7
        select SYS_FSL_SEC_COMPAT_4
        select SYS_FSL_SEC_LE
        imply BOARD_EARLY_INIT_F
-       select IMX_SEC_INIT if HAS_CAAM
        imply MXC_GPIO
        imply SYS_THUMB_BUILD
 
@@ -905,7 +902,6 @@ config ARCH_MX6
        select SYS_FSL_HAS_SEC
        select SYS_FSL_SEC_COMPAT_4
        select SYS_FSL_SEC_LE
-       select IMX_SEC_INIT if HAS_CAAM
        imply MXC_GPIO
        imply SYS_THUMB_BUILD
 
index 4ad7f07..c7d8dae 100644 (file)
        u-boot,dm-spl;
 };
 
+&crypto {
+       u-boot,dm-spl;
+};
+
+&sec_jr0 {
+       u-boot,dm-spl;
+};
+
+&sec_jr1 {
+       u-boot,dm-spl;
+};
+
+&sec_jr2 {
+       u-boot,dm-spl;
+};
+
 &usdhc1 {
        u-boot,dm-spl;
        assigned-clocks = <&clk IMX8MN_CLK_USDHC1>;
index 0c4e20d..20e2ffc 100644 (file)
        u-boot,dm-spl;
 };
 
+&crypto {
+       u-boot,dm-spl;
+};
+
+&sec_jr0 {
+       u-boot,dm-spl;
+};
+
+&sec_jr1 {
+       u-boot,dm-spl;
+};
+
+&sec_jr2 {
+       u-boot,dm-spl;
+};
+
 &usdhc1 {
        u-boot,dm-spl;
        assigned-clocks = <&clk IMX8MN_CLK_USDHC1>;
index 724ab36..20ae101 100644 (file)
        u-boot,dm-spl;
 };
 
+&crypto {
+       u-boot,dm-spl;
+};
+
+&sec_jr0 {
+       u-boot,dm-spl;
+};
+
+&sec_jr1 {
+       u-boot,dm-spl;
+};
+
+&sec_jr2 {
+       u-boot,dm-spl;
+};
+
 &i2c1 {
        u-boot,dm-spl;
 };
index 5fec385..f1bcf29 100644 (file)
@@ -21,14 +21,6 @@ config GPT_TIMER
 config FSL_CAAM_KB
        bool
 
-config IMX_SEC_INIT
-       bool
-       help
-               In most of i.MX board with CAAM this option is used
-               to init RNG from U-Boot
-       select FSL_CAAM_KB
-       select SPL_CRYPTO_SUPPORT if SPL
-
 config IMX_RDC
        bool "i.MX Resource domain controller driver"
        depends on ARCH_MX6 || ARCH_MX7
index cfd64d2..9e5b6d7 100644 (file)
@@ -54,6 +54,10 @@ config TARGET_IMX8MQ_EVK
        bool "imx8mq_evk"
        select IMX8MQ
        select IMX8M_LPDDR4
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_IMX8MQ_PHANBELL
         bool "imx8mq_phanbell"
@@ -86,6 +90,10 @@ config TARGET_IMX8MM_EVK
        select IMX8MM
        select SUPPORT_SPL
        select IMX8M_LPDDR4
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_IMX8MM_VENICE
        bool "Support Gateworks Venice iMX8M Mini module"
@@ -104,30 +112,50 @@ config TARGET_IMX8MM_DDR4_EVK
        select IMX8MM
        select SUPPORT_SPL
        select IMX8M_DDR4
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_IMX8MN_EVK
        bool "imx8mn LPDDR4 EVK board"
        select IMX8MN
        select SUPPORT_SPL
        select IMX8M_LPDDR4
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_IMX8MN_DDR4_EVK
        bool "imx8mn DDR4 EVK board"
        select IMX8MN
        select SUPPORT_SPL
        select IMX8M_DDR4
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_IMX8MN_DDR3_EVK
        bool "imx8mn 11x11 DDR3 EVK board"
        select IMX8MN
        select SUPPORT_SPL
        select IMX8M_DDR3L
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_IMX8MP_EVK
        bool "imx8mp LPDDR4 EVK board"
        select IMX8MP
        select SUPPORT_SPL
        select IMX8M_LPDDR4
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_PICO_IMX8MQ
        bool "Support Technexion Pico iMX8MQ"
@@ -139,6 +167,10 @@ config TARGET_IMX8MP_DDR4_EVK
        select IMX8MP
        select SUPPORT_SPL
        select IMX8M_DDR4
+       select FSL_CAAM
+       select FSL_BLOB
+       select MISC
+       select SPL_CRYPTO_SUPPORT if SPL
 
 config TARGET_VERDIN_IMX8MM
        bool "Support Toradex Verdin iMX8M Mini module"
index 82038ab..9422324 100644 (file)
@@ -21,6 +21,9 @@
 #include <asm/ptrace.h>
 #include <asm/armv8/mmu.h>
 #include <dm/uclass.h>
+#include <dm/platdata.h>
+#include <dm/uclass-internal.h>
+#include <dm/device-internal.h>
 #include <efi_loader.h>
 #include <env.h>
 #include <env_internal.h>
@@ -32,9 +35,6 @@
 #include <linux/bitops.h>
 #include <asm/setup.h>
 #include <asm/bootm.h>
-#ifdef CONFIG_IMX_SEC_INIT
-#include <fsl_caam.h>
-#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -571,10 +571,6 @@ int arch_cpu_init(void)
                }
        }
 
-#ifdef CONFIG_IMX_SEC_INIT
-       /* Secure init function such RNG */
-       imx_sec_init();
-#endif
 #if defined(CONFIG_ANDROID_SUPPORT)
        /* Enable RTC */
        writel(0x21, 0x30370038);
@@ -1198,6 +1194,14 @@ static void acquire_buildinfo(void)
 
 int arch_misc_init(void)
 {
+       struct udevice *dev;
+
+       uclass_find_first_device(UCLASS_MISC, &dev);
+       for (; dev; uclass_find_next_device(&dev)) {
+               if (device_probe(dev))
+                       continue;
+       }
+
        acquire_buildinfo();
 
        return 0;
index a4f57b6..9f53cc2 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/errno.h>
 #include <asm/io.h>
 #include <asm/mach-imx/regs-common.h>
-#include <fsl_caam.h>
 #include <fdt_support.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -124,13 +123,6 @@ void configure_tzc380(void)
 #endif
 }
 
-void imx_sec_init(void)
-{
-#if defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL)
-       caam_open();
-#endif
-}
-
 static void set_dt_val(void *data, uint32_t cell_size, uint64_t val)
 {
        if (cell_size == 1) {
index 7a3f83e..4ca63ff 100644 (file)
@@ -29,6 +29,7 @@
 #include <asm/mach-imx/gpio.h>
 #include <asm/mach-imx/mxc_i2c.h>
 #include <fsl_esdhc_imx.h>
+#include <fsl_sec.h>
 #include <mmc.h>
 #include <linux/delay.h>
 
@@ -267,6 +268,11 @@ int power_init_board(void)
 
 void spl_board_init(void)
 {
+#ifdef CONFIG_FSL_CAAM
+       if (sec_init()) {
+               printf("\nsec_init failed!\n");
+       }
+#endif
 #ifndef CONFIG_SPL_USB_SDP_SUPPORT
        /* Serial download mode */
        if (is_usb_boot()) {
index 3c9426a..3a6b47c 100644 (file)
@@ -143,6 +143,13 @@ int power_init_board(void)
 
 void spl_board_init(void)
 {
+       struct udevice *dev;
+       uclass_find_first_device(UCLASS_MISC, &dev);
+
+       for (; dev; uclass_find_next_device(&dev)) {
+               if (device_probe(dev))
+                       continue;
+       }
        puts("Normal Boot\n");
 }
 
index 4d145f7..a5e315a 100644 (file)
@@ -94,6 +94,14 @@ int power_init_board(void)
 
 void spl_board_init(void)
 {
+       struct udevice *dev;
+       uclass_find_first_device(UCLASS_MISC, &dev);
+
+       for (; dev; uclass_find_next_device(&dev)) {
+               if (device_probe(dev))
+                       continue;
+       }
+
        /* Set GIC clock to 500Mhz for OD VDD_SOC. Kernel driver does not allow to change it.
         * Should set the clock after PMIC setting done.
         * Default is 400Mhz (system_pll1_800m with div = 2) set by ROM for ND VDD_SOC
index dd9e607..4dd8613 100644 (file)
@@ -23,6 +23,7 @@
 #include <asm/mach-imx/gpio.h>
 #include <asm/mach-imx/mxc_i2c.h>
 #include <fsl_esdhc_imx.h>
+#include <fsl_sec.h>
 #include <mmc.h>
 #include <linux/delay.h>
 #include <power/pmic.h>
@@ -200,6 +201,11 @@ int power_init_board(void)
 
 void spl_board_init(void)
 {
+#ifdef CONFIG_FSL_CAAM
+       if (sec_init()) {
+               printf("\nsec_init failed!\n");
+       }
+#endif
 #ifndef CONFIG_SPL_USB_SDP_SUPPORT
        /* Serial download mode */
        if (is_usb_boot()) {
index 4650bf2..29f5ca1 100644 (file)
@@ -50,7 +50,6 @@
 //!
 ////////////////////////////////////////////////////////////////////////////////
 void caam_open(void);
-void imx_sec_init(void);
 
 ////////////////////////////////////////////////////////////////////////////////
 //! @brief Generate a blob of a secure key.