mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-12 13:35:21 -04:00
Merge branch 'master' of git://git.denx.de/u-boot-cfi-flash
* 'master' of git://git.denx.de/u-boot-cfi-flash: cfi: Make the flash erase and write operations abortable cfi: Check for blank before erase Signed-off-by: Wolfgang Denk <wd@denx.de>
This commit is contained in:
commit
f499131867
@ -443,7 +443,8 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
|
|||||||
rcode = flash_erase (info, s_first[bank], s_last[bank]);
|
rcode = flash_erase (info, s_first[bank], s_last[bank]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf ("Erased %d sectors\n", erased);
|
if (rcode == 0)
|
||||||
|
printf("Erased %d sectors\n", erased);
|
||||||
} else if (rcode == 0) {
|
} else if (rcode == 0) {
|
||||||
puts ("Error: start and/or end address"
|
puts ("Error: start and/or end address"
|
||||||
" not on sector boundary\n");
|
" not on sector boundary\n");
|
||||||
|
@ -221,6 +221,9 @@ void flash_perror (int err)
|
|||||||
case ERR_PROG_ERROR:
|
case ERR_PROG_ERROR:
|
||||||
puts ("General Flash Programming Error\n");
|
puts ("General Flash Programming Error\n");
|
||||||
break;
|
break;
|
||||||
|
case ERR_ABORTED:
|
||||||
|
puts("Flash Programming Aborted\n");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf ("%s[%d] FIXME: rc=%d\n", __FILE__, __LINE__, err);
|
printf ("%s[%d] FIXME: rc=%d\n", __FILE__, __LINE__, err);
|
||||||
break;
|
break;
|
||||||
|
@ -1077,7 +1077,38 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||||||
|
|
||||||
|
|
||||||
for (sect = s_first; sect <= s_last; sect++) {
|
for (sect = s_first; sect <= s_last; sect++) {
|
||||||
|
if (ctrlc()) {
|
||||||
|
printf("\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (info->protect[sect] == 0) { /* not protected */
|
if (info->protect[sect] == 0) { /* not protected */
|
||||||
|
#ifdef CONFIG_SYS_FLASH_CHECK_BLANK_BEFORE_ERASE
|
||||||
|
int k;
|
||||||
|
int size;
|
||||||
|
int erased;
|
||||||
|
u32 *flash;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if whole sector is erased
|
||||||
|
*/
|
||||||
|
size = flash_sector_size(info, sect);
|
||||||
|
erased = 1;
|
||||||
|
flash = (u32 *)info->start[sect];
|
||||||
|
/* divide by 4 for longword access */
|
||||||
|
size = size >> 2;
|
||||||
|
for (k = 0; k < size; k++) {
|
||||||
|
if (flash_read32(flash++) != 0xffffffff) {
|
||||||
|
erased = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (erased) {
|
||||||
|
if (flash_verbose)
|
||||||
|
putc(',');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
switch (info->vendor) {
|
switch (info->vendor) {
|
||||||
case CFI_CMDSET_INTEL_PROG_REGIONS:
|
case CFI_CMDSET_INTEL_PROG_REGIONS:
|
||||||
case CFI_CMDSET_INTEL_STANDARD:
|
case CFI_CMDSET_INTEL_STANDARD:
|
||||||
@ -1353,6 +1384,9 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
|
|||||||
src += i;
|
src += i;
|
||||||
cnt -= i;
|
cnt -= i;
|
||||||
FLASH_SHOW_PROGRESS(scale, dots, digit, i);
|
FLASH_SHOW_PROGRESS(scale, dots, digit, i);
|
||||||
|
/* Only check every once in a while */
|
||||||
|
if ((cnt & 0xFFFF) < buffered_size && ctrlc())
|
||||||
|
return ERR_ABORTED;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
while (cnt >= info->portwidth) {
|
while (cnt >= info->portwidth) {
|
||||||
@ -1365,6 +1399,9 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
|
|||||||
wp += info->portwidth;
|
wp += info->portwidth;
|
||||||
cnt -= info->portwidth;
|
cnt -= info->portwidth;
|
||||||
FLASH_SHOW_PROGRESS(scale, dots, digit, info->portwidth);
|
FLASH_SHOW_PROGRESS(scale, dots, digit, info->portwidth);
|
||||||
|
/* Only check every once in a while */
|
||||||
|
if ((cnt & 0xFFFF) < info->portwidth && ctrlc())
|
||||||
|
return ERR_ABORTED;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SYS_FLASH_USE_BUFFER_WRITE */
|
#endif /* CONFIG_SYS_FLASH_USE_BUFFER_WRITE */
|
||||||
|
|
||||||
|
@ -141,6 +141,7 @@ extern flash_info_t *flash_get_info(ulong base);
|
|||||||
#define ERR_UNKNOWN_FLASH_VENDOR 32
|
#define ERR_UNKNOWN_FLASH_VENDOR 32
|
||||||
#define ERR_UNKNOWN_FLASH_TYPE 64
|
#define ERR_UNKNOWN_FLASH_TYPE 64
|
||||||
#define ERR_PROG_ERROR 128
|
#define ERR_PROG_ERROR 128
|
||||||
|
#define ERR_ABORTED 256
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Protection Flags for flash_protect():
|
* Protection Flags for flash_protect():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user