SPI/QSPI Dual flash connection modes:
=====================================

This describes how SPI/QSPI flash memories are connected to a given
controller in a single chip select line.

Current spi_flash framework supports, single flash memory connected
to a given controller with single chip select line, but there are some
hw logics(ex: xilinx zynq qspi) that describes two/dual memories are
connected with a single chip select line from a controller.

"dual_flash" from include/spi.h describes these types of connection mode

Possible connections:
--------------------
SF_SINGLE_FLASH:
       - single spi flash memory connected with single chip select line.

  +------------+             CS         +---------------+
  |            |----------------------->|               |
  | Controller |         I0[3:0]        | Flash memory  |
  | SPI/QSPI   |<======================>| (SPI/QSPI)    |
  |            |           CLK          |               |
  |            |----------------------->|               |
  +------------+                        +---------------+

SF_DUAL_STACKED_FLASH:
       - dual spi/qspi flash memories are connected with a single chipselect
         line and these two memories are operating stacked fasion with shared buses.
       - xilinx zynq qspi controller has implemented this feature [1]

  +------------+        CS             +---------------+
  |            |---------------------->|               |
  |            |              I0[3:0]  | Upper Flash   |
  |            |            +=========>| memory        |
  |            |            |     CLK  | (SPI/QSPI)    |
  |            |            |    +---->|               |
  | Controller |        CS  |    |     +---------------+
  | SPI/QSPI   |------------|----|---->|               |
  |            |    I0[3:0] |    |     | Lower Flash   |
  |            |<===========+====|====>| memory        |
  |            |          CLK    |     | (SPI/QSPI)    |
  |            |-----------------+---->|               |
  +------------+                       +---------------+

       - two memory flash devices should has same hw part attributes (like size,
         vendor..etc)
       - Configurations:
               on LQSPI_CFG register, Enable TWO_MEM[BIT:30] on LQSPI_CFG
               Enable U_PAGE[BIT:28] if U_PAGE flag set - upper memory
               Disable U_PAGE[BIT:28] if U_PAGE flag unset - lower memory
       - Operation:
               accessing memories serially like one after another.
               by default, if U_PAGE is unset lower memory should accessible,
               once user wants to access upper memory need to set U_PAGE.

SPI_FLASH_CONN_DUALPARALLEL:
	- dual spi/qspi flash memories are connected with a single chipselect
	  line and these two memories are operating parallel with separate buses.
	- xilinx zynq qspi controller has implemented this feature [1]

  +-------------+           CS		+---------------+
  |		|---------------------->|		|
  | 		|        I0[3:0]	| Upper Flash	|
  | 		|<=====================>| memory	|
  |		|	   CLK		| (SPI/QSPI)	|
  |		|---------------------->|		|
  | Controller	|	    CS		+---------------+
  | SPI/QSPI	|---------------------->|		|
  | 		|        I0[3:0]	| Lower Flash	|
  | 		|<=====================>| memory	|
  |		|	   CLK		| (SPI/QSPI)	|
  |		|---------------------->|		|
  +-------------+			+---------------+

	- two memory flash devices should has same hw part attributes (like size,
	  vendor..etc)
	- Configurations:
		Need to enable SEP_BUS[BIT:29],TWO_MEM[BIT:30] on LQSPI_CFG register.
	- Operation:
		Even bits, i.e. bit 0, 2, 4 ., of a data word is located in the lower memory
		and odd bits, i.e. bit 1, 3, 5, ., of a data word is located in the upper memory.

Note: Technically there is only one CS line from the controller, but
zynq qspi controller has an internal hw logic to enable additional CS
when controller is configured for dual memories.

[1] http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf

--
Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
05-01-2014.
