Index: u-boot-2012.10/drivers/mmc/spl_mmc.c =================================================================== --- u-boot-2012.10.orig/drivers/mmc/spl_mmc.c +++ u-boot-2012.10/drivers/mmc/spl_mmc.c @@ -67,6 +67,53 @@ 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; + + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - + sizeof(struct image_header)); + + err = ext4fs_set_blk_dev(&mmc->block_dev, + CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION); + 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 +168,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-2012.10/fs/ext4/dev.c =================================================================== --- u-boot-2012.10.orig/fs/ext4/dev.c +++ u-boot-2012.10/fs/ext4/dev.c @@ -41,6 +41,45 @@ #include #include +#ifndef CONFIG_SPL_BUILD + +#include + +#else + +/* compat stuff */ + +void *free_buf; +void *topmost_entry; +int topmost_size; +char heap[10240]; + +static inline void *malloc(int size) +{ + void *r; + if (!free_buf) + free_buf = heap; + memset(free_buf, 0, size); + r = free_buf; + free_buf += size; + topmost_entry = r; + topmost_size = size; + return r; +} + +static inline void free(void *p) +{ + if (p == topmost_entry) { + free_buf -= topmost_size; + topmost_entry = 0; + } else { + printf("leaked %d bytes\n", topmost_size); + } +} + +#endif + + unsigned long part_offset; static block_dev_desc_t *ext4fs_block_dev_desc; Index: u-boot-2012.10/include/configs/omap3_beagle.h =================================================================== --- u-boot-2012.10.orig/include/configs/omap3_beagle.h +++ u-boot-2012.10/include/configs/omap3_beagle.h @@ -258,7 +258,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} " \ @@ -270,8 +270,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-2012.10/include/configs/omap4_common.h =================================================================== --- u-boot-2012.10.orig/include/configs/omap4_common.h +++ u-boot-2012.10/include/configs/omap4_common.h @@ -156,10 +156,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" \ - "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-2012.10/spl/Makefile =================================================================== --- u-boot-2012.10.orig/spl/Makefile +++ u-boot-2012.10/spl/Makefile @@ -51,6 +51,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/ext2/libext2fs.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-2012.10/fs/ext4/ext4fs.c =================================================================== --- u-boot-2012.10.orig/fs/ext4/ext4fs.c +++ u-boot-2012.10/fs/ext4/ext4fs.c @@ -34,7 +34,6 @@ */ #include -#include #include #include #include @@ -905,6 +904,45 @@ void ext4fs_deinit(void) fs->inode_bmaps = NULL; } +#ifndef CONFIG_SPL_BUILD + +#include + +#else + +/* compat stuff */ + +void *free_buf; +void *topmost_entry; +int topmost_size; +char heap[10240]; + +static inline void *malloc(int size) +{ + void *r; + if (!free_buf) + free_buf = heap; + memset(free_buf, 0, size); + r = free_buf; + free_buf += size; + topmost_entry = r; + topmost_size = size; + return r; +} + +static inline void free(void *p) +{ + if (p == topmost_entry) { + free_buf -= topmost_size; + topmost_entry = 0; + } else { + printf("leaked %d bytes\n", topmost_size); + } +} + +#endif + + free(fs->gdtable); fs->gdtable = NULL;