When the DONE pin does not go high after programming to confirm programming success, the INIT_B pin provides some info on the reason. Use it if available to provide a more explanatory error message.
Signed-off-by: Luca Ceresoli <l...@lucaceresoli.net> --- drivers/fpga/xilinx-spi.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/fpga/xilinx-spi.c b/drivers/fpga/xilinx-spi.c index 502fae0d1d85..2aa942bb1114 100644 --- a/drivers/fpga/xilinx-spi.c +++ b/drivers/fpga/xilinx-spi.c @@ -169,7 +169,16 @@ static int xilinx_spi_write_complete(struct fpga_manager *mgr, return xilinx_spi_apply_cclk_cycles(conf); } - dev_err(&mgr->dev, "Timeout after config data transfer.\n"); + if (conf->init_b) { + int init_b_asserted = gpiod_get_value(conf->init_b); + + dev_err(&mgr->dev, + init_b_asserted ? "CRC error or invalid device\n" + : "Missing sync word or incomplete bitstream\n"); + } else { + dev_err(&mgr->dev, "Timeout after config data transfer.\n"); + } + return -ETIMEDOUT; } -- 2.28.0