fpga manager: xilinx-spi: provide better diagnostics on programming failure

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.

Reviewed-by: Tom Rix <trix@redhat.com>
Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
Signed-off-by: Moritz Fischer <mdf@kernel.org>
This commit is contained in:
Luca Ceresoli 2020-08-30 18:38:50 +02:00 committed by Moritz Fischer
parent eefe64fba9
commit 4e772ab86b
1 changed files with 15 additions and 1 deletions

View File

@ -195,7 +195,21 @@ static int xilinx_spi_write_complete(struct fpga_manager *mgr,
return 0;
}
dev_err(&mgr->dev, "Timeout after config data transfer\n");
if (conf->init_b) {
ret = gpiod_get_value(conf->init_b);
if (ret < 0) {
dev_err(&mgr->dev, "Error reading INIT_B (%d)\n", ret);
return ret;
}
dev_err(&mgr->dev,
ret ? "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;
}