Message ID | 1272013685-1032-1-git-send-email-w.wegner@astro-kom.de |
---|---|
State | Accepted |
Commit | b0bc8b70ff74501fd7a6e42013a4a7ea05cf6ade |
Delegated to: | Wolfgang Denk |
Headers | show |
Dear Wolfgang Wegner, In message <1272013685-1032-1-git-send-email-w.wegner@astro-kom.de> you wrote: > Currently the hardware was left in an undefined state in case Spartan3 > serial load failed. This patch adds Xilinx_abort_fn to give the board > a possibility to clean up in this case. > > Signed-off-by: Wolfgang Wegner <w.wegner@astro-kom.de> > --- > All other FPGA drivers already support such an abort function - it seems > Spartan3 serial load was a bit neglected (only discovered this because > it messed up things on my board after a failed FPGA load). > > drivers/fpga/spartan3.c | 6 ++++++ > include/spartan3.h | 1 + > 2 files changed, 7 insertions(+), 0 deletions(-) Applied to "next". Thanks, and sorry this took so long. Best regards, Wolfgang Denk
diff --git a/drivers/fpga/spartan3.c b/drivers/fpga/spartan3.c index 7a89b56..1dd6f26 100644 --- a/drivers/fpga/spartan3.c +++ b/drivers/fpga/spartan3.c @@ -366,6 +366,8 @@ static int Spartan3_ss_load (Xilinx_desc * desc, void *buf, size_t bsize) CONFIG_FPGA_DELAY (); if (get_timer (ts) > CONFIG_SYS_FPGA_WAIT) { /* check the time */ puts ("** Timeout waiting for INIT to start.\n"); + if (*fn->abort) + (*fn->abort) (cookie); return FPGA_FAIL; } } while (!(*fn->init) (cookie)); @@ -380,6 +382,8 @@ static int Spartan3_ss_load (Xilinx_desc * desc, void *buf, size_t bsize) CONFIG_FPGA_DELAY (); if (get_timer (ts) > CONFIG_SYS_FPGA_WAIT) { /* check the time */ puts ("** Timeout waiting for INIT to clear.\n"); + if (*fn->abort) + (*fn->abort) (cookie); return FPGA_FAIL; } } while ((*fn->init) (cookie)); @@ -394,6 +398,8 @@ static int Spartan3_ss_load (Xilinx_desc * desc, void *buf, size_t bsize) while DONE is low (inactive) */ if ((*fn->done) (cookie) == 0 && (*fn->init) (cookie)) { puts ("** CRC error during FPGA load.\n"); + if (*fn->abort) + (*fn->abort) (cookie); return (FPGA_FAIL); } val = data [bytecount ++]; diff --git a/include/spartan3.h b/include/spartan3.h index d5a589d..0f0b400 100644 --- a/include/spartan3.h +++ b/include/spartan3.h @@ -58,6 +58,7 @@ typedef struct { Xilinx_wr_fn wr; Xilinx_post_fn post; Xilinx_bwr_fn bwr; /* block write function */ + Xilinx_abort_fn abort; } Xilinx_Spartan3_Slave_Serial_fns; /* Device Image Sizes
Currently the hardware was left in an undefined state in case Spartan3 serial load failed. This patch adds Xilinx_abort_fn to give the board a possibility to clean up in this case. Signed-off-by: Wolfgang Wegner <w.wegner@astro-kom.de> --- All other FPGA drivers already support such an abort function - it seems Spartan3 serial load was a bit neglected (only discovered this because it messed up things on my board after a failed FPGA load). drivers/fpga/spartan3.c | 6 ++++++ include/spartan3.h | 1 + 2 files changed, 7 insertions(+), 0 deletions(-)