[U-Boot] [PATCH] Save environment data to mmc.

Liu Hui-R64343 r64343 at freescale.com
Thu Mar 4 04:07:12 CET 2010


Hi, Terry,

> -----Original Message-----
> From: u-boot-bounces at lists.denx.de 
> [mailto:u-boot-bounces at lists.denx.de] On Behalf Of Lv Terry-R65388
> Sent: 2010年3月4日 11:01
> To: Stefano Babic
> Cc: u-boot at lists.denx.de
> Subject: Re: [U-Boot] [PATCH] Save environment data to mmc.
> 
> Hi Babic,
> 
> 	Thanks for reviewing the patch.
> 
> 	I will send out a new patch to fix the problems you point out.
> 
> 	For setting block numbers for MMC offset, I just don't 
> want env mmc to be different. I want users to use it as 
> similiar as other env devices.
> 
> 	For the initalization for ARM and PPC, It will be added 
> for all architectures.
> 
> 	Thanks a lot ‾‾

Had better not put comments on the top of the email, need follow the community style. 

> 
> Yours
> Terry
> 
> -----Original Message-----
> From: Stefano Babic [mailto:sbabic at denx.de]
> Sent: 2010年3月3日 1:03
> To: Lv Terry-R65388
> Cc: u-boot at lists.denx.de
> Subject: Re: [U-Boot] [PATCH] Save environment data to mmc.
> 
> Terry Lv wrote:
> 
> > diff --git a/common/env_mmc.c b/common/env_mmc.c
> 
> > +#include <linux/stddef.h>
> > +#include <malloc.h>
> > +#include <mmc.h>
> > +
> > +#if defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_MMC)
> 
> This seems not correct. If not explicitely set, we get a 
> compiler error.
> Assuming you has taken this check from env_nand.c, this should be:
> 
> #if defined(CONFIG_CMD_SAVEENV) && defined(CONFIG_CMD_MMC)
> 
> > +#define CMD_SAVEENV
> > +#elif defined(CONFIG_ENV_OFFSET_REDUND) #error Cannot use 
> > +CONFIG_ENV_OFFSET_REDUND without CONFIG_CMD_ENV & CONFIG_CMD_MMC
> 
> Line too long.
> 
> > +#endif
> > +
> > +#if defined(CONFIG_ENV_SIZE_REDUND) && (CONFIG_ENV_SIZE_REDUND <
> > +CONFIG_ENV_SIZE)
> 
> Ditto.
> 
> 
> > +
> > +#ifdef CMD_SAVEENV
> > +
> > +inline int write_env(struct mmc *mmc, unsigned long size,
> > +						unsigned long 
> offset, const void *buffer)
> 
> Line too long.
> 
> > +{
> > +	uint blk_start = 0, blk_cnt = 0, n = 0;
> > +
> > +	blk_start = (offset % 512) ? ((offset / 512) + 1) : 
> (offset / 512);
> > +	blk_cnt = (size % 512) ? ((size / 512) + 1) : (size / 512);
> 
> The alignment to block size is repeated here and in the read function.
> Should not better to set a macro (something like BLOCK_ALIGN) 
> providing the required alignment ?
> 
> > +int saveenv(void)
> > +{
> > +	struct mmc *mmc = find_mmc_device(0);
> 
> Why is the MMC device hard-coded ? At least should be 
> configurable with a CONFIG_ option. There are boards with 
> more than one MMC controller and you constraint to use always 
> the first one.
> 
> > +	blk_start = (offset % 512) ? ((offset / 512) + 1) : 
> (offset / 512);
> 
> Already said, a macro is much more readable to perform alignment.
> 
> > diff --git a/include/environment.h b/include/environment.h
> 
> > +#if defined(CONFIG_ENV_IS_IN_MMC)
> > +# ifndef CONFIG_ENV_OFFSET
> > +#  error "Need to define CONFIG_ENV_OFFSET when using 
> CONFIG_ENV_IS_IN_MMC"
> > +# endif
> > +# ifndef CONFIG_ENV_ADDR
> > +#  define CONFIG_ENV_ADDR	(CONFIG_ENV_OFFSET)
> > +# endif
> > +# ifndef CONFIG_ENV_OFFSET
> > +#  define CONFIG_ENV_OFFSET (CONFIG_ENV_ADDR) # endif # ifdef 
> > +CONFIG_ENV_OFFSET_REDUND #  define 
> CONFIG_SYS_REDUNDAND_ENVIRONMENT # 
> > +endif # ifdef CONFIG_ENV_IS_EMBEDDED
> > +#  define ENV_IS_EMBEDDED	1
> > +# endif
> > +#endif /* CONFIG_ENV_IS_IN_MMC */
> 
> You missed Wolfgang's comment. I think also that there is no 
> reason to set offset for the MMC and block numbers makes more sense.
> 
> > +
> >  /* Embedded env is only supported for some flash types */  #ifdef 
> > CONFIG_ENV_IS_EMBEDDED  # if !defined(CONFIG_ENV_IS_IN_FLASH) && ¥ 
> > diff --git a/lib_arm/board.c b/lib_arm/board.c index 
> 5e3d7f6..f846d0d
> > 100644
> 
> > +#ifdef CONFIG_GENERIC_MMC
> > +	puts ("MMC:   ");
> > +	mmc_initialize (gd->bd);
> > +#endif
> 
> > diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 
> 765f97a..9b3f84c
> > 100644
> > --- a/lib_ppc/board.c
> > +++ b/lib_ppc/board.c
> > @@ -776,6 +776,12 @@ void board_init_r (gd_t *id, ulong dest_addr)
> >  	nand_init();		/* go init the NAND */
> >  #endif
> >  
> > +#ifdef CONFIG_GENERIC_MMC
> > +	WATCHDOG_RESET ();
> > +	puts ("MMC:  ");
> > +	mmc_initialize (bd);
> > +#endif
> 
> I am quite confused. You add the initialization only for ARM and PPC.
> What about the other architectures ?
> 
> I tested your patch on mx51evk, environment is correctly 
> read/written on the SD situated on the back.
> 
> Regards,
> Stefano
> 
> --
> =====================================================================
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: 
> office at denx.de 
> =====================================================================
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
> 


More information about the U-Boot mailing list