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>
master
Stefan Roese 14 years ago
parent d77c7ac47e
commit 70084df712
  1. 51
      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 ",

Loading…
Cancel
Save