230 lines
6.9 KiB
Plaintext
230 lines
6.9 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.
|
||
|
|
||
|
|
||
|
Root node
|
||
|
---------
|
||
|
|
||
|
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>;
|
||
|
|
||
|
|
||
|
CPU nodes
|
||
|
---------
|
||
|
|
||
|
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>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
|
||
|
Configuration infrastructure
|
||
|
----------------------------
|
||
|
|
||
|
The platform has an elaborated configuration system, consisting of
|
||
|
microcontrollers residing on the mother- and daughterboards known
|
||
|
as Motherboard/Daughterboard Configuration Controller (MCC and DCC).
|
||
|
The controllers are responsible for the platform initialization
|
||
|
(reset generation, flash programming, FPGA bitfiles loading etc.)
|
||
|
but also control clock generators, voltage regulators, gather
|
||
|
environmental data like temperature, power consumption etc. Even
|
||
|
the video output switch (FPGA) is controlled that way.
|
||
|
|
||
|
The controllers are not mapped into normal memory address space
|
||
|
and must be accessed through bridges - other devices capable
|
||
|
of generating transactions on the configuration bus.
|
||
|
|
||
|
The nodes describing configuration controllers must define
|
||
|
the following properties:
|
||
|
- compatible value:
|
||
|
compatible = "arm,vexpress,config-bus";
|
||
|
- bridge phandle:
|
||
|
arm,vexpress,config-bridge = <phandle>;
|
||
|
and children describing available functions.
|
||
|
|
||
|
|
||
|
Platform topology
|
||
|
-----------------
|
||
|
|
||
|
As Versatile Express can be configured in number of physically
|
||
|
different setups, the device tree should describe platform topology.
|
||
|
Root node and main motherboard node must define the following
|
||
|
property, describing physical location of the children nodes:
|
||
|
- site number:
|
||
|
arm,vexpress,site = <number>;
|
||
|
where 0 means motherboard, 1 or 2 are daugtherboard sites,
|
||
|
0xf means "master" site (site containing main CPU tile)
|
||
|
- when daughterboards are stacked on one site, their position
|
||
|
in the stack be be described with:
|
||
|
arm,vexpress,position = <number>;
|
||
|
- when describing tiles consisting more than one DCC, its number
|
||
|
can be described with:
|
||
|
arm,vexpress,dcc = <number>;
|
||
|
|
||
|
Any of the numbers above defaults to zero if not defined in
|
||
|
the node or any of its parent.
|
||
|
|
||
|
|
||
|
Motherboard
|
||
|
-----------
|
||
|
|
||
|
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
|
||
|
|
||
|
The tile description should define a "smb" node, describing the
|
||
|
Static Memory Bus between the tile and motherboard. It must define
|
||
|
the following properties:
|
||
|
- "simple-bus" compatible value (to ensure creation of the children)
|
||
|
compatible = "simple-bus";
|
||
|
- mapping of the SMB CS/offset addresses into main address space:
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <1>;
|
||
|
ranges = <...>;
|
||
|
- interrupts mapping:
|
||
|
#interrupt-cells = <1>;
|
||
|
interrupt-map-mask = <0 0 63>;
|
||
|
interrupt-map = <...>;
|
||
|
|
||
|
|
||
|
Example of a VE tile description (simplified)
|
||
|
---------------------------------------------
|
||
|
|
||
|
/dts-v1/;
|
||
|
|
||
|
/ {
|
||
|
model = "V2P-CA5s";
|
||
|
arm,hbi = <0x225>;
|
||
|
arm,vexpress,site = <0xf>;
|
||
|
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>;
|
||
|
};
|
||
|
|
||
|
dcc {
|
||
|
compatible = "arm,vexpress,config-bus";
|
||
|
arm,vexpress,config-bridge = <&v2m_sysreg>;
|
||
|
|
||
|
osc@0 {
|
||
|
compatible = "arm,vexpress-osc";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
smb {
|
||
|
compatible = "simple-bus";
|
||
|
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <1>;
|
||
|
/* CS0 is visible at 0x08000000 */
|
||
|
ranges = <0 0 0x08000000 0x04000000>;
|
||
|
|
||
|
#interrupt-cells = <1>;
|
||
|
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"
|
||
|
};
|
||
|
};
|
||
|
|