FSI bus & engine generic device tree bindings
=============================================

The FSI bus is probe-able, so the OS is able to enumerate FSI slaves, and
engines within those slaves. However, we have a facility to match devicetree
nodes to probed engines. This allows for fsi engines to expose non-probeable
busses, which are then exposed by the device tree. For example, an FSI engine
that is an I2C master - the I2C bus can be described by the device tree under
the engine's device tree node.

FSI masters may require their own DT nodes (to describe the master HW itself);
that requirement is defined by the master's implementation, and is described by
the fsi-master-* binding specifications.

Under the masters' nodes, we can describe the bus topology using nodes to
represent the FSI slaves and their slave engines. As a basic outline:

  fsi-master {
      /* top-level of FSI bus topology, bound to an FSI master driver and
       * exposes an FSI bus */

      fsi-slave@<link,id> {
          /* this node defines the FSI slave device, and is handled
           * entirely with FSI core code */

          fsi-slave-engine@<addr> {
              /* this node defines the engine endpoint & address range, which
               * is bound to the relevant fsi device driver */
               ...
          };

          fsi-slave-engine@<addr> {
              ...
          };

      };
  };

Note that since the bus is probe-able, some (or all) of the topology may
not be described; this binding only provides an optional facility for
adding subordinate device tree nodes as children of FSI engines.

FSI masters
-----------

FSI master nodes declare themselves as such with the "fsi-master" compatible
value. It's likely that an implementation-specific compatible value will
be needed as well, for example:

    compatible = "fsi-master-gpio", "fsi-master";

Since the master nodes describe the top-level of the FSI topology, they also
need to declare the FSI-standard addressing scheme. This requires two cells for
addresses (link index and slave ID), and no size:

    #address-cells = <2>;
    #size-cells = <0>;

An optional boolean property can be added to indicate that a particular master
should not scan for connected devices at initialization time.  This is
necessary in cases where a scan could cause arbitration issues with other
masters that may be present on the bus.

    no-scan-on-init;

FSI slaves
----------

Slaves are identified by a (link-index, slave-id) pair, so require two cells
for an address identifier. Since these are not a range, no size cells are
required. For an example, a slave on link 1, with ID 2, could be represented
as:

    cfam@1,2 {
        reg = <1 2>;
	[...];
    }

Each slave provides an address-space, under which the engines are accessible.
That address space has a maximum of 23 bits, so we use one cell to represent
addresses and sizes in the slave address space:

    #address-cells = <1>;
    #size-cells = <1>;


FSI engines (devices)
---------------------

Engines are identified by their address under the slaves' address spaces. We
use a single cell for address and size. Engine nodes represent the endpoint
FSI device, and are passed to those FSI device drivers' ->probe() functions.

For example, for a slave using a single 0x400-byte page starting at address
0xc00:

    engine@c00 {
        reg = <0xc00 0x400>;
    };


Full example
------------

Here's an example that illustrates:
 - an FSI master
   - connected to an FSI slave
     - that contains an engine that is an I2C master
       - connected to an I2C EEPROM

The FSI master may be connected to additional slaves, and slaves may have
additional engines, but they don't necessarily need to be describe in the
device tree if no extra platform information is required.

    /* The GPIO-based FSI master node, describing the top level of the
     * FSI bus
     */
    gpio-fsi {
        compatible = "fsi-master-gpio", "fsi-master";
        #address-cells = <2>;
        #size-cells = <0>;

        /* A FSI slave (aka. CFAM) at link 0, ID 0. */
        cfam@0,0 {
            reg = <0 0>;
            #address-cells = <1>;
            #size-cells = <1>;

            /* FSI engine at 0xc00, using a single page. In this example,
             * it's an I2C master controller, so subnodes describe the
             * I2C bus.
             */
            i2c-controller@c00 {
                reg = <0xc00 0x400>;

                /* Engine-specific data. In this case, we're describing an
                 * I2C bus, so we're conforming to the generic I2C binding
                 */
                compatible = "some-vendor,fsi-i2c-controller";
                #address-cells = <1>;
                #size-cells = <1>;

                /* I2C endpoint device: an Atmel EEPROM */
                eeprom@50 {
                    compatible = "atmel,24c256";
                    reg = <0x50>;
                    pagesize = <64>;
                };
            };
        };
    };
