From: Christopher H. <ch...@us...> - 2002-03-11 22:07:02
|
Update of /cvsroot/blob/blob/src/blob In directory usw-pr-cvs1:/tmp/cvs-serv11137/src/blob Modified Files: intel16.c intel32.c Log Message: clear flash error status before attempting to lock/unlock a block; otherwise past errors may be seen. this fixes bug 514517 (tested with C3 flash). Index: intel16.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/intel16.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- intel16.c 15 Jan 2002 01:32:47 -0000 1.5 +++ intel16.c 11 Mar 2002 22:06:55 -0000 1.6 @@ -66,12 +66,6 @@ #define FLASH_TIMEOUT (20) -static void clear_status(u16 *addr) -{ - *addr = STATUS_CLEAR; - barrier(); -} - static int get_status(u16 *addr) { u32 start, end; @@ -93,6 +87,12 @@ } } +static void clear_status(u16 *addr) +{ + *addr = STATUS_CLEAR; + barrier(); +} + static void print_flash_error(const char *what, u16 *addr, int status) { serial_write('\n'); @@ -249,6 +249,8 @@ u16 *p = (u16 *) blockStart; int status; + clear_status(p); + *p = CONFIG_SETUP; barrier(); *p = LOCK_SECTOR; @@ -273,6 +275,8 @@ u16 *p = (u16 *) blockStart; int status; + clear_status(p); + *p = CONFIG_SETUP; barrier(); *p = UNLOCK_SECTOR; @@ -297,6 +301,8 @@ { u16 *p = (u16 *) blockStart; u16 result; + + clear_status(p); *p = READ_CONFIG; barrier(); Index: intel32.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/intel32.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- intel32.c 15 Jan 2002 01:32:47 -0000 1.5 +++ intel32.c 11 Mar 2002 22:06:55 -0000 1.6 @@ -66,12 +66,6 @@ #define FLASH_TIMEOUT (20) -static void clear_status(u32 *addr) -{ - *addr = data_to_flash(STATUS_CLEAR); - barrier(); -} - static int get_status(u32 *addr) { u32 start, end; @@ -93,6 +87,12 @@ } } +static void clear_status(u32 *addr) +{ + *addr = data_to_flash(STATUS_CLEAR); + barrier(); +} + static void print_flash_error(const char *what, u32 *addr, int status) { serial_write('\n'); @@ -199,6 +199,8 @@ { u32 status; + clear_status(blockStart); + *blockStart = data_to_flash(CONFIG_SETUP); barrier(); *blockStart = data_to_flash(LOCK_SECTOR); @@ -222,6 +224,8 @@ { u32 status; + clear_status(blockStart); + *blockStart = data_to_flash(CONFIG_SETUP); barrier(); *blockStart = data_to_flash(UNLOCK_SECTOR); @@ -244,6 +248,8 @@ static int flash_query_block_lock_intel32(u32 *blockStart) { u32 result; + + clear_status(blockStart); *blockStart = data_to_flash(READ_CONFIG); barrier(); |