| 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" |
| }; |
| }; |
| |