From 1597b96ee023c5b2de9eea6cc198d2f4b3404fda Mon Sep 17 00:00:00 2001 From: "Haoran.Wang" Date: Mon, 22 Jul 2019 17:45:49 +0800 Subject: [PATCH] MA-15208 Remap mmc device id in spl 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 (cherry picked from commit c079188d06b3669df7836e1b8c6126558b1fa39e) --- lib/avb/fsl/fsl_avbkey.c | 51 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/lib/avb/fsl/fsl_avbkey.c b/lib/avb/fsl/fsl_avbkey.c index 2624b063bd..e8c2c80622 100644 --- a/lib/avb/fsl/fsl_avbkey.c +++ b/lib/avb/fsl/fsl_avbkey.c @@ -26,6 +26,10 @@ #include "trusty/hwcrypto.h" #include "fsl_atx_attributes.h" +#ifdef CONFIG_SPL_BUILD +#include +#endif + #define INITFLAG_FUSE_OFFSET 0 #define INITFLAG_FUSE_MASK 0x00000001 #define INITFLAG_FUSE 0x00000001 @@ -36,14 +40,35 @@ 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; @@ -67,7 +92,11 @@ int read_keyslot_package(struct keyslot_package* kp) { unsigned char* fill = NULL; int ret = 0; /* 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; @@ -152,7 +181,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); @@ -548,7 +581,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; @@ -1116,7 +1153,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); -- 2.17.1