cfi_flash: Cleanup flash_print_info()
authorStefan Roese <sr@denx.de>
Fri, 13 Aug 2010 07:36:36 +0000 (09:36 +0200)
committerStefan Roese <sr@denx.de>
Wed, 18 Aug 2010 07:09:00 +0000 (09:09 +0200)
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>
drivers/mtd/cfi_flash.c

index 2157c027823d948693d9624e38e2d883c5abb4bc..1191ef02f80b3ed5647e5aea1efb4c8dd66b2cc4 100644 (file)
@@ -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 ",