diff options
Diffstat (limited to 'drivers/mtd/cfi_flash.c')
| -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 ", |