diff options
Diffstat (limited to 'drivers/fastboot/fb_command.c')
-rw-r--r-- | drivers/fastboot/fb_command.c | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/drivers/fastboot/fb_command.c b/drivers/fastboot/fb_command.c index 9dc70beb..4b5a7a13 100644 --- a/drivers/fastboot/fb_command.c +++ b/drivers/fastboot/fb_command.c @@ -266,7 +266,7 @@ void fastboot_data_complete(char *response) } /** - * check_image_board_id() - check if board id in image matched with board id in env + * check_image_board_id() - check if board id in image matched with board id in env * * @image_data: Image data * @@ -275,28 +275,22 @@ void fastboot_data_complete(char *response) int check_image_board_id(uint8_t *image_data) { char *env_board_id = NULL; - char board_id[3] = {0}; - + char board_id[3] = {0}; env_board_id = env_get("board#"); - /*if current board id is null or image has no header,skip check*/ if (env_board_id == NULL || env_board_id[0] == 0 || image_have_head((unsigned long)image_data) == 0) { return 0; } - memcpy(board_id, image_data + BOARD_ID_OFFSET,sizeof(uint16_t)); - - /*if image board id is null,skip check*/ - if (*(uint16_t*)board_id == 0) { - return 0; + /*if image board id is null,skip check*/ + if (*(uint16_t*)board_id == 0) { + return 0; } - - /*check if current board id match with board id in image*/ + /*check if current board id match with board id in image*/ if (strncmp(env_board_id, board_id, sizeof(board_id)) != 0) { - printf("U-BOOT image download via fastboot is interrupted due to the U-BOOT for board %s does not work in the board %s\r\n",board_id,env_board_id); + printf("U-BOOT image download via fastboot is interrupted due to the U-BOOT for board %s does not work in the board %s\r\n",board_id,env_board_id); return -1; } - return 0; } @@ -316,12 +310,12 @@ static void flash(char *cmd_parameter, char *response) char cmdbuf[32]; u32 block_cnt; struct blk_desc *dev_desc; - int ret = 0; + int ret = 0; if (strcmp(cmd_parameter, "uboot") == 0) { - ret = check_image_board_id(fastboot_buf_addr); + ret = check_image_board_id(fastboot_buf_addr); if (ret != 0) { - fastboot_fail("U-BOOT image does not match the type of BOARD", response); + fastboot_fail("U-BOOT image does not match the type of BOARD", response); return; } @@ -342,6 +336,7 @@ static void flash(char *cmd_parameter, char *response) run_command(cmdbuf, 0); run_command("mmc partconf 0 1 0 0", 0); + } else if ((strcmp(cmd_parameter, "fw") == 0)) { memcpy((void *)LIGHT_FW_ADDR, fastboot_buf_addr, image_size); } else if ((strcmp(cmd_parameter, "uImage") == 0)) { @@ -356,7 +351,7 @@ static void flash(char *cmd_parameter, char *response) memcpy((void *)LIGHT_TF_FW_ADDR, fastboot_buf_addr, image_size); } else if ((strcmp(cmd_parameter, TEE_PART_NAME) == 0)) { memcpy((void *)LIGHT_TEE_FW_ADDR, fastboot_buf_addr, image_size); - } + } if(strcmp(cmd_parameter, "uboot") == 0 || (strcmp(cmd_parameter, "fw") == 0) || (strcmp(cmd_parameter, "uImage") == 0) || (strcmp(cmd_parameter, "dtb") == 0) || @@ -375,7 +370,7 @@ static void flash(char *cmd_parameter, char *response) #endif /* Send ACK to host */ fastboot_okay(NULL, response); - + /* set secure upgrade flag to indicate it is TF image upgrade*/ sprintf(cmdbuf,"env set sec_upgrade_mode 0x%x", TF_SEC_UPGRADE_FLAG); run_command(cmdbuf, 0); @@ -391,13 +386,29 @@ static void flash(char *cmd_parameter, char *response) /* Send ACK to host */ fastboot_okay(NULL, response); - + /* set secure upgrade flag to indicate it is TEE image upgrade*/ sprintf(cmdbuf,"env set sec_upgrade_mode 0x%x", TEE_SEC_UPGRADE_FLAG); run_command(cmdbuf, 0); run_command("saveenv", 0); run_command("reset", 0); return; + } else if (strcmp(cmd_parameter, SBMETA_IMG_UPD_NAME) == 0) { + #if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC) + /* tee/tf/uboot image must be written into stash partition */ + sprintf(cmdbuf, "%s", STASH_PART_NAME); + fastboot_mmc_flash_write(cmdbuf, fastboot_buf_addr, image_size, response); + #endif + + /* Send ACK to host */ + fastboot_okay(NULL, response); + + /* set secure upgrade flag to indicate it is TEE image upgrade*/ + sprintf(cmdbuf,"env set sec_upgrade_mode 0x%x", SBMETA_SEC_UPGRADE_FLAG); + run_command(cmdbuf, 0); + run_command("saveenv", 0); + run_command("reset", 0); + return; } else if (strcmp(cmd_parameter, UBOOT_IMG_UPD_NAME) == 0) { #if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC) @@ -409,14 +420,14 @@ static void flash(char *cmd_parameter, char *response) /* Send ACK to host */ fastboot_okay(NULL, response); - + /* set secure upgrade flag to indicate it is UBOOT image upgrade*/ sprintf(cmdbuf,"env set sec_upgrade_mode 0x%x", UBOOT_SEC_UPGRADE_FLAG); run_command(cmdbuf, 0); run_command("saveenv", 0); run_command("reset", 0); return; - } + } #endif #if CONFIG_IS_ENABLED(FASTBOOT_FLASH_MMC) |