diff options
| author | Stefan Roese <sr@denx.de> | 2010-08-13 09:36:36 +0200 | 
|---|---|---|
| committer | Stefan Roese <sr@denx.de> | 2010-08-18 09:09:00 +0200 | 
| commit | 70084df7125a0b67de707b999982ec67adfdc35c (patch) | |
| tree | 5b000a06eb2ec9cef2a2b712f2b5e68ceffda762 | |
| parent | d77c7ac47e4ea750cc13c2f0ecc037ab7afa7964 (diff) | |
| download | olio-uboot-2014.01-70084df7125a0b67de707b999982ec67adfdc35c.tar.xz olio-uboot-2014.01-70084df7125a0b67de707b999982ec67adfdc35c.zip | |
cfi_flash: Cleanup flash_print_info()
This patch does the following:
- Extract code to detect if sector is erased into function
  sector_erased().
- Because of this, we don't have variable declarations inside the
  sector loop in flash_print_info()
- Change "return" to "break" in the "if (ctrlc()) statement:
  This fixes a problem with the resulting output. Before this
  patch the output was:
  Sector Start Addresses:
  FC000000        FC020000        FC040000   =>
  With this patch it is now:
  Sector Start Addresses:
  FC000000        FC020000        FC040000
  =>
Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Kim Phillips <kim.phillips@freescale.com>
Cc: Wolfgang Denk <wd@denx.de>
| -rw-r--r-- | drivers/mtd/cfi_flash.c | 51 | 
1 files changed, 27 insertions, 24 deletions
| diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c index 2157c0278..1191ef02f 100644 --- a/drivers/mtd/cfi_flash.c +++ b/drivers/mtd/cfi_flash.c @@ -1096,8 +1096,30 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)  	return rcode;  } -/*----------------------------------------------------------------------- - */ +#ifdef CONFIG_SYS_FLASH_EMPTY_INFO +static int sector_erased(flash_info_t *info, int i) +{ +	int k; +	int size; +	volatile unsigned long *flash; + +	/* +	 * Check if whole sector is erased +	 */ +	size = flash_sector_size(info, i); +	flash = (volatile unsigned long *) info->start[i]; +	/* divide by 4 for longword access */ +	size = size >> 2; + +	for (k = 0; k < size; k++) { +		if (*flash++ != 0xffffffff) +			return 0;	/* not erased */ +	} + +	return 1;			/* erased */ +} +#endif /* CONFIG_SYS_FLASH_EMPTY_INFO */ +  void flash_print_info (flash_info_t * info)  {  	int i; @@ -1162,33 +1184,14 @@ void flash_print_info (flash_info_t * info)  	puts ("\n  Sector Start Addresses:");  	for (i = 0; i < info->sector_count; ++i) {  		if (ctrlc()) -			return; +			break;  		if ((i % 5) == 0) -			printf ("\n"); +			putc('\n');  #ifdef CONFIG_SYS_FLASH_EMPTY_INFO -		int k; -		int size; -		int erased; -		volatile unsigned long *flash; - -		/* -		 * Check if whole sector is erased -		 */ -		size = flash_sector_size(info, i); -		erased = 1; -		flash = (volatile unsigned long *) info->start[i]; -		size = size >> 2;	/* divide by 4 for longword access */ -		for (k = 0; k < size; k++) { -			if (*flash++ != 0xffffffff) { -				erased = 0; -				break; -			} -		} -  		/* print empty and read-only info */  		printf ("  %08lX %c %s ",  			info->start[i], -			erased ? 'E' : ' ', +			sector_erased(info, i) ? 'E' : ' ',  			info->protect[i] ? "RO" : "  ");  #else	/* ! CONFIG_SYS_FLASH_EMPTY_INFO */  		printf ("  %08lX   %s ", |