コード例 #1
0
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;
}
コード例 #2
0
ファイル: main.c プロジェクト: Scorpio92/mediatek
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);
}
コード例 #3
0
ファイル: sec_util.c プロジェクト: dimsink1/KK_huawei_y511
/******************************************************************************
 *  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;
}
コード例 #4
0
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);
}
コード例 #5
0
ファイル: main.c プロジェクト: Scorpio92/mediatek
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);
}
コード例 #6
0
ファイル: main.c プロジェクト: Scorpio92/mediatek
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;
}
コード例 #7
0
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
}