u-boot/mlo-ext2.patch
2013-01-30 08:40:04 +00:00

237 lines
6.0 KiB
Diff

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 <ext4fs.h>
#include <ext_common.h>
+#ifndef CONFIG_SPL_BUILD
+
+#include <malloc.h>
+
+#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/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-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 <common.h>
-#include <malloc.h>
#include <ext_common.h>
#include <ext4fs.h>
#include <linux/stat.h>
@@ -905,6 +904,45 @@ void ext4fs_deinit(void)
fs->inode_bmaps = NULL;
}
+#ifndef CONFIG_SPL_BUILD
+
+#include <malloc.h>
+
+#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;