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 | |
| 14 | Required properties in the root node: |
| 15 | - compatible value: |
| 16 | compatible = "arm,vexpress,<model>", "arm,vexpress"; |
| 17 | where <model> is the full tile model name (as used in the tile's |
| 18 | Technical Reference Manual), eg.: |
| 19 | - for Coretile Express A5x2 (V2P-CA5s): |
| 20 | compatible = "arm,vexpress,v2p-ca5s", "arm,vexpress"; |
| 21 | - for Coretile Express A9x4 (V2P-CA9): |
| 22 | compatible = "arm,vexpress,v2p-ca9", "arm,vexpress"; |
| 23 | If a tile comes in several variants or can be used in more then one |
| 24 | configuration, the compatible value should be: |
| 25 | compatible = "arm,vexpress,<model>,<variant>", \ |
| 26 | "arm,vexpress,<model>", "arm,vexpress"; |
| 27 | eg: |
| 28 | - Coretile Express A15x2 (V2P-CA15) with Tech Chip 1: |
| 29 | compatible = "arm,vexpress,v2p-ca15,tc1", \ |
| 30 | "arm,vexpress,v2p-ca15", "arm,vexpress"; |
| 31 | - LogicTile Express 13MG (V2F-2XV6) running Cortex-A7 (3 cores) SMM: |
| 32 | compatible = "arm,vexpress,v2f-2xv6,ca7x3", \ |
| 33 | "arm,vexpress,v2f-2xv6", "arm,vexpress"; |
| 34 | |
| 35 | Optional properties in the root node: |
| 36 | - tile model name (use name from the tile's Technical Reference |
| 37 | Manual, eg. "V2P-CA5s") |
| 38 | model = "<model>"; |
| 39 | - tile's HBI number (unique ARM's board model ID, visible on the |
| 40 | PCB's silkscreen) in hexadecimal transcription: |
| 41 | arm,hbi = <0xhbi> |
| 42 | eg: |
| 43 | - for Coretile Express A5x2 (V2P-CA5s) HBI-0191: |
| 44 | arm,hbi = <0x191>; |
| 45 | - Coretile Express A9x4 (V2P-CA9) HBI-0225: |
| 46 | arm,hbi = <0x225>; |
| 47 | |
| 48 | Top-level standard "cpus" node is required. It must contain a node |
| 49 | with device_type = "cpu" property for every available core, eg.: |
| 50 | |
| 51 | cpus { |
| 52 | #address-cells = <1>; |
| 53 | #size-cells = <0>; |
| 54 | |
| 55 | cpu@0 { |
| 56 | device_type = "cpu"; |
| 57 | compatible = "arm,cortex-a5"; |
| 58 | reg = <0>; |
| 59 | }; |
| 60 | }; |
| 61 | |
| 62 | The motherboard description file provides a single "motherboard" node |
| 63 | using 2 address cells corresponding to the Static Memory Bus used |
| 64 | between the motherboard and the tile. The first cell defines the Chip |
| 65 | Select (CS) line number, the second cell address offset within the CS. |
| 66 | All interrupt lines between the motherboard and the tile are active |
| 67 | high and are described using single cell. |
| 68 | |
| 69 | Optional properties of the "motherboard" node: |
| 70 | - motherboard's memory map variant: |
| 71 | arm,v2m-memory-map = "<name>"; |
| 72 | where name is one of: |
| 73 | - "rs1" - for RS1 map (i.a. peripherals on CS3); this map is also |
| 74 | referred to as "ARM Cortex-A Series memory map": |
| 75 | arm,v2m-memory-map = "rs1"; |
| 76 | When this property is missing, the motherboard is using the original |
| 77 | memory map (also known as the "Legacy memory map", primarily used |
| 78 | with the original CoreTile Express A9x4) with peripherals on CS7. |
| 79 | |
| 80 | Motherboard .dtsi files provide a set of labelled peripherals that |
| 81 | can be used to obtain required phandle in the tile's "aliases" node: |
| 82 | - UARTs, note that the numbers correspond to the physical connectors |
| 83 | on the motherboard's back panel: |
| 84 | v2m_serial0, v2m_serial1, v2m_serial2 and v2m_serial3 |
| 85 | - I2C controllers: |
| 86 | v2m_i2c_dvi and v2m_i2c_pcie |
| 87 | - SP804 timers: |
| 88 | v2m_timer01 and v2m_timer23 |
| 89 | |
| 90 | Current Linux implementation requires a "arm,v2m_timer" alias |
| 91 | pointing at one of the motherboard's SP804 timers, if it is to be |
| 92 | used as the system timer. This alias should be defined in the |
| 93 | motherboard files. |
| 94 | |
| 95 | The tile description must define "ranges", "interrupt-map-mask" and |
| 96 | "interrupt-map" properties to translate the motherboard's address |
| 97 | and interrupt space into one used by the tile's processor. |
| 98 | |
| 99 | Abbreviated example: |
| 100 | |
| 101 | /dts-v1/; |
| 102 | |
| 103 | / { |
| 104 | model = "V2P-CA5s"; |
| 105 | arm,hbi = <0x225>; |
| 106 | compatible = "arm,vexpress-v2p-ca5s", "arm,vexpress"; |
| 107 | interrupt-parent = <&gic>; |
| 108 | #address-cells = <1>; |
| 109 | #size-cells = <1>; |
| 110 | |
| 111 | chosen { }; |
| 112 | |
| 113 | aliases { |
| 114 | serial0 = &v2m_serial0; |
| 115 | }; |
| 116 | |
| 117 | cpus { |
| 118 | #address-cells = <1>; |
| 119 | #size-cells = <0>; |
| 120 | |
| 121 | cpu@0 { |
| 122 | device_type = "cpu"; |
| 123 | compatible = "arm,cortex-a5"; |
| 124 | reg = <0>; |
| 125 | }; |
| 126 | }; |
| 127 | |
| 128 | gic: interrupt-controller@2c001000 { |
| 129 | compatible = "arm,cortex-a9-gic"; |
| 130 | #interrupt-cells = <3>; |
| 131 | #address-cells = <0>; |
| 132 | interrupt-controller; |
| 133 | reg = <0x2c001000 0x1000>, |
| 134 | <0x2c000100 0x100>; |
| 135 | }; |
| 136 | |
| 137 | motherboard { |
| 138 | /* CS0 is visible at 0x08000000 */ |
| 139 | ranges = <0 0 0x08000000 0x04000000>; |
| 140 | interrupt-map-mask = <0 0 63>; |
| 141 | /* Active high IRQ 0 is connected to GIC's SPI0 */ |
| 142 | interrupt-map = <0 0 0 &gic 0 0 4>; |
| 143 | }; |
| 144 | }; |
| 145 | |
| 146 | /include/ "vexpress-v2m-rs1.dtsi" |