On Fri, May 13, 2022 at 07:27:52PM +0300, Ivan Bornyakov wrote: > Add support to the FPGA manager for programming Microchip Polarfire > FPGAs over slave SPI interface with .dat formatted bitsream image. > > Changelog: > v1 -> v2: fix printk formating > v2 -> v3: > * replace "microsemi" with "microchip" > * replace prefix "microsemi_fpga_" with "mpf_" > * more sensible .compatible and .name strings > * remove unused defines STATUS_SPI_VIOLATION and STATUS_SPI_ERROR > v3 -> v4: fix unused variable warning > Put 'mpf_of_ids' definition under conditional compilation, so it > would not hang unused if CONFIG_OF is not enabled. > v4 -> v5: > * prefix defines with MPF_ > * mdelay() -> usleep_range() > * formatting fixes > * add DT bindings doc > * rework fpga_manager_ops.write() to fpga_manager_ops.write_sg() > We can't parse image header in write_init() because image header > size is not known beforehand. Thus parsing need to be done in > fpga_manager_ops.write() callback, but fpga_manager_ops.write() > also need to be reenterable. On the other hand, > fpga_manager_ops.write_sg() is called once. Thus, rework usage of > write() callback to write_sg(). > v5 -> v6: fix patch applying > I forgot to clean up unrelated local changes which lead to error on > patch 0001-fpga-microchip-spi-add-Microchip-MPF-FPGA-manager.patch > applying on vanilla kernel. > v6 -> v7: fix binding doc to pass dt_binding_check > v7 -> v8: another fix for dt_binding_check warning > v8 -> v9: > * add another patch to support bitstream offset in FPGA image buffer > * rework fpga_manager_ops.write_sg() back to fpga_manager_ops.write() > * move image header parsing from write() to write_init() > v9 -> v10: > * add parse_header() callback to fpga_manager_ops > * adjust fpga_mgr_write_init[_buf|_sg]() for parse_header() usage > * implement parse_header() in microchip-spi driver > v10 -> v11: include missing unaligned.h to microchip-spi > fix error: implicit declaration of function 'get_unaligned_le[16|32]' > v11 -> v12: > * microchip-spi: double read hw status, ignore first read, because it > can be unreliable. > * microchip-spi: remove sleep between status readings in > poll_status_not_busy() to save a few seconds. Status is polled on > every 16 byte writes - that is quite often, therefore > usleep_range() accumulate to a considerable number of seconds. > > Ivan Bornyakov (3): > fpga: fpga-mgr: support bitstream offset in image buffer > fpga: microchip-spi: add Microchip MPF FPGA manager > dt-bindings: fpga: add binding doc for microchip-spi fpga mgr > > .../fpga/microchip,mpf-spi-fpga-mgr.yaml | 44 +++ > drivers/fpga/Kconfig | 9 + > drivers/fpga/Makefile | 1 + > drivers/fpga/fpga-mgr.c | 150 +++++-- > drivers/fpga/microchip-spi.c | 371 ++++++++++++++++++ > include/linux/fpga/fpga-mgr.h | 13 +- > 6 files changed, 552 insertions(+), 36 deletions(-) > create mode 100644 Documentation/devicetree/bindings/fpga/microchip,mpf-spi-fpga-mgr.yaml > create mode 100644 drivers/fpga/microchip-spi.c > > -- > 2.35.1 > Friendly ping.