|
@@ -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 ",
|