ARM Versatile Express boards family
-----------------------------------

ARM's Versatile Express platform consists of a motherboard and one
or more daughterboards (tiles). The motherboard provides a set of
peripherals. Processor and RAM "live" on the tiles.

The motherboard and each core tile should be described by a separate
Device Tree source file, with the tile's description including
the motherboard file using a /include/ directive. As the motherboard
can be initialized in one of two different configurations ("memory
maps"), care must be taken to include the correct one.

Required properties in the root node:
- compatible value:
	compatible = "arm,vexpress,<model>", "arm,vexpress";
  where <model> is the full tile model name (as used in the tile's
    Technical Reference Manual), eg.:
    - for Coretile Express A5x2 (V2P-CA5s):
	compatible = "arm,vexpress,v2p-ca5s", "arm,vexpress";
    - for Coretile Express A9x4 (V2P-CA9):
	compatible = "arm,vexpress,v2p-ca9", "arm,vexpress";
  If a tile comes in several variants or can be used in more then one
  configuration, the compatible value should be:
	compatible = "arm,vexpress,<model>,<variant>", \
				"arm,vexpress,<model>", "arm,vexpress";
  eg:
    - Coretile Express A15x2 (V2P-CA15) with Tech Chip 1:
	compatible = "arm,vexpress,v2p-ca15,tc1", \
				"arm,vexpress,v2p-ca15", "arm,vexpress";
    - LogicTile Express 13MG (V2F-2XV6) running Cortex-A7 (3 cores) SMM:
	compatible = "arm,vexpress,v2f-2xv6,ca7x3", \
				"arm,vexpress,v2f-2xv6", "arm,vexpress";

Optional properties in the root node:
- tile model name (use name from the tile's Technical Reference
  Manual, eg. "V2P-CA5s")
	model = "<model>";
- tile's HBI number (unique ARM's board model ID, visible on the
  PCB's silkscreen) in hexadecimal transcription:
	arm,hbi = <0xhbi>
  eg:
  - for Coretile Express A5x2 (V2P-CA5s) HBI-0191:
	arm,hbi = <0x191>;
  - Coretile Express A9x4 (V2P-CA9) HBI-0225:
	arm,hbi = <0x225>;

Top-level standard "cpus" node is required. It must contain a node
with device_type = "cpu" property for every available core, eg.:

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-a5";
			reg = <0>;
		};
	};

The motherboard description file provides a single "motherboard" node
using 2 address cells corresponding to the Static Memory Bus used
between the motherboard and the tile. The first cell defines the Chip
Select (CS) line number, the second cell address offset within the CS.
All interrupt lines between the motherboard and the tile are active
high and are described using single cell.

Optional properties of the "motherboard" node:
- motherboard's memory map variant:
	arm,v2m-memory-map = "<name>";
  where name is one of:
  - "rs1" - for RS1 map (i.a. peripherals on CS3); this map is also
            referred to as "ARM Cortex-A Series memory map":
	arm,v2m-memory-map = "rs1";
  When this property is missing, the motherboard is using the original
  memory map (also known as the "Legacy memory map", primarily used
  with the original CoreTile Express A9x4) with peripherals on CS7.

Motherboard .dtsi files provide a set of labelled peripherals that
can be used to obtain required phandle in the tile's "aliases" node:
- UARTs, note that the numbers correspond to the physical connectors
  on the motherboard's back panel:
	v2m_serial0, v2m_serial1, v2m_serial2 and v2m_serial3
- I2C controllers:
	v2m_i2c_dvi and v2m_i2c_pcie
- SP804 timers:
	v2m_timer01 and v2m_timer23

Current Linux implementation requires a "arm,v2m_timer" alias
pointing at one of the motherboard's SP804 timers, if it is to be
used as the system timer. This alias should be defined in the
motherboard files.

The tile description must define "ranges", "interrupt-map-mask" and
"interrupt-map" properties to translate the motherboard's address
and interrupt space into one used by the tile's processor.

Abbreviated example:

/dts-v1/;

/ {
	model = "V2P-CA5s";
	arm,hbi = <0x225>;
	compatible = "arm,vexpress-v2p-ca5s", "arm,vexpress";
	interrupt-parent = <&gic>;
	#address-cells = <1>;
	#size-cells = <1>;

	chosen { };

	aliases {
		serial0 = &v2m_serial0;
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-a5";
			reg = <0>;
		};
	};

	gic: interrupt-controller@2c001000 {
		compatible = "arm,cortex-a9-gic";
		#interrupt-cells = <3>;
		#address-cells = <0>;
		interrupt-controller;
		reg = <0x2c001000 0x1000>,
		      <0x2c000100 0x100>;
	};

	motherboard {
		/* CS0 is visible at 0x08000000 */
		ranges = <0 0 0x08000000 0x04000000>;
		interrupt-map-mask = <0 0 63>;
		/* Active high IRQ 0 is connected to GIC's SPI0 */
		interrupt-map = <0 0 0 &gic 0 0 4>;
	};
};

/include/ "vexpress-v2m-rs1.dtsi"
