The U-Boot Driver Model Project
===============================
I/O system analysis
===================
Marek Vasut <marek.vasut@gmail.com>
2012-02-21

I) Overview
-----------

The current FPGA implementation is handled by command "fpga". This command in
turn calls the following functions:

fpga_info()
fpga_load()
fpga_dump()

These functions are implemented by what appears to be FPGA multiplexer, located
in drivers/fpga/fpga.c . This code determines which device to operate with
depending on the device ID.

The fpga_info() function is multiplexer of the functions providing information
about the particular FPGA device. These functions are implemented in the drivers
for the particular FPGA device:

xilinx_info()
altera_info()
lattice_info()

Similar approach is used for fpga_load(), which multiplexes "xilinx_load()",
"altera_load()" and "lattice_load()" and is used to load firmware into the FPGA
device.

The fpga_dump() function, which prints the contents of the FPGA device, is no
different either, by multiplexing "xilinx_dump()", "altera_dump()" and
"lattice_dump()" functions.

Finally, each new FPGA device is registered by calling "fpga_add()" function.
This function takes two arguments, the second one being particularly important,
because it's basically what will become platform_data. Currently, it's data that
are passed to the driver from the board/platform code.

II) Approach
------------

The path to conversion of the FPGA subsystem will be very straightforward, since
the FPGA subsystem is already quite dynamic. Multiple things will need to be
modified though.

First is the registration of the new FPGA device towards the FPGA core. This
will be achieved by calling:

  fpga_device_register(struct instance *i, const struct fpga_ops *ops);

The particularly interesting part is the struct fpga_ops, which contains
operations supported by the FPGA device. These are basically the already used
calls in the current implementation:

struct fpga_ops {
  int info(struct instance *i);
  int load(struct instance *i, const char *buf, size_t size);
  int dump(struct instance *i, const char *buf, size_t size);
}

The other piece that'll have to be modified is how the devices are tracked.
It'll be necessary to introduce a linked list of devices within the FPGA core
instead of tracking them by ID number.

Next, the "Xilinx_desc", "Lattice_desc" and "Altera_desc" structures will have
to be moved to driver's private_data. Finally, structures passed from the board
and/or platform files, like "Xilinx_Virtex2_Slave_SelectMap_fns" would be passed
via platform_data to the driver.

III) Analysis of in-tree drivers
--------------------------------

  1) Altera driver
  ----------------
  The driver is realized using the following files:

    drivers/fpga/altera.c
    drivers/fpga/ACEX1K.c
    drivers/fpga/cyclon2.c
    drivers/fpga/stratixII.c

  All of the sub-drivers implement basically the same info-load-dump interface
  and there's no expected problem during the conversion. The driver itself will
  be realised by altera.c and all the sub-drivers will be linked in. The
  distinction will be done by passing different platform data.

  2) Lattice driver
  -----------------
  The driver is realized using the following files:

    drivers/fpga/lattice.c
    drivers/fpga/ivm_core.c

  This driver also implements the standard interface, but to realise the
  operations with the FPGA device, uses functions from "ivm_core.c" file. This
  file implements the main communications logic and has to be linked in together
  with "lattice.c". No problem converting is expected here.

  3) Xilinx driver
  ----------------
  The driver is realized using the following files:

    drivers/fpga/xilinx.c
    drivers/fpga/spartan2.c
    drivers/fpga/spartan3.c
    drivers/fpga/virtex2.c

  This set of sub-drivers is special by defining a big set of macros in
  "include/spartan3.h" and similar files. These macros would need to be either
  rewritten or replaced. Otherwise, there are no problems expected during the
  conversion process.
