@@ -26,6 +26,7 @@
#include <asm/u-boot.h>
#include <asm/utils.h>
#include <asm/arch/sys_proto.h>
+#include <nand.h>
#include <mmc.h>
#include <fat.h>
#include <timestamp_autogenerated.h>
@@ -107,6 +108,7 @@ static void parse_image_header(const struct image_header *header)
}
}
+#ifdef CONFIG_SPL_MMC_SUPPORT
static void mmc_load_image_raw(struct mmc *mmc)
{
u32 image_size_sectors, err;
@@ -140,7 +142,9 @@ end:
hang();
}
}
+#endif /* CONFIG_SPL_MMC_SUPPORT */
+#ifdef CONFIG_SPL_MMC_SUPPORT
static void mmc_load_image_fat(struct mmc *mmc)
{
s32 err;
@@ -173,7 +177,9 @@ end:
hang();
}
}
+#endif /* CONFIG_SPL_MMC_SUPPORT */
+#ifdef CONFIG_SPL_MMC_SUPPORT
static void mmc_load_image(void)
{
struct mmc *mmc;
@@ -206,6 +212,27 @@ static void mmc_load_image(void)
hang();
}
}
+#endif /* CONFIG_SPL_MMC_SUPPORT */
+
+#ifdef CONFIG_SPL_NAND_SUPPORT
+static void nand_load_image(void)
+{
+ gpmc_init();
+ nand_init();
+ nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
+ CONFIG_SYS_NAND_U_BOOT_SIZE,
+ (uchar *)CONFIG_SYS_NAND_U_BOOT_DST);
+#ifdef CONFIG_NAND_ENV_DST
+ nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
+ (uchar *)CONFIG_NAND_ENV_DST);
+#ifdef CONFIG_ENV_OFFSET_REDUND
+ nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE,
+ (uchar *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE);
+#endif
+#endif
+ parse_image_header((struct image_header *)CONFIG_SYS_NAND_U_BOOT_DST);
+}
+#endif /* CONFIG_SPL_NAND_SUPPORT */
void jump_to_image_no_args(void)
{
@@ -228,10 +255,17 @@ void board_init_r(gd_t *id, ulong dummy)
boot_device = omap_boot_device();
debug("boot device - %d\n", boot_device);
switch (boot_device) {
+#ifdef CONFIG_SPL_MMC_SUPPORT
case BOOT_DEVICE_MMC1:
case BOOT_DEVICE_MMC2:
mmc_load_image();
break;
+#endif
+#ifdef CONFIG_SPL_NAND_SUPPORT
+ case BOOT_DEVICE_NAND:
+ nand_load_image();
+ break;
+#endif
default:
printf("SPL: Un-supported Boot Device - %d!!!\n", boot_device);
hang();
@@ -259,7 +293,11 @@ void preloader_console_init(void)
gd->flags |= GD_FLG_RELOC;
gd->baudrate = CONFIG_BAUDRATE;
+/* Console clock for OMAP3 is already initialized by per_clocks_enable()
+ * called in board.c by s_init() */
+#ifndef CONFIG_OMAP34XX
setup_clocks_for_console();
+#endif
serial_init(); /* serial communications setup */
/* Avoid a second "U-Boot" coming from this string */
@@ -270,3 +308,11 @@ void preloader_console_init(void)
omap_rev_string(rev_string_buffer);
printf("Texas Instruments %s\n", rev_string_buffer);
}
+
+int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ debug("resetting cpu...");
+ reset_cpu(0);
+
+ return 0;
+}
@@ -49,6 +49,7 @@ void preloader_console_init(void);
#define MMCSD_MODE_UNDEFINED 0
#define MMCSD_MODE_RAW 1
#define MMCSD_MODE_FAT 2
+#define NAND_MODE_HW_ECC 3
u32 omap_boot_device(void);
u32 omap_boot_mode(void);
@@ -132,6 +132,8 @@ int nand_lock( nand_info_t *meminfo, int tight );
int nand_unlock( nand_info_t *meminfo, ulong start, ulong length );
int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);
+void nand_spl_load_image(loff_t offs, unsigned int size, uchar *dst);
+
#ifdef CONFIG_SYS_NAND_SELECT_DEVICE
void board_nand_select_device(struct nand_chip *nand, int chip);
#endif
Add NAND support for the new SPL structure. Signed-off-by: Simon Schwarz <simonschwarzcor@gmail.com> --- This patch didn't exist before V2! V2 changes: ADD Some define-barriers for OMAP3 to only use NAND ADD nand_load_image() - inits the OMAP gpmc, loads the images - parses the header CHG cosmetic ADD do_reset() implementation for omap-common spl ADD nand_copy_image to nand.h ADD CPP barriers for mmc and nand support. The parts depending on library support are only compiled if the respective library is included. V3 changes: ADD Comment why setup_clocks_for_console() isn't called for OMAP3 CHG cosmetic (deleted empty line) CHG rename of NAND_MODE_HW to NAND_MODE_HW_ECC DEL NAND_MODE_SW. Not used. V4 changes: CHG cosmetic - style problems V5 changes: CHG renamed nand_copy_image to nand_spl_load_image CHG offs paramter of nand_spl_load_image is of type loff_t now Transition from V1 to V2 also includes that this patch is now based on - the new SPL layout by Aneesh V and Daniel Schwierzeck - the OMAP4 SPL patches by Aneesh V --- arch/arm/cpu/armv7/omap-common/spl.c | 46 ++++++++++++++++++++++++++++++++++ arch/arm/include/asm/omap_common.h | 1 + include/nand.h | 2 + 3 files changed, 49 insertions(+), 0 deletions(-)