Index: u-boot-2013.04/drivers/mmc/spl_mmc.c =================================================================== --- u-boot-2013.04.orig/drivers/mmc/spl_mmc.c +++ u-boot-2013.04/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.img"; + + 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; @@ -127,7 +180,8 @@ void spl_mmc_load_image(void) #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.04/include/configs/omap3_beagle.h =================================================================== --- u-boot-2013.04.orig/include/configs/omap3_beagle.h +++ u-boot-2013.04/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.04/include/configs/omap4_common.h =================================================================== --- u-boot-2013.04.orig/include/configs/omap4_common.h +++ u-boot-2013.04/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 @@ -162,10 +163,10 @@ "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" \ "loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \ Index: u-boot-2013.04/spl/Makefile =================================================================== --- u-boot-2013.04.orig/spl/Makefile +++ u-boot-2013.04/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 Index: u-boot-2013.04/arch/arm/cpu/armv7/omap3/board.c =================================================================== --- u-boot-2013.04.orig/arch/arm/cpu/armv7/omap3/board.c +++ u-boot-2013.04/arch/arm/cpu/armv7/omap3/board.c @@ -77,6 +77,8 @@ u32 omap3_boot_device = BOOT_DEVICE_NAND /* auto boot mode detection is not possible for OMAP3 - hard code */ u32 spl_boot_mode(void) { + return MMCSD_MODE_FAT; + switch (spl_boot_device()) { case BOOT_DEVICE_MMC2: return MMCSD_MODE_RAW;