[PATCH v4 0/3] Add support for ARRI FPGA configuration

Anatolij Gustschin
2019-02-21T20:25:14Z

This series adds drivers and FPGA manager support required
for FT232H based ARRI FPGA configuration adapters.

Patch 1/3 adds FT232H interface driver (for ARRI USB PIDs)
implementing commonly used FTDI USB transfer operations and
ACBUS/MPSSE GPIO controllers. Depending on USB PIDs it creates
platform devices for MPSSE SPI bus with attached SPI slaves
or platform devices for ARRI FPP FPGA manager.

Patch 2/3 adds MPSSE SPI controller driver which registers
an FTDI USB-SPI bus with attached SPI slaves from description
in platform data, so existing SPI protocol drivers can be
used for these slave devices (in our case altera-ps-spi).
Via interface driver in patch 1/3 it is easily possible to add
support for other slave devices using custom USB PIDs (e.g.
spi-nor flash W25Q32 with m25p80 driver has beed used for
testing MPSSE SPI controller driver).

Patch 3/3 adds FPGA manager driver for ARRI FPP adapters for
FPGA configuration via Altera fast passive parallel interface.

Changes since v3:
Patch 1/3
- rebase on v5.0-rc7
- add depends on GPIOLIB to Kconfig to fix build errors
- fix build errors due to removed devm_gpiochip_remove()
(replace by gpiochip_remove())

Patch 2/3
- rebase on v5.0-rc7

Patch 3/3
- update Date/Version in sysfs-driver-ftdi-fifo-fpp

Changes since v2:
Patch 1/3
- use unsigned type for baudrate and clk divider calculation
(don't mix signed/unsigned types)
- switch to unsigned int for 'encoded_divisor'
- use DIV_ROUND_CLOSEST() in ftdi_to_clkbits()
- update error messages in ftdi_convert_baudrate()
- update return code check of ftdi_to_clkbits()
- fix boolconv coccinelle warning
- add and use macro for MPSSE GPIOs number
- update struct mpsse_spi_platform_data to drop pin description
fields and add mpsse_spi_dev_data struct instead. This allows
easier pin description and init for multiple SPI devices with
multiple control pins. Pass pin description via platform_data
of spi_bus_info for esier IO pin init code in MPSSE driver.
Update spi_board_info table accordingly
- keep Makefile entry sorted

Patch 2/3
- keep Makefile entry sorted
- make the entire comment block a C++ one
- don't use magic number for the size of the lookup table
- use sizeof() instead of magic number for the buffer size
- rework gpio chip select function to use it as .set_cs()
- convert to use transfer_one instead of transfer_one_message
- update dev_*() to use MPSSE platform device prefix
- s/spi_master/spi_controller
- use u16 for chip_select vars and update dev_dbg format
- use unsigned type for index vars
- reduce arguments number for ftdi_spi_tx()/ftdi_spi_rx()
- fix ftdi_spi_tx() to send all buffer data correctly even if
the USB driver signals transfer of less data than requested
- update ftdi_spi_init_io() to differentiate between platform
data for devices using MPSSE I/O pins and other SPI devices
(e.g. using flash_platform_data, mmc_spi_platform_data, etc.).
This makes the driver more generic and allows using multiple
SPI slaves on the MPSSE bus
- reduce !xfer->len checks

Patch 3/3
fix 'specified bound 8 equals destination size' gcc 8 warning

Changes since v1:
Patch 1/3
- add myself as a maintainer for these drivers
- update copyright line to include 2018
- include required linux headers
- fix gcc 7.3.0 build warnings -Wunused-const-variable=
- make ftdi functions and spi_board_info struct static
- use KBUILD_MODNAME in drivers struct
- use dev_err() for error messages instead of dev_info()
- drop not needed output about number of used MPSSE pins
since it is constant (not configurable)
- remove ftdi function prototypes from header ft232h-intf.h
as these are not exported anymore
- update comments (don't use kernel-doc format as we do not
export symbols anymore and functions are "static")

Patch 2/3
- fix build breakage when building with ARCH=i386 allmodconfig
- add checks for ops->lock/ops->unlock presence in pdata
- update copyright line to include 2018
- remove printing numbers in parentheses (%d)

Patch 3/3
- update copyright line to include 2018
- add sysfs ABI documentation

Changes since initial version (MFD based):
- don't use MFD framework
- don't use original FT232H USB PID (it is too generic and collides
with existing ftdi_sio driver)
- don't add separate CBUS GPIO driver based on FT232H MFD device
- redesign/rework the drivers as described under [4]
- add basic FT232H interface driver under drivers/usb/misc/
- use custom reserved USB PIDs in the USB driver for adapter devices
- add notes about borrowed protocol code from libftdi to commit log
and header file
- add MPSSE SPI controller driver supporting USB-SPI bus with
dynamically added SPI slaves from description in platform data
(the initial attempt didn't include USB SPI bus support for PS-
SPI FPGA configuration via USB)
- rework FPP fpga manager driver based on new FT232H interface
driver and extend it according to CPLD changes for additional
support of new hardware revision B.

Anatolij Gustschin (3):
usb: misc: add driver for FT232H based FPGA configuration devices
spi: add FTDI MPSSE SPI controller driver
fpga: Add fpga manager driver for ARRI Altera FPP

.../ABI/testing/sysfs-driver-ftdi-fifo-fpp | 7 +
MAINTAINERS | 8 +
drivers/fpga/Kconfig | 7 +
drivers/fpga/Makefile | 1 +
drivers/fpga/ftdi-fifo-fpp.c | 594 +++++++
drivers/spi/Kconfig | 7 +
drivers/spi/Makefile | 1 +
drivers/spi/spi-ftdi-mpsse.c | 651 ++++++++
drivers/usb/misc/Kconfig | 10 +
drivers/usb/misc/Makefile | 1 +
drivers/usb/misc/ft232h-intf.c | 1467 +++++++++++++++++
include/linux/usb/ft232h-intf.h | 206 +++
12 files changed, 2960 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-driver-ftdi-fifo-fpp
create mode 100644 drivers/fpga/ftdi-fifo-fpp.c
create mode 100644 drivers/spi/spi-ftdi-mpsse.c
create mode 100644 drivers/usb/misc/ft232h-intf.c
create mode 100644 include/linux/usb/ft232h-intf.h

--
2.17.1