Re: [PATCH v13 0/2] Lattice sysCONFIG SPI FPGA manager
From: Ivan Bornyakov
Date: Mon Oct 03 2022 - 02:08:18 EST
On Mon, Sep 26, 2022 at 05:39:22PM +0300, Ivan Bornyakov wrote:
> Add support to the FPGA manager for programming Lattice ECP5 FPGA over
> slave SPI sysCONFIG interface.
>
> ChangeLog:
> v1 -> v2:
> * remove "spi" from compatible string
> * reword description in dt-bindings doc
> * add reference to spi-peripheral-props.yaml in dt-binding doc
> * fix DTS example in dt-bindings doc: 4-spaces indentations, no
> undersores in node names.
> v2 -> v3:
> * fix typo "##size-cells" -> "#size-cells" in dt-bindings example
> v3 -> v4:
> * dt-bindings: reword description
> * dt-bindings: revert props order
> v4 -> v5:
> * dt-bindings: remove trailing dot from title
> * dt-bindings: reword description to avoid driver reference
> * dt-bindings: add "Reviewed-by: Krzysztof Kozlowski" tag
> v5 -> v6:
> * ecp5-spi: lock SPI bus for exclusive usage in
> ecp5_ops_write_init(), release in ecp5_ops_write_complete()
> or on error
> v6 -> v7:
> * ecp5-spi.c -> lattice-sysconfig-spi.c. Reworked to represent
> generalized sysCONFIG port with implementations for ECP5 and
> MachXO2
> * lattice,ecp5-fpga-mgr.yaml -> lattice,sysconfig.yaml. Reworked to
> document both ECP5 and MachXO2 sysCONFIG.
> * dt-bindings: remove "Reviewed-by: Krzysztof Kozlowski" tag as doc
> was rewritten by a considerable amount.
> v7 -> v8:
> * dt-bindings: move "program-gpios", "init-gpios" and "done-gpios"
> to top-level properties and disallow them for MachXO2 variant.
> v8 -> v9:
> * dt-bindings: "program-gpios", "init-gpios" and "done-gpios" are
> now optional for both ECP5 and MachXO2
> * lattice-sysconfig-spi.c -> sysconfig-spi.c + sysconfig.c +
> sysconfig.h
> ** reworked to be one sysCONFIG FPGA Manager rather than two
> distinct ECP5 and MachXO2 managers
> ** splitted to port type agnostic sysconfig.c and SPI-specific
> sysconfig-spi.c
> ** command transfer function moved to callback for ease of
> adding another port type, such as I2C
> v9 -> v10:
> * split sysconfig_transfer() callback into separate command_write()
> and command_write_then_read(). There are too many transfers
> without readback.
> * add command_write_with_data() callback which performs single
> transfer of command + data. It's needed for better abstraction of
> paged bitstream write routine.
> * move sysconfig_lsc_burst_init() to bitstream_burst_write_init()
> callback to break dependence of sysconfig.c from sysconfig-spi.c
> * move sysconfig_lsc_burst_complete() to bitstream_burst_write_complete()
> callback to break dependence of sysconfig.c from sysconfig-spi.c
> * add bitstream_burst_write() to abstract fpga_manager_ops->write()
> from bus type
> * remove struct spi_device from struct sysconfig_priv, use
> to_spi_device()
> * move fpga_manager_ops initialization to sysconfig.c
> v10 -> v11:
> * rename sysconfig_lsc_burst_init() to sysconfig_spi_lsc_burst_init()
> * rename sysconfig_bitstream_burst_write() to
> sysconfig_spi_bitstream_burst_write()
> * rename sysconfig_lsc_burst_complete() to
> sysconfig_spi_lsc_burst_complete()
> * rename "ecp5-fpga-mgr" to "sysconfig-ecp5"
> * rename "machxo2-fpga-mgr" to "sysconfig-machxo2"
> * move spi_max_speed_hz from struct sysconfig_fpga_priv to
> struct sysconfig_spi_fpga_priv, which is local to sysconfig-spi.c
> * remove SPI bus unlock on write error form
> sysconfig_spi_bitstream_burst_write(), call
> sysconfig_burst_write_complete() on error in
> sysconfig_bitstream_burst_write() instead.
> v11 -> v12:
> * build sysconfig core as separate module to prevent duplication of
> common code segments across different binaries
> * rename sysconfig.c to lattice-sysconfig.c
> * rename sysconfig.h to lattice-sysconfig.h
> * rename sysconfig-spi.c to lattice-sysconfig-spi.c
> * rename sysconfig_spi_cmd_write_then_read() to
> sysconfig_spi_cmd_read()
> * rename command_write_then_read() callback to command_read()
> * rename sysconfig_cmd_write_then_read() to sysconfig_cmd_read()
> * rename sysconfig_spi_lsc_burst_init() to
> sysconfig_spi_bitstream_burst_init()
> * rename sysconfig_spi_lsc_burst_complete() to
> sysconfig_spi_bitstream_burst_complete()
> * remove excessive !spi check from sysconfig_spi_cmd_write(),
> sysconfig_spi_cmd_read(), sysconfig_spi_bitstream_burst_init(),
> sysconfig_spi_bitstream_burst_write() and
> sysconfig_spi_bitstream_burst_complete()
> * drop MachXO2 support
> ** drop struct sysconfig_fpga_priv
> ** drop paged write
> ** drop command_write_with_data() and friends
> ** drop ISC_PROGRAM_DONE routine
> ** drop refresh from sysconfig_isc_finish()
> ** sysconfig_isc_erase() only erase SRAM
> ** drop MachXO2 mentions from DT bindings doc
> v12 -> v13:
> * use device_get_match_data() instead of of_device_get_match_data()
> and drop of_device.h inclusion
> * in polling routines use time_before(jiffies, timeout) instead of
> retries count
> * add usleep_range() to gpio polling routine
> * check fail status of command in more pronounced way
> * check definition of sysconfig_priv callbacks at probe
> * (BIT(23) | BIT(24) | BIT(25)) -> GENMASK(25, 23)
>
> Ivan Bornyakov (2):
> fpga: lattice-sysconfig-spi: add Lattice sysCONFIG FPGA manager
> dt-bindings: fpga: document Lattice sysCONFIG FPGA manager
>
> .../bindings/fpga/lattice,sysconfig.yaml | 81 ++++
> drivers/fpga/Kconfig | 11 +
> drivers/fpga/Makefile | 2 +
> drivers/fpga/lattice-sysconfig-spi.c | 151 ++++++
> drivers/fpga/lattice-sysconfig.c | 428 ++++++++++++++++++
> drivers/fpga/lattice-sysconfig.h | 41 ++
> 6 files changed, 714 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/fpga/lattice,sysconfig.yaml
> create mode 100644 drivers/fpga/lattice-sysconfig-spi.c
> create mode 100644 drivers/fpga/lattice-sysconfig.c
> create mode 100644 drivers/fpga/lattice-sysconfig.h
>
> --
> 2.37.3
>
Friendly ping.