Message ID | 1312300757-9039-4-git-send-email-simonschwarzcor@gmail.com |
---|---|
State | Superseded |
Headers | show |
Hi Simon, Sorry if my response is late. I was not in office for couple of days. On Tuesday 02 August 2011 09:29 PM, Simon Schwarz wrote: > 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 > > V6 changes: > ADD call to nand_deselect after loading the images > ADD nand_deselect to nand.h > > V7 changes: > DEL some CONFIG_SPL_* relying on garbage collection now > ADD mmc_load_image and nand_load_image now have __attribute__((unused)) to > prevent warnings when the lib is not added to SPL > DEL do_reset() isn't used anymore > CHG header based loading in SPL > > V8 changes: > DEL nand_spl_read_page is replaced by nand_spl_load_image with size=page size > > 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 | 3 ++ > 3 files changed, 49 insertions(+), 1 deletions(-) > > diff --git a/arch/arm/cpu/armv7/omap-common/spl.c b/arch/arm/cpu/armv7/omap-common/spl.c > index 1d301f4..53d10bf 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> > @@ -173,7 +174,7 @@ end: > hang(); > } > } > - > +static void mmc_load_image(void) __attribute__((unused)); > static void mmc_load_image(void) > { > struct mmc *mmc; > @@ -207,12 +208,48 @@ static void mmc_load_image(void) > } > } > > +#ifdef CONFIG_SPL_NAND_SUPPORT > +static void nand_load_image(void) __attribute__ ((unused)); > +static void nand_load_image(void) > +{ > + struct image_header *header; > + > + gpmc_init(); > + nand_init(); > + > + /*use CONFIG_SYS_TEXT_BASE as temporary storage area */ > + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); > + > +#ifdef CONFIG_NAND_ENV_DST > + nand_spl_load_image(CONFIG_ENV_OFFSET, > + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); > + parse_image_header(header); > + nand_spl_load_image(CONFIG_ENV_OFFSET, image_size, > + (void *)image_load_addr); > +#ifdef CONFIG_ENV_OFFSET_REDUND > + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, > + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); > + parse_image_header(header); > + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, image_size, > + (void *)image_load_addr); > +#endif > +#endif Can you please explain the logic here. What are you loading here? br, Aneesh
Hi Aneesh, On 08/05/2011 09:30 AM, Aneesh V wrote: > Hi Simon, > > Sorry if my response is late. I was not in office for couple of days. First day in office since vacation - so no you are not late ;) > > On Tuesday 02 August 2011 09:29 PM, Simon Schwarz wrote: >> 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 >> >> V6 changes: >> ADD call to nand_deselect after loading the images >> ADD nand_deselect to nand.h >> >> V7 changes: >> DEL some CONFIG_SPL_* relying on garbage collection now >> ADD mmc_load_image and nand_load_image now have >> __attribute__((unused)) to >> prevent warnings when the lib is not added to SPL >> DEL do_reset() isn't used anymore >> CHG header based loading in SPL >> >> V8 changes: >> DEL nand_spl_read_page is replaced by nand_spl_load_image with >> size=page size >> >> 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 | 3 ++ >> 3 files changed, 49 insertions(+), 1 deletions(-) >> >> diff --git a/arch/arm/cpu/armv7/omap-common/spl.c >> b/arch/arm/cpu/armv7/omap-common/spl.c >> index 1d301f4..53d10bf 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> >> @@ -173,7 +174,7 @@ end: >> hang(); >> } >> } >> - >> +static void mmc_load_image(void) __attribute__((unused)); >> static void mmc_load_image(void) >> { >> struct mmc *mmc; >> @@ -207,12 +208,48 @@ static void mmc_load_image(void) >> } >> } >> >> +#ifdef CONFIG_SPL_NAND_SUPPORT >> +static void nand_load_image(void) __attribute__ ((unused)); >> +static void nand_load_image(void) >> +{ >> + struct image_header *header; >> + >> + gpmc_init(); >> + nand_init(); >> + >> + /*use CONFIG_SYS_TEXT_BASE as temporary storage area */ >> + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); >> + >> +#ifdef CONFIG_NAND_ENV_DST >> + nand_spl_load_image(CONFIG_ENV_OFFSET, >> + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); >> + parse_image_header(header); >> + nand_spl_load_image(CONFIG_ENV_OFFSET, image_size, >> + (void *)image_load_addr); >> +#ifdef CONFIG_ENV_OFFSET_REDUND >> + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, >> + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); >> + parse_image_header(header); >> + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, image_size, >> + (void *)image_load_addr); >> +#endif >> +#endif > > Can you please explain the logic here. What are you loading here? This is from the old nand_spl.c. AFAIK this is to load the environment from NAND to RAM. I kept this to not break boards using it - although there has to be some other mechanism for this because it is only used in smdk6400.h. The REDUND part does the same for a redundant copy. (docs say: to have a working copy if power fails while doing saveenv). > > br, > Aneesh Regards Simon
Hi Simon, On Monday 08 August 2011 01:20 PM, Simon Schwarz wrote: > Hi Aneesh, > > On 08/05/2011 09:30 AM, Aneesh V wrote: >> Hi Simon, >> >> Sorry if my response is late. I was not in office for couple of days. > > First day in office since vacation - so no you are not late ;) > >> >> On Tuesday 02 August 2011 09:29 PM, Simon Schwarz wrote: >>> 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 >>> >>> V6 changes: >>> ADD call to nand_deselect after loading the images >>> ADD nand_deselect to nand.h >>> >>> V7 changes: >>> DEL some CONFIG_SPL_* relying on garbage collection now >>> ADD mmc_load_image and nand_load_image now have >>> __attribute__((unused)) to >>> prevent warnings when the lib is not added to SPL >>> DEL do_reset() isn't used anymore >>> CHG header based loading in SPL >>> >>> V8 changes: >>> DEL nand_spl_read_page is replaced by nand_spl_load_image with >>> size=page size >>> >>> 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 | 3 ++ >>> 3 files changed, 49 insertions(+), 1 deletions(-) >>> >>> diff --git a/arch/arm/cpu/armv7/omap-common/spl.c >>> b/arch/arm/cpu/armv7/omap-common/spl.c >>> index 1d301f4..53d10bf 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> >>> @@ -173,7 +174,7 @@ end: >>> hang(); >>> } >>> } >>> - >>> +static void mmc_load_image(void) __attribute__((unused)); >>> static void mmc_load_image(void) >>> { >>> struct mmc *mmc; >>> @@ -207,12 +208,48 @@ static void mmc_load_image(void) >>> } >>> } >>> >>> +#ifdef CONFIG_SPL_NAND_SUPPORT >>> +static void nand_load_image(void) __attribute__ ((unused)); >>> +static void nand_load_image(void) >>> +{ >>> + struct image_header *header; >>> + >>> + gpmc_init(); >>> + nand_init(); >>> + >>> + /*use CONFIG_SYS_TEXT_BASE as temporary storage area */ >>> + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); >>> + >>> +#ifdef CONFIG_NAND_ENV_DST >>> + nand_spl_load_image(CONFIG_ENV_OFFSET, >>> + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); >>> + parse_image_header(header); >>> + nand_spl_load_image(CONFIG_ENV_OFFSET, image_size, >>> + (void *)image_load_addr); >>> +#ifdef CONFIG_ENV_OFFSET_REDUND >>> + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, >>> + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); >>> + parse_image_header(header); >>> + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, image_size, >>> + (void *)image_load_addr); >>> +#endif >>> +#endif >> >> Can you please explain the logic here. What are you loading here? > > This is from the old nand_spl.c. AFAIK this is to load the environment > from NAND to RAM. I kept this to not break boards using it - although > there has to be some other mechanism for this because it is only used in > smdk6400.h. > > The REDUND part does the same for a redundant copy. (docs say: to have a > working copy if power fails while doing saveenv). Hmm. Looks like this was a support added by the commit b74ab737. So, we are pre-loading the ENV for u-boot here. best regards, Aneesh
diff --git a/arch/arm/cpu/armv7/omap-common/spl.c b/arch/arm/cpu/armv7/omap-common/spl.c index 1d301f4..53d10bf 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> @@ -173,7 +174,7 @@ end: hang(); } } - +static void mmc_load_image(void) __attribute__((unused)); static void mmc_load_image(void) { struct mmc *mmc; @@ -207,12 +208,48 @@ static void mmc_load_image(void) } } +#ifdef CONFIG_SPL_NAND_SUPPORT +static void nand_load_image(void) __attribute__ ((unused)); +static void nand_load_image(void) +{ + struct image_header *header; + + gpmc_init(); + nand_init(); + + /*use CONFIG_SYS_TEXT_BASE as temporary storage area */ + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); + +#ifdef CONFIG_NAND_ENV_DST + nand_spl_load_image(CONFIG_ENV_OFFSET, + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); + parse_image_header(header); + nand_spl_load_image(CONFIG_ENV_OFFSET, image_size, + (void *)image_load_addr); +#ifdef CONFIG_ENV_OFFSET_REDUND + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); + parse_image_header(header); + nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, image_size, + (void *)image_load_addr); +#endif +#endif + /* Load u-boot */ + nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, + CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); + parse_image_header(header); + nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, + image_size, (void *)image_load_addr); + nand_deselect(); +} +#endif /* CONFIG_SPL_NAND_SUPPORT */ void jump_to_image_no_args(void) { typedef void (*image_entry_noargs_t)(void)__attribute__ ((noreturn)); image_entry_noargs_t image_entry = (image_entry_noargs_t) image_entry_point; + debug("image entry point: 0x%X\n", image_entry_point); image_entry(); } @@ -228,10 +265,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(); diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h index d3cb857..13f6884 100644 --- a/arch/arm/include/asm/omap_common.h +++ b/arch/arm/include/asm/omap_common.h @@ -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); diff --git a/include/nand.h b/include/nand.h index 8d94b5c..3c5ef4e 100644 --- a/include/nand.h +++ b/include/nand.h @@ -132,6 +132,9 @@ 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); +void nand_deselect(void); + #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 V6 changes: ADD call to nand_deselect after loading the images ADD nand_deselect to nand.h V7 changes: DEL some CONFIG_SPL_* relying on garbage collection now ADD mmc_load_image and nand_load_image now have __attribute__((unused)) to prevent warnings when the lib is not added to SPL DEL do_reset() isn't used anymore CHG header based loading in SPL V8 changes: DEL nand_spl_read_page is replaced by nand_spl_load_image with size=page size 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 | 3 ++ 3 files changed, 49 insertions(+), 1 deletions(-)