diff options
author | Wolfgang Denk <wd@denx.de> | 2010-03-28 00:04:18 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2010-03-28 00:04:18 +0100 |
commit | be1a91320ce0cb7330bb650d1576bb56c55092af (patch) | |
tree | f6bb6d34565d4f5b3386a23885fb3df6c17e0456 /drivers/fpga | |
parent | 6b94b4962211c16ee2197048faa887e1f92f3757 (diff) | |
parent | 9d3a86aec52cb3c0e9badd12167d9292184ce4dd (diff) | |
download | u-boot-imx-be1a91320ce0cb7330bb650d1576bb56c55092af.zip u-boot-imx-be1a91320ce0cb7330bb650d1576bb56c55092af.tar.gz u-boot-imx-be1a91320ce0cb7330bb650d1576bb56c55092af.tar.bz2 |
Merge branch 'next' of git://git.denx.de/u-boot-coldfire into next
Diffstat (limited to 'drivers/fpga')
-rw-r--r-- | drivers/fpga/spartan3.c | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/drivers/fpga/spartan3.c b/drivers/fpga/spartan3.c index 0fe3041..7a89b56 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) { - - /* 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); + 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); #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 (); |