Dear Andreas, On 07/26/2011 08:07 AM, Andreas Bießmann wrote: > 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 > Totally agree. I just wait for a reply by Aneesh and will change it.
>> 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 .. will add this > >> + >> +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? Will change > >> 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. Done. >> -- >> 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