diff options
| -rw-r--r-- | common/cmd_flash.c | 3 | ||||
| -rw-r--r-- | common/flash.c | 3 | ||||
| -rw-r--r-- | drivers/mtd/cfi_flash.c | 11 | ||||
| -rw-r--r-- | include/flash.h | 1 | 
4 files changed, 17 insertions, 1 deletions
| diff --git a/common/cmd_flash.c b/common/cmd_flash.c index 0e9b2e3c7..e55d366c6 100644 --- a/common/cmd_flash.c +++ b/common/cmd_flash.c @@ -443,7 +443,8 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)  				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) {  		puts ("Error: start and/or end address"  			" not on sector boundary\n"); diff --git a/common/flash.c b/common/flash.c index 781cb9c4a..8244ba2dd 100644 --- a/common/flash.c +++ b/common/flash.c @@ -221,6 +221,9 @@ void flash_perror (int err)  	case ERR_PROG_ERROR:  		puts ("General Flash Programming Error\n");  		break; +	case ERR_ABORTED: +		puts("Flash Programming Aborted\n"); +		break;  	default:  		printf ("%s[%d] FIXME: rc=%d\n", __FILE__, __LINE__, err);  		break; diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c index 97a4fd7cf..43140f364 100644 --- a/drivers/mtd/cfi_flash.c +++ b/drivers/mtd/cfi_flash.c @@ -1077,6 +1077,11 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)  	for (sect = s_first; sect <= s_last; sect++) { +		if (ctrlc()) { +			printf("\n"); +			return 1; +		} +  		if (info->protect[sect] == 0) { /* not protected */  #ifdef CONFIG_SYS_FLASH_CHECK_BLANK_BEFORE_ERASE  			int k; @@ -1379,6 +1384,9 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)  		src += i;  		cnt -= 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  	while (cnt >= info->portwidth) { @@ -1391,6 +1399,9 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)  		wp += info->portwidth;  		cnt -= 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 */ diff --git a/include/flash.h b/include/flash.h index e614d07df..6d70bdd81 100644 --- a/include/flash.h +++ b/include/flash.h @@ -141,6 +141,7 @@ extern flash_info_t *flash_get_info(ulong base);  #define ERR_UNKNOWN_FLASH_VENDOR	32  #define ERR_UNKNOWN_FLASH_TYPE		64  #define ERR_PROG_ERROR			128 +#define ERR_ABORTED			256  /*-----------------------------------------------------------------------   * Protection Flags for flash_protect(): |