
The while loop exits too soon if the "busy" function is a dummy function which always returns false.
diff -pur a/common/spartan3.c b/common/spartan3.c --- a/common/spartan3.c 2007-06-30 05:15:22.000000000 -0700 +++ b/common/spartan3.c 2007-06-30 05:17:30.000000000 -0700 @@ -176,7 +176,7 @@ static int Spartan3_sp_load (Xilinx_desc "read data:\t0x%p\n" "write data:\t0x%p\n" "busy:\t0x%p\n" - "abort:\t0x%p\n", + "abort:\t0x%p\n" "post:\t0x%p\n\n", __FUNCTION__, &fn, fn, fn->pre, fn->pgm, fn->init, fn->err, fn->clk, fn->cs, fn->wr, fn->rdata, fn->wdata, fn->busy, @@ -213,7 +213,7 @@ static int Spartan3_sp_load (Xilinx_desc (*fn->abort) (cookie); /* abort the burn */ return FPGA_FAIL; } - } while ((*fn->init) (cookie) && (*fn->busy) (cookie)); + } while ((*fn->init) (cookie) || (*fn->busy) (cookie));
(*fn->wr) (TRUE, TRUE, cookie); /* Assert write, commit */ (*fn->cs) (TRUE, TRUE, cookie); /* Assert chip select, commit */