BOOL is_lk_img(void) { part_hdr_t *part_hdr = (part_hdr_t*)COMMON_BUFFER_ADDR; blkdev_t *bdev = blkdev_get(CFG_BOOT_DEV); part_t *part; u64 src; if (NULL == (part = part_get(PART_UBOOT))) goto error; src = part->startblk * bdev->blksz; /* retrieve partition header. */ if ((blkdev_read(bdev, src, sizeof(part_hdr_t), (u8*)part_hdr) == 0) && (!memcmp(part_hdr->info.name, "LK", strlen("LK")))) { SMSG ("[%s] Found LK... \n",MOD); return TRUE; }else{ SMSG ("[%s] LK does not exist, use uboot... \n",MOD); return FALSE; } error: SMSG ("[%s] part_get (PART_UBOOT) Fail\n",MOD); return FALSE; }
int bldr_load_part(char *name, blkdev_t *bdev, u32 *addr, u32 *size) { part_t *part = part_get(name); if (NULL == part) { print("%s %s partition not found\n", MOD, name); return -1; } return part_load(bdev, part, addr, 0, size); }
/****************************************************************************** * WRITE IMAGE FOR S-BOOT USAGE (FROM NAND or eMMC DEVICE) ******************************************************************************/ static U32 sec_util_write_image (U8* img_name, U8 *buf, U32 offset, U32 size) { BOOL ret = SEC_OK; U32 i = 0; U32 cnt = 0; U32 now_offset = 0; U32 total_pages = 0; U32 start_offset = offset; blkdev_t *bootdev = NULL; part_t *part = NULL; U64 dest; if (NULL == (bootdev = blkdev_get(CFG_BOOT_DEV))) { SMSG("[%s] can't find boot device(%d)\n", MOD, CFG_BOOT_DEV); ASSERT(0); } /* ======================== */ /* get part info */ /* ======================== */ /* part_get should be device abstraction function */ if(NULL == (part = part_get (sec2plname(img_name)))) { SMSG("[%s] part_get fail\n", MOD); ASSERT(0); } /* ======================== */ /* write part data */ /* ======================== */ /* part_load should be device abstraction function */ if(TRUE == bDumpPartInfo) { SMSG("[%s] part load '0x%x'\n", MOD, part->startblk * bootdev->blksz); bDumpPartInfo = FALSE; } dest = part->startblk * bootdev->blksz + offset; if (-1 == blkdev_write(bootdev, dest, size, buf)) { SMSG("[%s] part_store fail\n", MOD); ASSERT(0); } return ret; }
u32 get_part_range (DM_IMG_TYPE img_type) { part_t *part; blkdev_t *blkdev = blkdev_get(CFG_BOOT_DEV); u8 *name = get_part_name (img_type); DM_ASSERT (name); if (name == NULL) return 0; part = part_get(name); DM_ASSERT (part); return ((part->pgnum) * blkdev->blksz); }
int bldr_load_bootimg_header(char *name, blkdev_t *bdev, u32 *addr, u32 offset, u32 *size) { int ret; part_t *part = part_get(name); if (NULL == part) { print("%s %s part. not found\n", MOD, name); return -1; } ret = part_load_raw_part(bdev, part, addr, offset, size); print("%s part_load_raw_part ret=0x%x\n", MOD, ret); if (ret) return ret; /* header addr will be updated to entry point addr */ return 0; //temp_tee_verify_image(addr, *size); }
int bldr_load_tee_part(char *name, blkdev_t *bdev, u32 *addr, u32 offset, u32 *size) { int ret; part_t *part = part_get(name); if (NULL == part) { print("%s %s part. not found\n", MOD, name); return -1; } ret = part_load(bdev, part, addr, offset, size); if (ret) return ret; /* header addr will be updated to entry point addr */ ret = tee_verify_image(addr, *size); if (ret) return ret; #if CFG_TEE_SUPPORT { u32 tee_addr = 0; u32 next_offset = sizeof(part_hdr_t) + *size; ret = part_load(bdev, part, &tee_addr, next_offset, size); if (ret) return ret; /* header addr will be updated to entry point addr */ ret = tee_verify_image(&tee_addr, *size); /* set tee entry address */ tee_set_entry(tee_addr); /* set hwuid. note that if you use cmm file, the parameter is empty. */ tee_set_hwuid((u8*)&bldr_param->meid[0], sizeof(bldr_param->meid)); } #endif return ret; }
void sec_lib_init (void) { #ifdef MTK_SECURITY_SW_SUPPORT part_t *part; U32 err; CUSTOM_SEC_CFG cust_cfg; BOOL bAC = g_ROM_INFO.m_SEC_CTRL.m_seccfg_ac_en; g_sec_cfg_exists = 0; U8* seccfg_buf = NULL; /* ---------------------- */ /* check status */ /* ---------------------- */ /* check customer configuration data structure */ COMPILE_ASSERT(CUSTOM_SEC_CFG_SIZE == sizeof(CUSTOM_SEC_CFG)); /* ---------------------- */ /* initialize variables */ /* ---------------------- */ sec_malloc_buf_reset(); /* initialize customer configuration buffer */ memset (&cust_cfg, 0x0, sizeof(cust_cfg)); /* initialize customer configuration for security library */ cust_cfg.sec_usb_dl = SEC_USBDL_CFG; cust_cfg.sec_boot = SEC_BOOT_CFG; /* fixme, hard coded temporarily, should parse secro header to get secro count, it's not necessarily 11 */ cust_cfg.secro_len = 11 * AND_SECROIMG_SIZE_WITH_PADDING; cust_cfg.secro_ac_enable = g_ROM_INFO.m_SEC_CTRL.m_secro_ac_en; cust_cfg.secro_ac_offset = sizeof(AND_AC_HEADER_T); cust_cfg.secro_ac_len = sizeof(AND_AC_ANDRO_T) + sizeof(AND_AC_SV5_T); memcpy (cust_cfg.img_auth_rsa_n, IMG_CUSTOM_RSA_N, sizeof(cust_cfg.img_auth_rsa_n)); memcpy (cust_cfg.img_auth_rsa_e, IMG_CUSTOM_RSA_E, sizeof(cust_cfg.img_auth_rsa_e)); memcpy (cust_cfg.crypto_seed, CUSTOM_CRYPTO_SEED, sizeof(cust_cfg.crypto_seed)); /* ---------------------- */ /* check data structure */ /* ---------------------- */ sec_rom_info_init(); sec_key_init(); sec_ctrl_init(); sec_flashtool_cfg_init(); /* ---------------------- */ /* find sec cfg part info */ /* ---------------------- */ SMSG ("[%s] AES Legacy : %d\n", MOD,g_ROM_INFO.m_SEC_CTRL.m_sec_aes_legacy); SMSG ("[%s] SECCFG AC : %d\n", MOD,bAC); err = seclib_img_auth_init(&cust_cfg, TRUE); if (SEC_OK != err) { SMSG ("[%s] Basic config not available...\n", MOD); ASSERT(0); } part = part_get("seccfg"); if (part) { sec_cfg_info.addr = part->start_sect * 512; sec_cfg_info.len = part->nr_sects * 512; sec_cfg_info.part_id = part->part_id; seccfg_buf = sec_cfg_load(); if (seccfg_buf) { #if !CFG_FPGA_PLATFORM /* starting to initialze security library */ if(SEC_OK == (err = seclib_img_auth_load_sig(seccfg_buf, SEC_CFG_READ_SIZE, TRUE, bAC))) { g_sec_cfg_exists = 1; } else { SMSG("[%s] init fail '0x%x'\n",MOD,err); } seclib_set_img_hdr_ver(); #endif } } else { SMSG ("[%s] seccfg part not found\n", MOD); } if (NULL != part) { put_part(part); } #else /* ROM_INFO must be linked even though MTK_SECURITY_SW_SUPPORT=0. * Therefore, we refer to ROM_INFO to make sure it's linked. */ g_ROM_INFO.m_SEC_CTRL.reserve[0] = 0; #endif }