Exemple #1
0
static int mmc_load_image_ext_os(struct mmc *mmc)
{
	int err;
	struct image_header *header;

	err = file_fat_read(spl_image.args,
			    (void *)spl_image.args_addr, 0);
	if (err <= 0) {
		printf("spl: error reading image %s, err - %d\n",
		       spl_image.args, err);
		goto end;
	}
	header = (struct image_header *)(CONFIG_SYS_TEXT_BASE -
						sizeof(struct image_header));

	err = file_fat_read(spl_image.args, header, sizeof(struct image_header));
	if (err <= 0)
		goto end;
	spl_parse_image_header(header);

	return mmc_load_image_ext(mmc, spl_image.os_image);

end:
	return err;
}
Exemple #2
0
static int mmc_load_image_ext_os(struct mmc *mmc)
{
	int err;

	err = file_fat_read(CONFIG_SPL_FAT_LOAD_ARGS_NAME,
			    (void *)CONFIG_SYS_SPL_ARGS_ADDR, 0);
	if (err <= 0) {
		printf("spl: error reading image %s, err - %d\n",
		       CONFIG_SPL_FAT_LOAD_ARGS_NAME, err);
		return -1;
	}

	return mmc_load_image_ext(mmc, CONFIG_SPL_FAT_LOAD_KERNEL_NAME);
}
Exemple #3
0
void spl_mmc_load_image(void)
{
	struct mmc *mmc;
	int err;
	u32 boot_mode;

	mmc_initialize(gd->bd);
	/* We register only one device. So, the dev id is always 0 */
	mmc = find_mmc_device(0);
	if (!mmc) {
		puts("spl: mmc device not found!!\n");
		hang();
	}

	err = mmc_init(mmc);
	if (err) {
		printf("spl: mmc init failed: err - %d\n", err);
		hang();
	}


#ifdef CONFIG_SPL_FAT_SUPPORT
	/* FAT filesystem */
	err = fat_register_device(&mmc->block_dev,
			  CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION);
	/*if (err) {
		printf("spl: fat register err - %d\n", err);
	}*/
#ifdef CONFIG_SPL_OS_BOOT
	if (spl_start_uboot() || mmc_load_image_fat_os(mmc))
#endif
	err = mmc_load_image_fat(mmc, CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);
#endif

#ifdef CONFIG_SPL_EXT_SUPPORT
	/* EXT filesystem */
	if (err) {
		printf("Load image from EXT...\n");
		disk_partition_t info;
		if (get_partition_info(&mmc->block_dev, CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION, &info)) {
			printf("Cannot find partition %d\n", CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION);
		}
		if (ext4fs_probe(&mmc->block_dev, &info)) {
			printf("ext4fs probe failed \n");
		}
#ifdef CONFIG_SPL_OS_BOOT
		if (spl_start_uboot() || mmc_load_image_ext_os(mmc))
#endif
		err = mmc_load_image_ext(mmc, CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);
	}
#endif

	if (err) {
		printf("Load image from RAW...\n");
#ifdef CONFIG_SPL_OS_BOOT
		if (spl_start_uboot() || mmc_load_image_raw_os(mmc))
#endif
		err = mmc_load_image_raw(mmc, CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR);
		if (err) {
			printf("spl: wrong MMC boot mode\n");
			hang();
		}
	}
}