147 lines
4.7 KiB
Plaintext
147 lines
4.7 KiB
Plaintext
|
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"
|