diff options
| author | Wolfgang Denk <wd@denx.de> | 2010-04-01 11:28:32 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2010-04-01 11:28:32 +0200 | 
| commit | ffa37fc98d71ef930bccd4e9eed37f6ce6b4d6af (patch) | |
| tree | 206908754219b5cc6e9f03518d34fb95a247bef9 /drivers/fpga/spartan3.c | |
| parent | ca6e1c136ddb720c3bb2cc043b99f7f06bc46c55 (diff) | |
| parent | fd03ea89641d6f6ade6d1a8580c1bb9f52b8542c (diff) | |
| download | olio-uboot-2014.01-ffa37fc98d71ef930bccd4e9eed37f6ce6b4d6af.tar.xz olio-uboot-2014.01-ffa37fc98d71ef930bccd4e9eed37f6ce6b4d6af.zip | |
Merge branch 'next'
Diffstat (limited to 'drivers/fpga/spartan3.c')
| -rw-r--r-- | drivers/fpga/spartan3.c | 52 | 
1 files changed, 28 insertions, 24 deletions
| diff --git a/drivers/fpga/spartan3.c b/drivers/fpga/spartan3.c index 0fe30410a..7a89b5692 100644 --- a/drivers/fpga/spartan3.c +++ b/drivers/fpga/spartan3.c @@ -385,34 +385,38 @@ static int Spartan3_ss_load (Xilinx_desc * desc, void *buf, size_t bsize)  		} while ((*fn->init) (cookie));  		/* Load the data */ -		while (bytecount < bsize) { +		if(*fn->bwr) +			(*fn->bwr) (data, bsize, TRUE, cookie); +		else { +			while (bytecount < bsize) { -			/* Xilinx detects an error if INIT goes low (active) -			   while DONE is low (inactive) */ -			if ((*fn->done) (cookie) == 0 && (*fn->init) (cookie)) { -				puts ("** CRC error during FPGA load.\n"); -				return (FPGA_FAIL); -			} -			val = data [bytecount ++]; -			i = 8; -			do { -				/* Deassert the clock */ -				(*fn->clk) (FALSE, TRUE, cookie); -				CONFIG_FPGA_DELAY (); -				/* Write data */ -				(*fn->wr) ((val & 0x80), TRUE, cookie); -				CONFIG_FPGA_DELAY (); -				/* Assert the clock */ -				(*fn->clk) (TRUE, TRUE, cookie); -				CONFIG_FPGA_DELAY (); -				val <<= 1; -				i --; -			} while (i > 0); +				/* Xilinx detects an error if INIT goes low (active) +				   while DONE is low (inactive) */ +				if ((*fn->done) (cookie) == 0 && (*fn->init) (cookie)) { +					puts ("** CRC error during FPGA load.\n"); +					return (FPGA_FAIL); +				} +				val = data [bytecount ++]; +				i = 8; +				do { +					/* Deassert the clock */ +					(*fn->clk) (FALSE, TRUE, cookie); +					CONFIG_FPGA_DELAY (); +					/* Write data */ +					(*fn->wr) ((val & 0x80), TRUE, cookie); +					CONFIG_FPGA_DELAY (); +					/* Assert the clock */ +					(*fn->clk) (TRUE, TRUE, cookie); +					CONFIG_FPGA_DELAY (); +					val <<= 1; +					i --; +				} while (i > 0);  #ifdef CONFIG_SYS_FPGA_PROG_FEEDBACK -			if (bytecount % (bsize / 40) == 0) -				putc ('.');		/* let them know we are alive */ +				if (bytecount % (bsize / 40) == 0) +					putc ('.');		/* let them know we are alive */  #endif +			}  		}  		CONFIG_FPGA_DELAY (); |