RFC: FT232H based FPGA configuration adapter drivers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have to rework drivers for custom FT232H based FPGA configuration
adapters to make them suitable for including in mainline kernel. These
adapters should be usable via low-level drivers for FPGA Manager
framework. Two required low-level FPGA Manager drivers (for PS-SPI and
CvP configurations) are already in mainline. The missing parts are the
MPSSE SPI master driver (for attaching altera-ps-spi SPI devices) and
the FTDI FIFO FPP interface driver for FPGA Manager. I'm CCing the
relevant subsystem mailing lists and would like to get feedback to the
draft below before rewriting the missing driver parts.

A few words about our FPGA and FPGA configuration adapter hardware. We
have FPGA PCIe boards with two different FT232H based configuration
adapters. The first adapter type utilizes FT232H chip in MPSSE mode to
connect ADBUS SPI/GPIO pins to Stratix-V PS-SPI interface. Another
adapter type connects FT232H ADBUS (in FT245 FIFO mode) and two ACBUS
GPIOs to a CPLD, the CPLD is connected to the Arria-10 FPP interface.
Both FPGA boards are connected to the host via PCIe and USB (FT232H).

Below simplified diagram shows the drivers relationship used in the
first patch series [1] submitted to the FPGA and USB lists before
(this series didn't yet include the MPSSE SPI master driver).

   +-------------+
   |             |
   |  STRATIX V  |PS-SPI         FT245 FIFO & GPIO
   |             +-----+    +-------------------+
   |  on Board 1 |     |    |                   |
   |             |                         +----+---+
   |  PCIe       |   ADBUS&ACBUS           |  CPLD  |
   +---+---------+ Connection Options      +----+---+
       ^          (MPSSE or FIFO&GPIO)          |
       |                  |              +------+-------+
  altera-cvp  +-----------+----------+   |     FPP      |
              |                      |   |              |
              | FT232H 0x0403:0x6014 |   |   ARRIA 10   |
              |                      |   |              |
              +----------+-----------+   |  on Board 2  |
                         |               |              |
      MFD drv +----------+-----------+   |        PCIe  |
      creates | ftdi-ft232h MFD drv  |   +----------+---+
     platform |  USB bulk/ctrl xfer  |              ^
      devices +---+------+-------+---+              |
       below      |      |       |                  |
            +-----+      |       +-------------+    +--------+
            |            |                     |             |
     +------+-------+ +--+-----------+ +-------+---------+   |
     |ftdi-mpsse-spi| |ftdi-cbus-gpio| |ftdi-fifo-fpp-mgr|   |
     | platform dev | | platform dev | |  platform dev   |   |
     +-------+------+ +------+-------+ +---------+-------+   |
  platform   ^               ^                   ^           |
   drivers:  +               +                   |           |
     MPSSE SPI master  ACBUS GPIO Ctrl     +-----+        +--+
             ^               ^             |              |
             |               |             +              +
       altera-ps-spi         \uses   ftdi-fifo-fpp     altera-cvp
        FPGA Manager          ------+ FPGA Manager    FPGA Manager
             ^                            ^               ^
             |                            |               |
             +-------------------------+  +  +------------+
                                       fpga-mgr

The first FTDI FPP adapter driver patch series has some fundamental
issues as discussed on the lists and I plan to rework the FT232H
specific parts to prepare a new patch series. We have already
reserved custom PIDs for both adapter types and can use them in
adapter EEPROMs to ensure binding to the vendor specific drivers
for SPI and FIFO FPP types.

Instead of MFD part as in previous version I intend to add an USB misc
driver for our FPGA configuration adapters under drivers/usb/misc.
When probing for VID/PID assigned to FIFO-FPP adapter type, this
driver will register CBUS GPIO controller, GPIO lookup tables for
FIFO FPP device and will create a platform device for attaching the
low-level FPGA manager driver for FIFO FPP interface. The attached
FPGA manager driver will be similar to the ftdi-fifo-fpp driver and
will reside in drivers/fpga. When probing for VID/PID assigned to
MPSSE SPI adapter type, the USB misc driver will register MPSSE GPIO
controller, GPIO lookup tables for altera-ps-spi control/status GPIOs
and will create platform device for attaching MPSSE SPI master
controller driver. The SPI master controller platform driver will
register MPSSE SPI bus with SPI slave device from spi_board_info
struct in its platform data (in our case altera-ps-spi SPI slave
device for attaching altera-ps-spi driver). The intended location
of this custom SPI master controller driver is drivers/spi.

Below simplified diagram shows the intended device and drivers
relationship for reworking the adapter drivers.

   +-------------+
   |             |
   |  STRATIX V  |PS-SPI         FT245 FIFO & GPIO
   |             +-----+    +-------------------+
   |  on Board 1 |     +    +                   |
   |             |                         +----+---+
   |  PCIe       |   ADBUS&ACBUS           |  CPLD  |
   +---+---------+ Connection Options      +----+---+
       ^          (MPSSE or FIFO&GPIO)          |
       +                  +              +------+-------+
  altera-cvp  +-----------+----------+   |     FPP      |
              |        FT232H        |   |              |
              |     0x0403:0x7148    |   |   ARRIA 10   |
              |     0x0403:0x7149    |   |              |
              +----------+-----------+   |  on Board 2  |
                         |               |              |
             +-----------+------------+  |        PCIe  |
    USB misc | fpga-cfg-intf USB misc |  +----------+---+
  drv creates|     bulk/ctrl xfer     |             ^
    platform |ACBUS GPIO Ctrl (0x7148)|             |
     devices |MPSSE GPIO Ctrl (0x7149)|             |
      below  +-------+-------+--------+             |
                     |       |                      |
        for     +----+       +------+    for        |
     PID 0x7149 |                   | PID 0x7148    |
      +---------+--------+  +-------+---------+     |
      | ftdi-mpsse-spi + |  |                 |     |
      | altera-ps-spi in |  |ftdi-fifo-fpp-mgr|     |
      |  spi_board_info  |  | platform device |     |
      +---------+--------+  +--------+--------+     |
                ^                    ^              |
      drivers:  |                    |              |
                +                    |              |
         MPSSE SPI master            |              |
                ^                    |              |
                |                    +              +
          altera-ps-spi        ftdi-fifo-fpp    altera-cvp
           FPGA Manager         FPGA Manager   FPGA Manager
                ^                    ^              ^
                |                    |              |
                +---------------+    +    +---------+
                                  fpga-mgr

It would be worthwhile to concentrate the common USB transfer related
functions (bulk, control and FTDI mode setting code used in previous
ftdi-ft232h driver part) in a single file and reuse them in MPSSE SPI
master and FIFO FPP drivers to avoid code duplication. I plan to add
these functions in USB misc adapter driver and it could pass them to
platform drivers as callbacks in an ops struct via platform data.

Before reworking the adapter drivers I'd like to get comments to this
draft, especially when there are design issues that will cause driver
rejection in the appropriate subsystem.

Thanks!

Anatolij

[1] https://lkml.org/lkml/2017/7/6/710
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux