fpga manager: xilinx-spi: provide better diagnostics on programming failure
authorLuca Ceresoli <luca@lucaceresoli.net>
Sun, 30 Aug 2020 16:38:50 +0000 (18:38 +0200)
committerMoritz Fischer <mdf@kernel.org>
Mon, 31 Aug 2020 00:09:05 +0000 (17:09 -0700)
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>
drivers/fpga/xilinx-spi.c

index 52aab5a..824abbb 100644 (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;
 }