diff options
| author | Wolfgang Denk <wd@denx.de> | 2011-11-04 15:55:16 +0000 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2011-11-07 22:11:24 +0100 | 
| commit | 17834a5c63b7a4327205107d9d3e689326f527a4 (patch) | |
| tree | 359524483e355f790873d1f4182cdeb121b5a341 /board/pm520/flash.c | |
| parent | 6471ada534a917f89dd910cfe06279ea1238fbd0 (diff) | |
| download | olio-uboot-2014.01-17834a5c63b7a4327205107d9d3e689326f527a4.tar.xz olio-uboot-2014.01-17834a5c63b7a4327205107d9d3e689326f527a4.zip | |
PM520: add missing enable_interrupts()
The code disabled interrupts in several locations, without re-enabling
them again.  Fix this.
While we are at it, also fix a GCC 4.6 build warning:
flash.c: In function 'flash_erase':
flash.c:373:21: warning: variable 'last' set but not used
[-Wunused-but-set-variable]
Signed-off-by: Wolfgang Denk <wd@denx.de>
Cc: Josef Wagner <Wagner@Microsys.de>
Diffstat (limited to 'board/pm520/flash.c')
| -rw-r--r-- | board/pm520/flash.c | 17 | 
1 files changed, 12 insertions, 5 deletions
| diff --git a/board/pm520/flash.c b/board/pm520/flash.c index 64c862415..01dcd560c 100644 --- a/board/pm520/flash.c +++ b/board/pm520/flash.c @@ -370,7 +370,7 @@ static unsigned char intel_sector_protected (flash_info_t *info, ushort sector)  int flash_erase (flash_info_t *info, int s_first, int s_last)  {  	int flag, prot, sect; -	ulong type, start, last; +	ulong type, start;  	int rcode = 0;  	if ((s_first < 0) || (s_first > s_last)) { @@ -404,7 +404,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)  	}  	start = get_timer (0); -	last = start;  	/* Disable interrupts which might cause a timeout here */  	flag = disable_interrupts (); @@ -440,6 +439,10 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)  			printf (" done\n");  		}  	} + +	if (flag) +		enable_interrupts(); +  	return rcode;  } @@ -543,6 +546,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)  	ulong status;  	ulong start;  	int flag; +	int rcode = 0;  	/* Check if Flash is (sufficiently) erased */  	if ((*addr & data) != data) { @@ -561,14 +565,17 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)  	/* wait while polling the status register */  	while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {  		if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) { -			*addr = (FPW) 0x00FF00FF;	/* restore read mode */ -			return (1); +			rcode = 1; +			break;  		}  	}  	*addr = (FPW) 0x00FF00FF;	/* restore read mode */ -	return (0); +	if (flag) +		enable_interrupts(); + +	return rcode;  }  void inline spin_wheel (void) |