Index: u-boot-2013.04rc2/drivers/mmc/spl_mmc.c =================================================================== --- u-boot-2013.04rc2.orig/drivers/mmc/spl_mmc.c +++ u-boot-2013.04rc2/drivers/mmc/spl_mmc.c @@ -67,6 +67,59 @@ end: } #ifdef CONFIG_SPL_FAT_SUPPORT +static void mmc_load_image_ext2(struct mmc *mmc) +{ + s32 err; + struct image_header *header; + char *payloadname; + int filelen; + disk_partition_t part_info = {}; + + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - + sizeof(struct image_header)); + + if (get_partition_info(&mmc->block_dev, + CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION, &part_info)) { + printf("spl: no partition table found\n"); + hang(); + } + + err = ext4fs_set_blk_dev(&mmc->block_dev, &part_info); + if (!err) { + printf("spl: ext4fs register err - %d\n", err); + hang(); + } + + err = ext4fs_mount(0); + if (!err) { + printf("spl: ext4fs mount err - %d\n", err); + hang(); + } + + + payloadname = "u-boot.bin"; + + filelen = err = ext4fs_open(payloadname); + if (err < 0) { + goto end; + } + err = ext4fs_read((u8 *)header, sizeof(struct image_header)); + if (err <= 0) { + goto end; + } + + spl_parse_image_header(header); + + err = ext4fs_read((u8 *)spl_image.load_addr, filelen); + +end: + if (err <= 0) { + printf("spl: error reading image %s, err - %d\n", + payloadname, err); + hang(); + } +} + static void mmc_load_image_fat(struct mmc *mmc) { s32 err; @@ -121,13 +174,15 @@ void spl_mmc_load_image(void) hang(); } boot_mode = spl_boot_mode(); + boot_mode = MMCSD_MODE_FAT; if (boot_mode == MMCSD_MODE_RAW) { debug("boot mode - RAW\n"); mmc_load_image_raw(mmc); #ifdef CONFIG_SPL_FAT_SUPPORT } else if (boot_mode == MMCSD_MODE_FAT) { debug("boot mode - FAT\n"); - mmc_load_image_fat(mmc); +// mmc_load_image_fat(mmc); + mmc_load_image_ext2(mmc); #endif } else { puts("spl: wrong MMC boot mode\n"); Index: u-boot-2013.04rc2/include/configs/omap3_beagle.h =================================================================== --- u-boot-2013.04rc2.orig/include/configs/omap3_beagle.h +++ u-boot-2013.04rc2/include/configs/omap3_beagle.h @@ -55,6 +55,7 @@ #define CONFIG_OF_LIBFDT #define CONFIG_CMD_BOOTZ +#define CONFIG_SUPPORT_RAW_INITRD /* bootz raw initrd support */ #define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ #define CONFIG_SETUP_MEMORY_TAGS 1 @@ -255,7 +256,7 @@ "root=${nandroot} " \ "rootfstype=${nandrootfstype}\0" \ "bootenv=uEnv.txt\0" \ - "loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \ + "loadbootenv=ext2load mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \ "importbootenv=echo Importing environment from mmc ...; " \ "env import -t $loadaddr $filesize\0" \ "ramargs=setenv bootargs console=${console} " \ @@ -267,8 +268,8 @@ "omapdss.def_disp=${defaultdisplay} " \ "root=${ramroot} " \ "rootfstype=${ramrootfstype}\0" \ - "loadramdisk=fatload mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \ - "loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} uImage\0" \ + "loadramdisk=ext2load mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \ + "loaduimagefat=ext2load mmc ${mmcdev} ${loadaddr} uImage\0" \ "loaduimage=ext2load mmc ${mmcdev}:2 ${loadaddr} /boot/uImage\0" \ "mmcboot=echo Booting from mmc ...; " \ "run mmcargs; " \ Index: u-boot-2013.04rc2/include/configs/omap4_common.h =================================================================== --- u-boot-2013.04rc2.orig/include/configs/omap4_common.h +++ u-boot-2013.04rc2/include/configs/omap4_common.h @@ -126,6 +126,7 @@ #define CONFIG_CMD_FAT /* FAT support */ #define CONFIG_CMD_I2C /* I2C serial bus support */ #define CONFIG_CMD_MMC /* MMC support */ +#define CONFIG_SUPPORT_RAW_INITRD /* bootz raw initrd support */ /* Disabled commands */ #undef CONFIG_CMD_NET @@ -154,13 +155,13 @@ "vram=${vram} " \ "root=${mmcroot} " \ "rootfstype=${mmcrootfstype}\0" \ - "loadbootscript=fatload mmc ${mmcdev} ${loadaddr} boot.scr\0" \ + "loadbootscript=ext2load mmc ${mmcdev} ${loadaddr} boot.scr\0" \ "bootscript=echo Running bootscript from mmc${mmcdev} ...; " \ "source ${loadaddr}\0" \ - "loadbootenv=fatload mmc ${mmcdev} ${loadaddr} uEnv.txt\0" \ + "loadbootenv=ext2load mmc ${mmcdev} ${loadaddr} uEnv.txt\0" \ "importbootenv=echo Importing environment from mmc${mmcdev} ...; " \ "env import -t ${loadaddr} ${filesize}\0" \ - "loaduimage=fatload mmc ${mmcdev} ${loadaddr} uImage\0" \ + "loaduimage=ext2load mmc ${mmcdev} ${loadaddr} uImage\0" \ "mmcboot=echo Booting from mmc${mmcdev} ...; " \ "run mmcargs; " \ "bootm ${loadaddr}\0" \ Index: u-boot-2013.04rc2/spl/Makefile =================================================================== --- u-boot-2013.04rc2.orig/spl/Makefile +++ u-boot-2013.04rc2/spl/Makefile @@ -72,6 +72,7 @@ LIBS-$(CONFIG_SPL_SERIAL_SUPPORT) += dri LIBS-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += drivers/mtd/spi/libspi_flash.o LIBS-$(CONFIG_SPL_SPI_SUPPORT) += drivers/spi/libspi.o LIBS-$(CONFIG_SPL_FAT_SUPPORT) += fs/fat/libfat.o +LIBS-$(CONFIG_SPL_FAT_SUPPORT) += fs/ext4/libext4fs.o LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/libgeneric.o LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/libpower.o LIBS-$(CONFIG_SPL_NAND_SUPPORT) += drivers/mtd/nand/libnand.o