mbox series

[v3,0/3] Add support for ARRI FPGA configuration

Message ID 20181127175438.16116-1-agust@denx.de (mailing list archive)
Headers show
Series Add support for ARRI FPGA configuration | expand

Message

Anatolij Gustschin Nov. 27, 2018, 5:54 p.m. UTC
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 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                      |    9 +
 drivers/usb/misc/Makefile                     |    1 +
 drivers/usb/misc/ft232h-intf.c                | 1467 +++++++++++++++++
 include/linux/usb/ft232h-intf.h               |  206 +++
 12 files changed, 2959 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