static int uboot_load_part_meta_check(char *part_name, unsigned long addr) { long len; unsigned long begin; unsigned long start_addr; part_t *part; part_dev_t *dev; part_hdr_t *part_hdr; int iReadSize=BLOCK_SIZE; printf("enter uboot_load_part_meta_check\n"); dev = mt6573_part_get_device(); if (!dev) { printf("mt6573_part_get_device() failed\n"); return -1; } part = mt6573_part_get_partition(part_name); if (!part) { printf("mt6573_part_get_partition()failed \n"); return -1; } start_addr = part->startblk * BLK_SIZE; part_hdr = (part_hdr_t*)malloc(sizeof(part_hdr_t)); if (!part_hdr) { printf("malloc failed\n"); return -1; } len = mboot_common_load_part_info(dev, part_name, part_hdr); if (len < 0) { len = -1; goto exit; } //**************** //* read image data //* printf("read the data of %s\n", part_name); len = dev->read(dev, start_addr+END_BLOCK , (uchar*)addr, iReadSize); if (len < 0) { printf("read failed\n"); len = -1; goto exit; } exit: if (part_hdr) free(part_hdr); return len; }
/********************************************************** * Routine: mboot_common_load_part * * Description: common function for loading image from nand flash * this function is called by * (1) 'mboot_common_load_logo' to display logo * **********************************************************/ int mboot_common_load_part(char *part_name, unsigned long addr) { long len; unsigned long begin; #ifdef MTK_EMMC_SUPPORT unsigned long long start_addr; #else unsigned long start_addr; #endif part_t *part; part_dev_t *dev; part_hdr_t *part_hdr; dev = mt6575_part_get_device(); if (!dev) { return -ENODEV; } part = mt6575_part_get_partition(part_name); if (!part) { return -ENOENT; } #ifdef MTK_EMMC_SUPPORT start_addr = (u64)part->startblk * BLK_SIZE; #else start_addr = part->startblk * BLK_SIZE; #endif part_hdr = (part_hdr_t*)malloc(sizeof(part_hdr_t)); if (!part_hdr) { return -ENOMEM; } len = mboot_common_load_part_info(dev, part_name, part_hdr); if (len < 0) { len = -EINVAL; goto exit; } begin = get_timer(0); //**************** //* read image data //* printf("read the data of %s\n", part_name); len = dev->read(dev, start_addr + sizeof(part_hdr_t), (uchar*)addr, part_hdr->info.dsize); if (len < 0) { len = -EIO; goto exit; } exit: if (part_hdr) free(part_hdr); return len; }