MA-15208 Remap mmc device id in spl
authorJi Luo <ji.luo@nxp.com>
Wed, 24 Jul 2019 03:52:18 +0000 (11:52 +0800)
committerJi Luo <ji.luo@nxp.com>
Thu, 25 Jul 2019 09:06:00 +0000 (17:06 +0800)
MMC device id remap function "board_mmc_get_env_dev()" was
removed in u-boot v2019 because we add the mmc device aliases
in dts file. But we still need to remap the mmc device id in
spl or read/write rpmb keyslot package will fail.

This patch adds mmc device id remap function in spl to get the
correct device id.

Test: boot on imx8mm with trusty enabled.

Change-Id: I41c46494326d9eb2658d2cda692968fb895d0292
Signed-off-by: Ji Luo <ji.luo@nxp.com>
configs/imx8mm_evk_4g_android_trusty_defconfig
configs/imx8mm_evk_android_trusty_defconfig
configs/imx8mn_ddr4_evk_android_trusty_defconfig
configs/imx8mq_aiy_android_trusty_defconfig
configs/imx8qm_mek_androidauto2_trusty_defconfig
configs/imx8qm_mek_androidauto_trusty_defconfig
configs/imx8qxp_mek_androidauto2_trusty_defconfig
configs/imx8qxp_mek_androidauto_trusty_defconfig
include/configs/imx8mm_evk_android.h
include/configs/imx8mn_evk_android.h
lib/avb/fsl/fsl_avbkey.c

index c0d2ef5..8f24826 100755 (executable)
@@ -68,7 +68,6 @@ CONFIG_SPL_USB_HOST_SUPPORT=y
 CONFIG_SPL_USB_GADGET_SUPPORT=y
 CONFIG_SPL_USB_SDP_SUPPORT=y
 CONFIG_IMX_TRUSTY_OS=y
-CONFIG_SPL_ENV_SUPPORT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 
 CONFIG_SPL_USB_GADGET=y
index 1c81c6e..c5217de 100755 (executable)
@@ -68,7 +68,6 @@ CONFIG_SPL_USB_HOST_SUPPORT=y
 CONFIG_SPL_USB_GADGET_SUPPORT=y
 CONFIG_SPL_USB_SDP_SUPPORT=y
 CONFIG_IMX_TRUSTY_OS=y
-CONFIG_SPL_ENV_SUPPORT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 
 CONFIG_SPL_USB_GADGET=y
index 7524f02..c9bc61d 100644 (file)
@@ -87,4 +87,3 @@ CONFIG_LIBAVB=y
 CONFIG_FLASH_MCUFIRMWARE_SUPPORT=y
 CONFIG_IMX_TRUSTY_OS=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
-CONFIG_SPL_ENV_SUPPORT=y
index ab66327..6c01a95 100644 (file)
@@ -9,7 +9,6 @@ CONFIG_SPL=y
 CONFIG_FIT=y
 CONFIG_FIT_EXTERNAL_OFFSET=0x3000
 CONFIG_SPL_LOAD_FIT=y
-CONFIG_SPL_ENV_SUPPORT=y
 CONFIG_SPL_MMC_SUPPORT=y
 CONFIG_SPL_MMC_WRITE=y
 CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh"
index 9c92bd2..66c4120 100644 (file)
@@ -12,7 +12,6 @@ CONFIG_SPL_DOS_PARTITION=n
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
-CONFIG_SPL_ENV_SUPPORT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_SPL=y
index d6cc3ca..b18e3d5 100644 (file)
@@ -12,7 +12,6 @@ CONFIG_SPL_DOS_PARTITION=n
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
-CONFIG_SPL_ENV_SUPPORT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_SPL=y
index 9d6de1b..420e33e 100644 (file)
@@ -12,7 +12,6 @@ CONFIG_SPL_DOS_PARTITION=n
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
-CONFIG_SPL_ENV_SUPPORT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_SPL=y
index 43026c6..264dc2d 100644 (file)
@@ -12,7 +12,6 @@ CONFIG_SPL_DOS_PARTITION=n
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
-CONFIG_SPL_ENV_SUPPORT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_SPL=y
index da168a2..23891cf 100644 (file)
 #define KEYSLOT_BLKS             0x1FFF
 #define NS_ARCH_ARM64 1
 
-#ifdef CONFIG_SPL_BUILD
-#undef CONFIG_BLK
-#endif
-
 #endif
 
 /* Enable CONFIG_ANDROID_LOW_MEMORY to config 1GB ddr */
index 57d1337..fa12760 100644 (file)
 #define KEYSLOT_BLKS             0x1FFF
 #define NS_ARCH_ARM64 1
 
-#ifdef CONFIG_SPL_BUILD
-#undef CONFIG_BLK
-#endif
-
 #endif
 
 #endif /* IMX8MN_EVK_ANDROID_H */
index 0dd24ff..b971530 100644 (file)
@@ -30,8 +30,7 @@
 #ifdef CONFIG_ARCH_IMX8
 #include <asm/arch/sci/sci.h>
 #endif
-
-#if defined(CONFIG_SPL_BUILD)
+#ifdef CONFIG_SPL_BUILD
 #include <spl.h>
 #endif
 
 
 extern int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value);
 
-#ifdef AVB_RPMB
-static int mmc_dev_no = -1;
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_MMC_SUPPORT)
+int spl_get_mmc_dev(void)
+{
+       u32 dev_no = spl_boot_device();
+       switch (dev_no) {
+       case BOOT_DEVICE_MMC1:
+               return 0;
+       case BOOT_DEVICE_MMC2:
+       case BOOT_DEVICE_MMC2_2:
+               return 1;
+       }
+
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+       printf("spl: unsupported mmc boot device.\n");
+#endif
 
+       return -ENODEV;
+}
+#endif
+
+#ifdef AVB_RPMB
 struct mmc *get_mmc(void) {
-       extern int mmc_get_env_devno(void);
+       int mmc_dev_no;
        struct mmc *mmc;
-       if (mmc_dev_no < 0 && (mmc_dev_no = mmc_get_env_dev()) < 0)
-               return NULL;
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_MMC_SUPPORT)
+       mmc_dev_no = spl_get_mmc_dev();
+#else
+       mmc_dev_no = mmc_get_env_dev();
+#endif
        mmc = find_mmc_device(mmc_dev_no);
        if (!mmc || mmc_init(mmc))
                return NULL;
@@ -70,33 +90,14 @@ void fill_secure_keyslot_package(struct keyslot_package *kp) {
                                0x100));
 }
 
-#if defined(CONFIG_SPL_BUILD)
-static int spl_mmc_get_device_index(u32 boot_device)
-{
-       switch (boot_device) {
-       case BOOT_DEVICE_MMC1:
-               return 0;
-       case BOOT_DEVICE_MMC2:
-       case BOOT_DEVICE_MMC2_2:
-               return 1;
-       }
-
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
-       printf("spl: unsupported mmc boot device.\n");
-#endif
-
-       return -ENODEV;
-}
-#endif
-
 int read_keyslot_package(struct keyslot_package* kp) {
        char original_part;
        int blksz;
        unsigned char* fill = NULL;
        int ret = 0;
        /* load tee from boot1 of eMMC. */
-#if defined(CONFIG_SPL_BUILD)
-       int mmcc = spl_mmc_get_device_index(spl_boot_device());
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_MMC_SUPPORT)
+       int mmcc = spl_get_mmc_dev();
 #else
        int mmcc = mmc_get_env_dev();
 #endif
@@ -184,7 +185,11 @@ bool rpmbkey_is_set(void)
        struct blk_desc *desc = NULL;
 
        /* Get current mmc device. */
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_MMC_SUPPORT)
+       mmcc = spl_get_mmc_dev();
+#else
        mmcc = mmc_get_env_dev();
+#endif
        mmc = find_mmc_device(mmcc);
        if (!mmc) {
                printf("error - cannot find '%d' mmc device\n", mmcc);
@@ -580,7 +585,11 @@ int gen_rpmb_key(struct keyslot_package *kp) {
 
        int ret = -1;
        /* load tee from boot1 of eMMC. */
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_MMC_SUPPORT)
+       int mmcc = spl_get_mmc_dev();
+#else
        int mmcc = mmc_get_env_dev();
+#endif
        struct blk_desc *dev_desc = NULL;
 
        struct mmc *mmc;
@@ -1170,7 +1179,11 @@ int do_rpmb_key_set(uint8_t *key, uint32_t key_size)
        memcpy(rpmb_key, key, RPMBKEY_LENGTH);
 
        /* Get current mmc device. */
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_MMC_SUPPORT)
+       mmcc = spl_get_mmc_dev();
+#else
        mmcc = mmc_get_env_dev();
+#endif
        mmc = find_mmc_device(mmcc);
        if (!mmc) {
                printf("error - cannot find '%d' mmc device\n", mmcc);