|
@@ -33,6 +33,10 @@
|
|
|
|
|
|
#if (CONFIG_FPGA & (CFG_XILINX | CFG_VIRTEX2))
|
|
|
|
|
|
+#if 0
|
|
|
+#define FPGA_DEBUG
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef FPGA_DEBUG
|
|
|
#define PRINTF(fmt,args...) printf (fmt ,##args)
|
|
|
#else
|
|
@@ -190,7 +194,7 @@ int Virtex2_reloc (Xilinx_desc * desc, ulong reloc_offset)
|
|
|
* this process, a configuration error (most likely CRC failure) has
|
|
|
* ocurred. At this point a status word may be read from the
|
|
|
* SelectMap interface to determine the source of the problem (You
|
|
|
- * could, for instance, put this in you 'abort' function handler).
|
|
|
+ * could, for instance, put this in your 'abort' function handler).
|
|
|
* 4. After all data has been written, test the state of the FPGA
|
|
|
* INIT_B and DONE lines. If both are high, configuration has
|
|
|
* succeeded. Congratulations!
|
|
@@ -251,7 +255,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
|
|
|
ts = get_timer (0);
|
|
|
do {
|
|
|
if (get_timer (ts) > CFG_FPGA_WAIT_INIT) {
|
|
|
- printf ("%s:%d: ** Timeout after %d mS waiting for INIT"
|
|
|
+ printf ("%s:%d: ** Timeout after %d ticks waiting for INIT"
|
|
|
" to assert.\n", __FUNCTION__, __LINE__,
|
|
|
CFG_FPGA_WAIT_INIT);
|
|
|
(*fn->abort) (cookie);
|
|
@@ -270,7 +274,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
|
|
|
do {
|
|
|
CONFIG_FPGA_DELAY ();
|
|
|
if (get_timer (ts) > CFG_FPGA_WAIT_INIT) {
|
|
|
- printf ("%s:%d: ** Timeout after %d mS waiting for INIT"
|
|
|
+ printf ("%s:%d: ** Timeout after %d ticks waiting for INIT"
|
|
|
" to deassert.\n", __FUNCTION__, __LINE__,
|
|
|
CFG_FPGA_WAIT_INIT);
|
|
|
(*fn->abort) (cookie);
|
|
@@ -293,14 +297,24 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
|
|
|
return FPGA_FAIL;
|
|
|
}
|
|
|
#endif
|
|
|
+
|
|
|
+ if ((*fn->done) (cookie) == FPGA_SUCCESS) {
|
|
|
+ PRINTF ("%s:%d:done went active early, bytecount = %d\n",
|
|
|
+ __FUNCTION__, __LINE__, bytecount);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
#ifdef CFG_FPGA_CHECK_ERROR
|
|
|
if ((*fn->init) (cookie)) {
|
|
|
- printf ("%s:%d: ** Error: INIT asserted during"
|
|
|
+ printf ("\n%s:%d: ** Error: INIT asserted during"
|
|
|
" configuration\n", __FUNCTION__, __LINE__);
|
|
|
+ printf ("%d = buffer offset, %d = buffer size\n",
|
|
|
+ bytecount, bsize);
|
|
|
(*fn->abort) (cookie);
|
|
|
return FPGA_FAIL;
|
|
|
}
|
|
|
#endif
|
|
|
+
|
|
|
(*fn->wdata) (data[bytecount++], TRUE, cookie);
|
|
|
CONFIG_FPGA_DELAY ();
|
|
|
|
|
@@ -315,7 +329,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
|
|
|
ts = get_timer (0);
|
|
|
while ((*fn->busy) (cookie)) {
|
|
|
if (get_timer (ts) > CFG_FPGA_WAIT_BUSY) {
|
|
|
- printf ("%s:%d: ** Timeout after %d mS waiting for"
|
|
|
+ printf ("%s:%d: ** Timeout after %d ticks waiting for"
|
|
|
" BUSY to deassert\n",
|
|
|
__FUNCTION__, __LINE__, CFG_FPGA_WAIT_BUSY);
|
|
|
(*fn->abort) (cookie);
|
|
@@ -349,7 +363,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
|
|
|
ret_val = FPGA_SUCCESS;
|
|
|
while (((*fn->done) (cookie) == FPGA_FAIL) || (*fn->init) (cookie)) {
|
|
|
if (get_timer (ts) > CFG_FPGA_WAIT_CONFIG) {
|
|
|
- printf ("%s:%d: ** Timeout after %d mS waiting for DONE to"
|
|
|
+ printf ("%s:%d: ** Timeout after %d ticks waiting for DONE to"
|
|
|
"assert and INIT to deassert\n",
|
|
|
__FUNCTION__, __LINE__, CFG_FPGA_WAIT_CONFIG);
|
|
|
(*fn->abort) (cookie);
|