Pawel Moll | 8deed17 | 2012-02-23 13:04:51 +0000 | [diff] [blame] | 1 | ARM Versatile Express boards family |
| 2 | ----------------------------------- |
| 3 | |
| 4 | ARM's Versatile Express platform consists of a motherboard and one |
| 5 | or more daughterboards (tiles). The motherboard provides a set of |
| 6 | peripherals. Processor and RAM "live" on the tiles. |
| 7 | |
| 8 | The motherboard and each core tile should be described by a separate |
| 9 | Device Tree source file, with the tile's description including |
| 10 | the motherboard file using a /include/ directive. As the motherboard |
| 11 | can be initialized in one of two different configurations ("memory |
| 12 | maps"), care must be taken to include the correct one. |
| 13 | |
Pawel Moll | 3ecbf05 | 2012-09-24 14:55:40 +0100 | [diff] [blame^] | 14 | |
| 15 | Root node |
| 16 | --------- |
| 17 | |
Pawel Moll | 8deed17 | 2012-02-23 13:04:51 +0000 | [diff] [blame] | 18 | Required properties in the root node: |
| 19 | - compatible value: |
| 20 | compatible = "arm,vexpress,<model>", "arm,vexpress"; |
| 21 | where <model> is the full tile model name (as used in the tile's |
| 22 | Technical Reference Manual), eg.: |
| 23 | - for Coretile Express A5x2 (V2P-CA5s): |
| 24 | compatible = "arm,vexpress,v2p-ca5s", "arm,vexpress"; |
| 25 | - for Coretile Express A9x4 (V2P-CA9): |
| 26 | compatible = "arm,vexpress,v2p-ca9", "arm,vexpress"; |
| 27 | If a tile comes in several variants or can be used in more then one |
| 28 | configuration, the compatible value should be: |
| 29 | compatible = "arm,vexpress,<model>,<variant>", \ |
| 30 | "arm,vexpress,<model>", "arm,vexpress"; |
| 31 | eg: |
| 32 | - Coretile Express A15x2 (V2P-CA15) with Tech Chip 1: |
| 33 | compatible = "arm,vexpress,v2p-ca15,tc1", \ |
| 34 | "arm,vexpress,v2p-ca15", "arm,vexpress"; |
| 35 | - LogicTile Express 13MG (V2F-2XV6) running Cortex-A7 (3 cores) SMM: |
| 36 | compatible = "arm,vexpress,v2f-2xv6,ca7x3", \ |
| 37 | "arm,vexpress,v2f-2xv6", "arm,vexpress"; |
| 38 | |
| 39 | Optional properties in the root node: |
| 40 | - tile model name (use name from the tile's Technical Reference |
| 41 | Manual, eg. "V2P-CA5s") |
| 42 | model = "<model>"; |
| 43 | - tile's HBI number (unique ARM's board model ID, visible on the |
| 44 | PCB's silkscreen) in hexadecimal transcription: |
| 45 | arm,hbi = <0xhbi> |
| 46 | eg: |
| 47 | - for Coretile Express A5x2 (V2P-CA5s) HBI-0191: |
| 48 | arm,hbi = <0x191>; |
| 49 | - Coretile Express A9x4 (V2P-CA9) HBI-0225: |
| 50 | arm,hbi = <0x225>; |
| 51 | |
Pawel Moll | 3ecbf05 | 2012-09-24 14:55:40 +0100 | [diff] [blame^] | 52 | |
| 53 | CPU nodes |
| 54 | --------- |
| 55 | |
Pawel Moll | 8deed17 | 2012-02-23 13:04:51 +0000 | [diff] [blame] | 56 | Top-level standard "cpus" node is required. It must contain a node |
| 57 | with device_type = "cpu" property for every available core, eg.: |
| 58 | |
| 59 | cpus { |
| 60 | #address-cells = <1>; |
| 61 | #size-cells = <0>; |
| 62 | |
| 63 | cpu@0 { |
| 64 | device_type = "cpu"; |
| 65 | compatible = "arm,cortex-a5"; |
| 66 | reg = <0>; |
| 67 | }; |
| 68 | }; |
| 69 | |
Pawel Moll | 3ecbf05 | 2012-09-24 14:55:40 +0100 | [diff] [blame^] | 70 | |
| 71 | Configuration infrastructure |
| 72 | ---------------------------- |
| 73 | |
| 74 | The platform has an elaborated configuration system, consisting of |
| 75 | microcontrollers residing on the mother- and daughterboards known |
| 76 | as Motherboard/Daughterboard Configuration Controller (MCC and DCC). |
| 77 | The controllers are responsible for the platform initialization |
| 78 | (reset generation, flash programming, FPGA bitfiles loading etc.) |
| 79 | but also control clock generators, voltage regulators, gather |
| 80 | environmental data like temperature, power consumption etc. Even |
| 81 | the video output switch (FPGA) is controlled that way. |
| 82 | |
| 83 | Nodes describing devices controlled by this infrastructure should |
| 84 | point at the bridge device node: |
| 85 | - bridge phandle: |
| 86 | arm,vexpress,config-bridge = <phandle>; |
| 87 | This property can be also defined in a parent node (eg. for a DCC) |
| 88 | and is effective for all children. |
| 89 | |
| 90 | |
| 91 | Platform topology |
| 92 | ----------------- |
| 93 | |
| 94 | As Versatile Express can be configured in number of physically |
| 95 | different setups, the device tree should describe platform topology. |
| 96 | Root node and main motherboard node must define the following |
| 97 | property, describing physical location of the children nodes: |
| 98 | - site number: |
| 99 | arm,vexpress,site = <number>; |
| 100 | where 0 means motherboard, 1 or 2 are daugtherboard sites, |
| 101 | 0xf means "master" site (site containing main CPU tile) |
| 102 | - when daughterboards are stacked on one site, their position |
| 103 | in the stack be be described with: |
| 104 | arm,vexpress,position = <number>; |
| 105 | - when describing tiles consisting more than one DCC, its number |
| 106 | can be described with: |
| 107 | arm,vexpress,dcc = <number>; |
| 108 | |
| 109 | Any of the numbers above defaults to zero if not defined in |
| 110 | the node or any of its parent. |
| 111 | |
| 112 | |
| 113 | Motherboard |
| 114 | ----------- |
| 115 | |
Pawel Moll | 8deed17 | 2012-02-23 13:04:51 +0000 | [diff] [blame] | 116 | The motherboard description file provides a single "motherboard" node |
| 117 | using 2 address cells corresponding to the Static Memory Bus used |
| 118 | between the motherboard and the tile. The first cell defines the Chip |
| 119 | Select (CS) line number, the second cell address offset within the CS. |
| 120 | All interrupt lines between the motherboard and the tile are active |
| 121 | high and are described using single cell. |
| 122 | |
| 123 | Optional properties of the "motherboard" node: |
| 124 | - motherboard's memory map variant: |
| 125 | arm,v2m-memory-map = "<name>"; |
| 126 | where name is one of: |
| 127 | - "rs1" - for RS1 map (i.a. peripherals on CS3); this map is also |
| 128 | referred to as "ARM Cortex-A Series memory map": |
| 129 | arm,v2m-memory-map = "rs1"; |
| 130 | When this property is missing, the motherboard is using the original |
| 131 | memory map (also known as the "Legacy memory map", primarily used |
| 132 | with the original CoreTile Express A9x4) with peripherals on CS7. |
| 133 | |
| 134 | Motherboard .dtsi files provide a set of labelled peripherals that |
| 135 | can be used to obtain required phandle in the tile's "aliases" node: |
| 136 | - UARTs, note that the numbers correspond to the physical connectors |
| 137 | on the motherboard's back panel: |
| 138 | v2m_serial0, v2m_serial1, v2m_serial2 and v2m_serial3 |
| 139 | - I2C controllers: |
| 140 | v2m_i2c_dvi and v2m_i2c_pcie |
| 141 | - SP804 timers: |
| 142 | v2m_timer01 and v2m_timer23 |
| 143 | |
| 144 | Current Linux implementation requires a "arm,v2m_timer" alias |
| 145 | pointing at one of the motherboard's SP804 timers, if it is to be |
| 146 | used as the system timer. This alias should be defined in the |
| 147 | motherboard files. |
| 148 | |
| 149 | The tile description must define "ranges", "interrupt-map-mask" and |
| 150 | "interrupt-map" properties to translate the motherboard's address |
| 151 | and interrupt space into one used by the tile's processor. |
| 152 | |
Pawel Moll | 3ecbf05 | 2012-09-24 14:55:40 +0100 | [diff] [blame^] | 153 | |
| 154 | Example of a VE tile description (simplified) |
| 155 | --------------------------------------------- |
Pawel Moll | 8deed17 | 2012-02-23 13:04:51 +0000 | [diff] [blame] | 156 | |
| 157 | /dts-v1/; |
| 158 | |
| 159 | / { |
| 160 | model = "V2P-CA5s"; |
| 161 | arm,hbi = <0x225>; |
Pawel Moll | 3ecbf05 | 2012-09-24 14:55:40 +0100 | [diff] [blame^] | 162 | arm,vexpress,site = <0xf>; |
Pawel Moll | 8deed17 | 2012-02-23 13:04:51 +0000 | [diff] [blame] | 163 | compatible = "arm,vexpress-v2p-ca5s", "arm,vexpress"; |
| 164 | interrupt-parent = <&gic>; |
| 165 | #address-cells = <1>; |
| 166 | #size-cells = <1>; |
| 167 | |
| 168 | chosen { }; |
| 169 | |
| 170 | aliases { |
| 171 | serial0 = &v2m_serial0; |
| 172 | }; |
| 173 | |
| 174 | cpus { |
| 175 | #address-cells = <1>; |
| 176 | #size-cells = <0>; |
| 177 | |
| 178 | cpu@0 { |
| 179 | device_type = "cpu"; |
| 180 | compatible = "arm,cortex-a5"; |
| 181 | reg = <0>; |
| 182 | }; |
| 183 | }; |
| 184 | |
| 185 | gic: interrupt-controller@2c001000 { |
| 186 | compatible = "arm,cortex-a9-gic"; |
| 187 | #interrupt-cells = <3>; |
| 188 | #address-cells = <0>; |
| 189 | interrupt-controller; |
| 190 | reg = <0x2c001000 0x1000>, |
| 191 | <0x2c000100 0x100>; |
| 192 | }; |
| 193 | |
Pawel Moll | 3ecbf05 | 2012-09-24 14:55:40 +0100 | [diff] [blame^] | 194 | dcc { |
| 195 | compatible = "simple-bus"; |
| 196 | arm,vexpress,config-bridge = <&v2m_sysreg>; |
| 197 | |
| 198 | osc@0 { |
| 199 | compatible = "arm,vexpress-osc"; |
| 200 | }; |
| 201 | }; |
| 202 | |
Pawel Moll | 8deed17 | 2012-02-23 13:04:51 +0000 | [diff] [blame] | 203 | motherboard { |
| 204 | /* CS0 is visible at 0x08000000 */ |
| 205 | ranges = <0 0 0x08000000 0x04000000>; |
| 206 | interrupt-map-mask = <0 0 63>; |
| 207 | /* Active high IRQ 0 is connected to GIC's SPI0 */ |
| 208 | interrupt-map = <0 0 0 &gic 0 0 4>; |
| 209 | }; |
| 210 | }; |
| 211 | |
| 212 | /include/ "vexpress-v2m-rs1.dtsi" |