omap4_bootsrc() always returns OMAP_BOOTSRC_UNKNOWN when an OMAP4 xload image is built with pcm049_xload_defconfig. This is likely to be the case for all OMAP4 xload configurations. This means that when the CPU is configured to boot from MMC1 with boot[5:0], xload will load the second stage boot loader from NAND flash (if present) rather than MMC1 as intended. omap4_bootsrc() reads data left behind towards the top of the SRAM by the ROM-based boot-loader. This is the same SRAM into which the xload image is loaded. The xload image is of a sufficient size that it overwrites these locations, and OMAP4_TRACING_VECTOR3 always contains 0. These locations are in fact trampled by data in the BSS section of the image. The single largest item in there is FILE files[MAX_FILES]. This patch reduces the size of files[] considerably. The image now JUST fits. Long term, a better solution would be to not rely on OMAP4_TRACING_VECTOR3, and instead use the structure passed into the xload by the ROM-based boot loader - which also indicates the boot device. This wold allow us another 4kB of code before we overflow the SRAM completely. Signed-off-by: Mark Olleson <mark@xxxxxxxxxxxx> --- diff --git a/include/stdio.h b/include/stdio.h index 4901bc7..98a4639 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -52,8 +52,21 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args); #define stdin 0 #define stdout 1 #define stderr 2 + +#if defined (CONFIG_SHELL_NONE) && defined (CONFIG_ARCH_OMAP4) + +// OMAP4 XLOAD configuations are very tight on RAM. If MAX_FILES is any +// larger, FILE files[MAX_FILES] (fs.c) tramples over data left for us by +// ROM-based bootloader and breaks boot from mmc. + +#define MAX_FILES 16 + +#else + + #define MAX_FILES 128 +#endif int fprintf(int file, const char *fmt, ...) __attribute__ ((format(__printf__, 2, 3))); int fputs(int file, const char *s); int fputc(int file, const char c); _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox