fpga manager: xilinx-spi: fix write_complete timeout handling
authorLuca Ceresoli <luca@lucaceresoli.net>
Sun, 30 Aug 2020 16:38:48 +0000 (18:38 +0200)
committerMoritz Fischer <mdf@kernel.org>
Mon, 31 Aug 2020 00:06:50 +0000 (17:06 -0700)
commit16b7856d94807abeb62f615a8580fd7ae8a27515
tree5ba1b91eb82df9b0c7ae90fc8cfc1c531261a7f0
parenta44ecdc9c97e75e229ec454ba774327769c5b81c
fpga manager: xilinx-spi: fix write_complete timeout handling

If this routine sleeps because it was scheduled out, it might miss DONE
going asserted and consider it a timeout. This would potentially make the
code return an error even when programming succeeded. Rewrite the loop to
always check DONE after checking if timeout expired so this cannot happen
anymore.

While there, also add error checking for gpiod_get_value(). Also avoid
checking the DONE GPIO in two places, which would make the error-checking
code duplicated and more annoying.

The new loop it written to still guarantee that we apply 8 extra CCLK
cycles after DONE has gone asserted, which is required by the hardware.

Reported-by: Tom Rix <trix@redhat.com>
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