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

Reply via email to