Dear Simon, Am 25.07.2011 um 20:05 schrieb Simon Schwarz:
> Add NAND support for the new SPL structure. > > --- > 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. > > 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 > > Signed-off-by: Simon Schwarz <simonschwarz...@gmail.com> > --- > arch/arm/cpu/armv7/omap-common/spl.c | 43 ++++++++++++++++++++++++++++++++++ > arch/arm/include/asm/omap_common.h | 2 + > include/nand.h | 3 ++ > 3 files changed, 48 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/cpu/armv7/omap-common/spl.c > b/arch/arm/cpu/armv7/omap-common/spl.c > index d177652..3a0093d 100644 > --- a/arch/arm/cpu/armv7/omap-common/spl.c > +++ b/arch/arm/cpu/armv7/omap-common/spl.c > @@ -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,26 @@ 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_copy_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_copy_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, > + (uchar *)CONFIG_NAND_ENV_DST); > +#ifdef CONFIG_ENV_OFFSET_REDUND > + nand_copy_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 +254,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 +292,9 @@ void preloader_console_init(void) > gd->flags |= GD_FLG_RELOC; > gd->baudrate = CONFIG_BAUDRATE; > > +#ifndef CONFIG_OMAP34XX Well .. that was discussed with Aneesh in another mail. I prefer Aneesh decides how the interface should be: a) OMAP3 provides setup_clocks_for_console() and remove the UART stuff from per_clocks_enable() b) remove setup_clocks_for_console() here and require preloader_console_init() to have the clocks enabled before > setup_clocks_for_console(); > +#endif > serial_init(); /* serial communications setup */ > > /* Avoid a second "U-Boot" coming from this string */ > @@ -270,3 +305,11 @@ void preloader_console_init(void) > omap_rev_string(rev_string_buffer); > printf("Texas Instruments %s\n", rev_string_buffer); > } Some comment would be useful why this is here .. > + > +int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > +{ > + debug("resetting cpu..."); > + reset_cpu(0); > + > + return 0; > +} > diff --git a/arch/arm/include/asm/omap_common.h > b/arch/arm/include/asm/omap_common.h > index d3cb857..ee45a33 100644 > --- a/arch/arm/include/asm/omap_common.h > +++ b/arch/arm/include/asm/omap_common.h > @@ -49,6 +49,8 @@ void preloader_console_init(void); > #define MMCSD_MODE_UNDEFINED 0 > #define MMCSD_MODE_RAW 1 > #define MMCSD_MODE_FAT 2 > +#define NAND_MODE_HW 3 > +#define NAND_MODE_SW 4 Shouldn't that name NAND_ECC_MODE_(HW|SW) or something? > u32 omap_boot_device(void); > u32 omap_boot_mode(void); > diff --git a/include/nand.h b/include/nand.h > index 8d94b5c..084c017 100644 > --- a/include/nand.h > +++ b/include/nand.h > @@ -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_copy_image(unsigned int offs, unsigned int size, uchar *dst); > + > #ifdef CONFIG_SYS_NAND_SELECT_DEVICE > void board_nand_select_device(struct nand_chip *nand, int chip); > #endif > @@ -148,3 +150,4 @@ __attribute__((noreturn)) void nand_boot(void); > #define ENV_OFFSET_SIZE 8 > int get_nand_env_oob(nand_info_t *nand, unsigned long *result); > #endif > + This single line is useless. > -- > 1.7.4.1 regards Andreas Bießmann _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot