diff options
Diffstat (limited to 'Documentation/devicetree')
60 files changed, 5554 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/ata/fsl-sata.txt b/Documentation/devicetree/bindings/ata/fsl-sata.txt new file mode 100644 index 000000000000..b46bcf46c3d8 --- /dev/null +++ b/Documentation/devicetree/bindings/ata/fsl-sata.txt | |||
@@ -0,0 +1,29 @@ | |||
1 | * Freescale 8xxx/3.0 Gb/s SATA nodes | ||
2 | |||
3 | SATA nodes are defined to describe on-chip Serial ATA controllers. | ||
4 | Each SATA port should have its own node. | ||
5 | |||
6 | Required properties: | ||
7 | - compatible : compatible list, contains 2 entries, first is | ||
8 | "fsl,CHIP-sata", where CHIP is the processor | ||
9 | (mpc8315, mpc8379, etc.) and the second is | ||
10 | "fsl,pq-sata" | ||
11 | - interrupts : <interrupt mapping for SATA IRQ> | ||
12 | - cell-index : controller index. | ||
13 | 1 for controller @ 0x18000 | ||
14 | 2 for controller @ 0x19000 | ||
15 | 3 for controller @ 0x1a000 | ||
16 | 4 for controller @ 0x1b000 | ||
17 | |||
18 | Optional properties: | ||
19 | - interrupt-parent : optional, if needed for interrupt mapping | ||
20 | - reg : <registers mapping> | ||
21 | |||
22 | Example: | ||
23 | sata@18000 { | ||
24 | compatible = "fsl,mpc8379-sata", "fsl,pq-sata"; | ||
25 | reg = <0x18000 0x1000>; | ||
26 | cell-index = <1>; | ||
27 | interrupts = <2c 8>; | ||
28 | interrupt-parent = < &ipic >; | ||
29 | }; | ||
diff --git a/Documentation/devicetree/bindings/eeprom.txt b/Documentation/devicetree/bindings/eeprom.txt new file mode 100644 index 000000000000..4342c10de1bf --- /dev/null +++ b/Documentation/devicetree/bindings/eeprom.txt | |||
@@ -0,0 +1,28 @@ | |||
1 | EEPROMs (I2C) | ||
2 | |||
3 | Required properties: | ||
4 | |||
5 | - compatible : should be "<manufacturer>,<type>" | ||
6 | If there is no specific driver for <manufacturer>, a generic | ||
7 | driver based on <type> is selected. Possible types are: | ||
8 | 24c00, 24c01, 24c02, 24c04, 24c08, 24c16, 24c32, 24c64, | ||
9 | 24c128, 24c256, 24c512, 24c1024, spd | ||
10 | |||
11 | - reg : the I2C address of the EEPROM | ||
12 | |||
13 | Optional properties: | ||
14 | |||
15 | - pagesize : the length of the pagesize for writing. Please consult the | ||
16 | manual of your device, that value varies a lot. A wrong value | ||
17 | may result in data loss! If not specified, a safety value of | ||
18 | '1' is used which will be very slow. | ||
19 | |||
20 | - read-only: this parameterless property disables writes to the eeprom | ||
21 | |||
22 | Example: | ||
23 | |||
24 | eeprom@52 { | ||
25 | compatible = "atmel,24c32"; | ||
26 | reg = <0x52>; | ||
27 | pagesize = <32>; | ||
28 | }; | ||
diff --git a/Documentation/devicetree/bindings/gpio/8xxx_gpio.txt b/Documentation/devicetree/bindings/gpio/8xxx_gpio.txt new file mode 100644 index 000000000000..b0019eb5330e --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/8xxx_gpio.txt | |||
@@ -0,0 +1,60 @@ | |||
1 | GPIO controllers on MPC8xxx SoCs | ||
2 | |||
3 | This is for the non-QE/CPM/GUTs GPIO controllers as found on | ||
4 | 8349, 8572, 8610 and compatible. | ||
5 | |||
6 | Every GPIO controller node must have #gpio-cells property defined, | ||
7 | this information will be used to translate gpio-specifiers. | ||
8 | |||
9 | Required properties: | ||
10 | - compatible : "fsl,<CHIP>-gpio" followed by "fsl,mpc8349-gpio" for | ||
11 | 83xx, "fsl,mpc8572-gpio" for 85xx and "fsl,mpc8610-gpio" for 86xx. | ||
12 | - #gpio-cells : Should be two. The first cell is the pin number and the | ||
13 | second cell is used to specify optional parameters (currently unused). | ||
14 | - interrupts : Interrupt mapping for GPIO IRQ. | ||
15 | - interrupt-parent : Phandle for the interrupt controller that | ||
16 | services interrupts for this device. | ||
17 | - gpio-controller : Marks the port as GPIO controller. | ||
18 | |||
19 | Example of gpio-controller nodes for a MPC8347 SoC: | ||
20 | |||
21 | gpio1: gpio-controller@c00 { | ||
22 | #gpio-cells = <2>; | ||
23 | compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; | ||
24 | reg = <0xc00 0x100>; | ||
25 | interrupts = <74 0x8>; | ||
26 | interrupt-parent = <&ipic>; | ||
27 | gpio-controller; | ||
28 | }; | ||
29 | |||
30 | gpio2: gpio-controller@d00 { | ||
31 | #gpio-cells = <2>; | ||
32 | compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; | ||
33 | reg = <0xd00 0x100>; | ||
34 | interrupts = <75 0x8>; | ||
35 | interrupt-parent = <&ipic>; | ||
36 | gpio-controller; | ||
37 | }; | ||
38 | |||
39 | See booting-without-of.txt for details of how to specify GPIO | ||
40 | information for devices. | ||
41 | |||
42 | To use GPIO pins as interrupt sources for peripherals, specify the | ||
43 | GPIO controller as the interrupt parent and define GPIO number + | ||
44 | trigger mode using the interrupts property, which is defined like | ||
45 | this: | ||
46 | |||
47 | interrupts = <number trigger>, where: | ||
48 | - number: GPIO pin (0..31) | ||
49 | - trigger: trigger mode: | ||
50 | 2 = trigger on falling edge | ||
51 | 3 = trigger on both edges | ||
52 | |||
53 | Example of device using this is: | ||
54 | |||
55 | funkyfpga@0 { | ||
56 | compatible = "funky-fpga"; | ||
57 | ... | ||
58 | interrupts = <4 3>; | ||
59 | interrupt-parent = <&gpio1>; | ||
60 | }; | ||
diff --git a/Documentation/devicetree/bindings/gpio/gpio.txt b/Documentation/devicetree/bindings/gpio/gpio.txt new file mode 100644 index 000000000000..edaa84d288a1 --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/gpio.txt | |||
@@ -0,0 +1,50 @@ | |||
1 | Specifying GPIO information for devices | ||
2 | ============================================ | ||
3 | |||
4 | 1) gpios property | ||
5 | ----------------- | ||
6 | |||
7 | Nodes that makes use of GPIOs should define them using `gpios' property, | ||
8 | format of which is: <&gpio-controller1-phandle gpio1-specifier | ||
9 | &gpio-controller2-phandle gpio2-specifier | ||
10 | 0 /* holes are permitted, means no GPIO 3 */ | ||
11 | &gpio-controller4-phandle gpio4-specifier | ||
12 | ...>; | ||
13 | |||
14 | Note that gpio-specifier length is controller dependent. | ||
15 | |||
16 | gpio-specifier may encode: bank, pin position inside the bank, | ||
17 | whether pin is open-drain and whether pin is logically inverted. | ||
18 | |||
19 | Example of the node using GPIOs: | ||
20 | |||
21 | node { | ||
22 | gpios = <&qe_pio_e 18 0>; | ||
23 | }; | ||
24 | |||
25 | In this example gpio-specifier is "18 0" and encodes GPIO pin number, | ||
26 | and empty GPIO flags as accepted by the "qe_pio_e" gpio-controller. | ||
27 | |||
28 | 2) gpio-controller nodes | ||
29 | ------------------------ | ||
30 | |||
31 | Every GPIO controller node must have #gpio-cells property defined, | ||
32 | this information will be used to translate gpio-specifiers. | ||
33 | |||
34 | Example of two SOC GPIO banks defined as gpio-controller nodes: | ||
35 | |||
36 | qe_pio_a: gpio-controller@1400 { | ||
37 | #gpio-cells = <2>; | ||
38 | compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank"; | ||
39 | reg = <0x1400 0x18>; | ||
40 | gpio-controller; | ||
41 | }; | ||
42 | |||
43 | qe_pio_e: gpio-controller@1460 { | ||
44 | #gpio-cells = <2>; | ||
45 | compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank"; | ||
46 | reg = <0x1460 0x18>; | ||
47 | gpio-controller; | ||
48 | }; | ||
49 | |||
50 | |||
diff --git a/Documentation/devicetree/bindings/gpio/led.txt b/Documentation/devicetree/bindings/gpio/led.txt new file mode 100644 index 000000000000..064db928c3c1 --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/led.txt | |||
@@ -0,0 +1,58 @@ | |||
1 | LEDs connected to GPIO lines | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : should be "gpio-leds". | ||
5 | |||
6 | Each LED is represented as a sub-node of the gpio-leds device. Each | ||
7 | node's name represents the name of the corresponding LED. | ||
8 | |||
9 | LED sub-node properties: | ||
10 | - gpios : Should specify the LED's GPIO, see "Specifying GPIO information | ||
11 | for devices" in Documentation/powerpc/booting-without-of.txt. Active | ||
12 | low LEDs should be indicated using flags in the GPIO specifier. | ||
13 | - label : (optional) The label for this LED. If omitted, the label is | ||
14 | taken from the node name (excluding the unit address). | ||
15 | - linux,default-trigger : (optional) This parameter, if present, is a | ||
16 | string defining the trigger assigned to the LED. Current triggers are: | ||
17 | "backlight" - LED will act as a back-light, controlled by the framebuffer | ||
18 | system | ||
19 | "default-on" - LED will turn on, but see "default-state" below | ||
20 | "heartbeat" - LED "double" flashes at a load average based rate | ||
21 | "ide-disk" - LED indicates disk activity | ||
22 | "timer" - LED flashes at a fixed, configurable rate | ||
23 | - default-state: (optional) The initial state of the LED. Valid | ||
24 | values are "on", "off", and "keep". If the LED is already on or off | ||
25 | and the default-state property is set the to same value, then no | ||
26 | glitch should be produced where the LED momentarily turns off (or | ||
27 | on). The "keep" setting will keep the LED at whatever its current | ||
28 | state is, without producing a glitch. The default is off if this | ||
29 | property is not present. | ||
30 | |||
31 | Examples: | ||
32 | |||
33 | leds { | ||
34 | compatible = "gpio-leds"; | ||
35 | hdd { | ||
36 | label = "IDE Activity"; | ||
37 | gpios = <&mcu_pio 0 1>; /* Active low */ | ||
38 | linux,default-trigger = "ide-disk"; | ||
39 | }; | ||
40 | |||
41 | fault { | ||
42 | gpios = <&mcu_pio 1 0>; | ||
43 | /* Keep LED on if BIOS detected hardware fault */ | ||
44 | default-state = "keep"; | ||
45 | }; | ||
46 | }; | ||
47 | |||
48 | run-control { | ||
49 | compatible = "gpio-leds"; | ||
50 | red { | ||
51 | gpios = <&mpc8572 6 0>; | ||
52 | default-state = "off"; | ||
53 | }; | ||
54 | green { | ||
55 | gpios = <&mpc8572 7 0>; | ||
56 | default-state = "on"; | ||
57 | }; | ||
58 | } | ||
diff --git a/Documentation/devicetree/bindings/i2c/fsl-i2c.txt b/Documentation/devicetree/bindings/i2c/fsl-i2c.txt new file mode 100644 index 000000000000..1eacd6b20ed5 --- /dev/null +++ b/Documentation/devicetree/bindings/i2c/fsl-i2c.txt | |||
@@ -0,0 +1,64 @@ | |||
1 | * I2C | ||
2 | |||
3 | Required properties : | ||
4 | |||
5 | - reg : Offset and length of the register set for the device | ||
6 | - compatible : should be "fsl,CHIP-i2c" where CHIP is the name of a | ||
7 | compatible processor, e.g. mpc8313, mpc8543, mpc8544, mpc5121, | ||
8 | mpc5200 or mpc5200b. For the mpc5121, an additional node | ||
9 | "fsl,mpc5121-i2c-ctrl" is required as shown in the example below. | ||
10 | |||
11 | Recommended properties : | ||
12 | |||
13 | - interrupts : <a b> where a is the interrupt number and b is a | ||
14 | field that represents an encoding of the sense and level | ||
15 | information for the interrupt. This should be encoded based on | ||
16 | the information in section 2) depending on the type of interrupt | ||
17 | controller you have. | ||
18 | - interrupt-parent : the phandle for the interrupt controller that | ||
19 | services interrupts for this device. | ||
20 | - fsl,preserve-clocking : boolean; if defined, the clock settings | ||
21 | from the bootloader are preserved (not touched). | ||
22 | - clock-frequency : desired I2C bus clock frequency in Hz. | ||
23 | - fsl,timeout : I2C bus timeout in microseconds. | ||
24 | |||
25 | Examples : | ||
26 | |||
27 | /* MPC5121 based board */ | ||
28 | i2c@1740 { | ||
29 | #address-cells = <1>; | ||
30 | #size-cells = <0>; | ||
31 | compatible = "fsl,mpc5121-i2c", "fsl-i2c"; | ||
32 | reg = <0x1740 0x20>; | ||
33 | interrupts = <11 0x8>; | ||
34 | interrupt-parent = <&ipic>; | ||
35 | clock-frequency = <100000>; | ||
36 | }; | ||
37 | |||
38 | i2ccontrol@1760 { | ||
39 | compatible = "fsl,mpc5121-i2c-ctrl"; | ||
40 | reg = <0x1760 0x8>; | ||
41 | }; | ||
42 | |||
43 | /* MPC5200B based board */ | ||
44 | i2c@3d00 { | ||
45 | #address-cells = <1>; | ||
46 | #size-cells = <0>; | ||
47 | compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c"; | ||
48 | reg = <0x3d00 0x40>; | ||
49 | interrupts = <2 15 0>; | ||
50 | interrupt-parent = <&mpc5200_pic>; | ||
51 | fsl,preserve-clocking; | ||
52 | }; | ||
53 | |||
54 | /* MPC8544 base board */ | ||
55 | i2c@3100 { | ||
56 | #address-cells = <1>; | ||
57 | #size-cells = <0>; | ||
58 | compatible = "fsl,mpc8544-i2c", "fsl-i2c"; | ||
59 | reg = <0x3100 0x100>; | ||
60 | interrupts = <43 2>; | ||
61 | interrupt-parent = <&mpic>; | ||
62 | clock-frequency = <400000>; | ||
63 | fsl,timeout = <10000>; | ||
64 | }; | ||
diff --git a/Documentation/devicetree/bindings/marvell.txt b/Documentation/devicetree/bindings/marvell.txt new file mode 100644 index 000000000000..f1533d91953a --- /dev/null +++ b/Documentation/devicetree/bindings/marvell.txt | |||
@@ -0,0 +1,521 @@ | |||
1 | Marvell Discovery mv64[345]6x System Controller chips | ||
2 | =========================================================== | ||
3 | |||
4 | The Marvell mv64[345]60 series of system controller chips contain | ||
5 | many of the peripherals needed to implement a complete computer | ||
6 | system. In this section, we define device tree nodes to describe | ||
7 | the system controller chip itself and each of the peripherals | ||
8 | which it contains. Compatible string values for each node are | ||
9 | prefixed with the string "marvell,", for Marvell Technology Group Ltd. | ||
10 | |||
11 | 1) The /system-controller node | ||
12 | |||
13 | This node is used to represent the system-controller and must be | ||
14 | present when the system uses a system controller chip. The top-level | ||
15 | system-controller node contains information that is global to all | ||
16 | devices within the system controller chip. The node name begins | ||
17 | with "system-controller" followed by the unit address, which is | ||
18 | the base address of the memory-mapped register set for the system | ||
19 | controller chip. | ||
20 | |||
21 | Required properties: | ||
22 | |||
23 | - ranges : Describes the translation of system controller addresses | ||
24 | for memory mapped registers. | ||
25 | - clock-frequency: Contains the main clock frequency for the system | ||
26 | controller chip. | ||
27 | - reg : This property defines the address and size of the | ||
28 | memory-mapped registers contained within the system controller | ||
29 | chip. The address specified in the "reg" property should match | ||
30 | the unit address of the system-controller node. | ||
31 | - #address-cells : Address representation for system controller | ||
32 | devices. This field represents the number of cells needed to | ||
33 | represent the address of the memory-mapped registers of devices | ||
34 | within the system controller chip. | ||
35 | - #size-cells : Size representation for the memory-mapped | ||
36 | registers within the system controller chip. | ||
37 | - #interrupt-cells : Defines the width of cells used to represent | ||
38 | interrupts. | ||
39 | |||
40 | Optional properties: | ||
41 | |||
42 | - model : The specific model of the system controller chip. Such | ||
43 | as, "mv64360", "mv64460", or "mv64560". | ||
44 | - compatible : A string identifying the compatibility identifiers | ||
45 | of the system controller chip. | ||
46 | |||
47 | The system-controller node contains child nodes for each system | ||
48 | controller device that the platform uses. Nodes should not be created | ||
49 | for devices which exist on the system controller chip but are not used | ||
50 | |||
51 | Example Marvell Discovery mv64360 system-controller node: | ||
52 | |||
53 | system-controller@f1000000 { /* Marvell Discovery mv64360 */ | ||
54 | #address-cells = <1>; | ||
55 | #size-cells = <1>; | ||
56 | model = "mv64360"; /* Default */ | ||
57 | compatible = "marvell,mv64360"; | ||
58 | clock-frequency = <133333333>; | ||
59 | reg = <0xf1000000 0x10000>; | ||
60 | virtual-reg = <0xf1000000>; | ||
61 | ranges = <0x88000000 0x88000000 0x1000000 /* PCI 0 I/O Space */ | ||
62 | 0x80000000 0x80000000 0x8000000 /* PCI 0 MEM Space */ | ||
63 | 0xa0000000 0xa0000000 0x4000000 /* User FLASH */ | ||
64 | 0x00000000 0xf1000000 0x0010000 /* Bridge's regs */ | ||
65 | 0xf2000000 0xf2000000 0x0040000>;/* Integrated SRAM */ | ||
66 | |||
67 | [ child node definitions... ] | ||
68 | } | ||
69 | |||
70 | 2) Child nodes of /system-controller | ||
71 | |||
72 | a) Marvell Discovery MDIO bus | ||
73 | |||
74 | The MDIO is a bus to which the PHY devices are connected. For each | ||
75 | device that exists on this bus, a child node should be created. See | ||
76 | the definition of the PHY node below for an example of how to define | ||
77 | a PHY. | ||
78 | |||
79 | Required properties: | ||
80 | - #address-cells : Should be <1> | ||
81 | - #size-cells : Should be <0> | ||
82 | - device_type : Should be "mdio" | ||
83 | - compatible : Should be "marvell,mv64360-mdio" | ||
84 | |||
85 | Example: | ||
86 | |||
87 | mdio { | ||
88 | #address-cells = <1>; | ||
89 | #size-cells = <0>; | ||
90 | device_type = "mdio"; | ||
91 | compatible = "marvell,mv64360-mdio"; | ||
92 | |||
93 | ethernet-phy@0 { | ||
94 | ...... | ||
95 | }; | ||
96 | }; | ||
97 | |||
98 | |||
99 | b) Marvell Discovery ethernet controller | ||
100 | |||
101 | The Discover ethernet controller is described with two levels | ||
102 | of nodes. The first level describes an ethernet silicon block | ||
103 | and the second level describes up to 3 ethernet nodes within | ||
104 | that block. The reason for the multiple levels is that the | ||
105 | registers for the node are interleaved within a single set | ||
106 | of registers. The "ethernet-block" level describes the | ||
107 | shared register set, and the "ethernet" nodes describe ethernet | ||
108 | port-specific properties. | ||
109 | |||
110 | Ethernet block node | ||
111 | |||
112 | Required properties: | ||
113 | - #address-cells : <1> | ||
114 | - #size-cells : <0> | ||
115 | - compatible : "marvell,mv64360-eth-block" | ||
116 | - reg : Offset and length of the register set for this block | ||
117 | |||
118 | Example Discovery Ethernet block node: | ||
119 | ethernet-block@2000 { | ||
120 | #address-cells = <1>; | ||
121 | #size-cells = <0>; | ||
122 | compatible = "marvell,mv64360-eth-block"; | ||
123 | reg = <0x2000 0x2000>; | ||
124 | ethernet@0 { | ||
125 | ....... | ||
126 | }; | ||
127 | }; | ||
128 | |||
129 | Ethernet port node | ||
130 | |||
131 | Required properties: | ||
132 | - device_type : Should be "network". | ||
133 | - compatible : Should be "marvell,mv64360-eth". | ||
134 | - reg : Should be <0>, <1>, or <2>, according to which registers | ||
135 | within the silicon block the device uses. | ||
136 | - interrupts : <a> where a is the interrupt number for the port. | ||
137 | - interrupt-parent : the phandle for the interrupt controller | ||
138 | that services interrupts for this device. | ||
139 | - phy : the phandle for the PHY connected to this ethernet | ||
140 | controller. | ||
141 | - local-mac-address : 6 bytes, MAC address | ||
142 | |||
143 | Example Discovery Ethernet port node: | ||
144 | ethernet@0 { | ||
145 | device_type = "network"; | ||
146 | compatible = "marvell,mv64360-eth"; | ||
147 | reg = <0>; | ||
148 | interrupts = <32>; | ||
149 | interrupt-parent = <&PIC>; | ||
150 | phy = <&PHY0>; | ||
151 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
152 | }; | ||
153 | |||
154 | |||
155 | |||
156 | c) Marvell Discovery PHY nodes | ||
157 | |||
158 | Required properties: | ||
159 | - device_type : Should be "ethernet-phy" | ||
160 | - interrupts : <a> where a is the interrupt number for this phy. | ||
161 | - interrupt-parent : the phandle for the interrupt controller that | ||
162 | services interrupts for this device. | ||
163 | - reg : The ID number for the phy, usually a small integer | ||
164 | |||
165 | Example Discovery PHY node: | ||
166 | ethernet-phy@1 { | ||
167 | device_type = "ethernet-phy"; | ||
168 | compatible = "broadcom,bcm5421"; | ||
169 | interrupts = <76>; /* GPP 12 */ | ||
170 | interrupt-parent = <&PIC>; | ||
171 | reg = <1>; | ||
172 | }; | ||
173 | |||
174 | |||
175 | d) Marvell Discovery SDMA nodes | ||
176 | |||
177 | Represent DMA hardware associated with the MPSC (multiprotocol | ||
178 | serial controllers). | ||
179 | |||
180 | Required properties: | ||
181 | - compatible : "marvell,mv64360-sdma" | ||
182 | - reg : Offset and length of the register set for this device | ||
183 | - interrupts : <a> where a is the interrupt number for the DMA | ||
184 | device. | ||
185 | - interrupt-parent : the phandle for the interrupt controller | ||
186 | that services interrupts for this device. | ||
187 | |||
188 | Example Discovery SDMA node: | ||
189 | sdma@4000 { | ||
190 | compatible = "marvell,mv64360-sdma"; | ||
191 | reg = <0x4000 0xc18>; | ||
192 | virtual-reg = <0xf1004000>; | ||
193 | interrupts = <36>; | ||
194 | interrupt-parent = <&PIC>; | ||
195 | }; | ||
196 | |||
197 | |||
198 | e) Marvell Discovery BRG nodes | ||
199 | |||
200 | Represent baud rate generator hardware associated with the MPSC | ||
201 | (multiprotocol serial controllers). | ||
202 | |||
203 | Required properties: | ||
204 | - compatible : "marvell,mv64360-brg" | ||
205 | - reg : Offset and length of the register set for this device | ||
206 | - clock-src : A value from 0 to 15 which selects the clock | ||
207 | source for the baud rate generator. This value corresponds | ||
208 | to the CLKS value in the BRGx configuration register. See | ||
209 | the mv64x60 User's Manual. | ||
210 | - clock-frequence : The frequency (in Hz) of the baud rate | ||
211 | generator's input clock. | ||
212 | - current-speed : The current speed setting (presumably by | ||
213 | firmware) of the baud rate generator. | ||
214 | |||
215 | Example Discovery BRG node: | ||
216 | brg@b200 { | ||
217 | compatible = "marvell,mv64360-brg"; | ||
218 | reg = <0xb200 0x8>; | ||
219 | clock-src = <8>; | ||
220 | clock-frequency = <133333333>; | ||
221 | current-speed = <9600>; | ||
222 | }; | ||
223 | |||
224 | |||
225 | f) Marvell Discovery CUNIT nodes | ||
226 | |||
227 | Represent the Serial Communications Unit device hardware. | ||
228 | |||
229 | Required properties: | ||
230 | - reg : Offset and length of the register set for this device | ||
231 | |||
232 | Example Discovery CUNIT node: | ||
233 | cunit@f200 { | ||
234 | reg = <0xf200 0x200>; | ||
235 | }; | ||
236 | |||
237 | |||
238 | g) Marvell Discovery MPSCROUTING nodes | ||
239 | |||
240 | Represent the Discovery's MPSC routing hardware | ||
241 | |||
242 | Required properties: | ||
243 | - reg : Offset and length of the register set for this device | ||
244 | |||
245 | Example Discovery CUNIT node: | ||
246 | mpscrouting@b500 { | ||
247 | reg = <0xb400 0xc>; | ||
248 | }; | ||
249 | |||
250 | |||
251 | h) Marvell Discovery MPSCINTR nodes | ||
252 | |||
253 | Represent the Discovery's MPSC DMA interrupt hardware registers | ||
254 | (SDMA cause and mask registers). | ||
255 | |||
256 | Required properties: | ||
257 | - reg : Offset and length of the register set for this device | ||
258 | |||
259 | Example Discovery MPSCINTR node: | ||
260 | mpsintr@b800 { | ||
261 | reg = <0xb800 0x100>; | ||
262 | }; | ||
263 | |||
264 | |||
265 | i) Marvell Discovery MPSC nodes | ||
266 | |||
267 | Represent the Discovery's MPSC (Multiprotocol Serial Controller) | ||
268 | serial port. | ||
269 | |||
270 | Required properties: | ||
271 | - device_type : "serial" | ||
272 | - compatible : "marvell,mv64360-mpsc" | ||
273 | - reg : Offset and length of the register set for this device | ||
274 | - sdma : the phandle for the SDMA node used by this port | ||
275 | - brg : the phandle for the BRG node used by this port | ||
276 | - cunit : the phandle for the CUNIT node used by this port | ||
277 | - mpscrouting : the phandle for the MPSCROUTING node used by this port | ||
278 | - mpscintr : the phandle for the MPSCINTR node used by this port | ||
279 | - cell-index : the hardware index of this cell in the MPSC core | ||
280 | - max_idle : value needed for MPSC CHR3 (Maximum Frame Length) | ||
281 | register | ||
282 | - interrupts : <a> where a is the interrupt number for the MPSC. | ||
283 | - interrupt-parent : the phandle for the interrupt controller | ||
284 | that services interrupts for this device. | ||
285 | |||
286 | Example Discovery MPSCINTR node: | ||
287 | mpsc@8000 { | ||
288 | device_type = "serial"; | ||
289 | compatible = "marvell,mv64360-mpsc"; | ||
290 | reg = <0x8000 0x38>; | ||
291 | virtual-reg = <0xf1008000>; | ||
292 | sdma = <&SDMA0>; | ||
293 | brg = <&BRG0>; | ||
294 | cunit = <&CUNIT>; | ||
295 | mpscrouting = <&MPSCROUTING>; | ||
296 | mpscintr = <&MPSCINTR>; | ||
297 | cell-index = <0>; | ||
298 | max_idle = <40>; | ||
299 | interrupts = <40>; | ||
300 | interrupt-parent = <&PIC>; | ||
301 | }; | ||
302 | |||
303 | |||
304 | j) Marvell Discovery Watch Dog Timer nodes | ||
305 | |||
306 | Represent the Discovery's watchdog timer hardware | ||
307 | |||
308 | Required properties: | ||
309 | - compatible : "marvell,mv64360-wdt" | ||
310 | - reg : Offset and length of the register set for this device | ||
311 | |||
312 | Example Discovery Watch Dog Timer node: | ||
313 | wdt@b410 { | ||
314 | compatible = "marvell,mv64360-wdt"; | ||
315 | reg = <0xb410 0x8>; | ||
316 | }; | ||
317 | |||
318 | |||
319 | k) Marvell Discovery I2C nodes | ||
320 | |||
321 | Represent the Discovery's I2C hardware | ||
322 | |||
323 | Required properties: | ||
324 | - device_type : "i2c" | ||
325 | - compatible : "marvell,mv64360-i2c" | ||
326 | - reg : Offset and length of the register set for this device | ||
327 | - interrupts : <a> where a is the interrupt number for the I2C. | ||
328 | - interrupt-parent : the phandle for the interrupt controller | ||
329 | that services interrupts for this device. | ||
330 | |||
331 | Example Discovery I2C node: | ||
332 | compatible = "marvell,mv64360-i2c"; | ||
333 | reg = <0xc000 0x20>; | ||
334 | virtual-reg = <0xf100c000>; | ||
335 | interrupts = <37>; | ||
336 | interrupt-parent = <&PIC>; | ||
337 | }; | ||
338 | |||
339 | |||
340 | l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes | ||
341 | |||
342 | Represent the Discovery's PIC hardware | ||
343 | |||
344 | Required properties: | ||
345 | - #interrupt-cells : <1> | ||
346 | - #address-cells : <0> | ||
347 | - compatible : "marvell,mv64360-pic" | ||
348 | - reg : Offset and length of the register set for this device | ||
349 | - interrupt-controller | ||
350 | |||
351 | Example Discovery PIC node: | ||
352 | pic { | ||
353 | #interrupt-cells = <1>; | ||
354 | #address-cells = <0>; | ||
355 | compatible = "marvell,mv64360-pic"; | ||
356 | reg = <0x0 0x88>; | ||
357 | interrupt-controller; | ||
358 | }; | ||
359 | |||
360 | |||
361 | m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes | ||
362 | |||
363 | Represent the Discovery's MPP hardware | ||
364 | |||
365 | Required properties: | ||
366 | - compatible : "marvell,mv64360-mpp" | ||
367 | - reg : Offset and length of the register set for this device | ||
368 | |||
369 | Example Discovery MPP node: | ||
370 | mpp@f000 { | ||
371 | compatible = "marvell,mv64360-mpp"; | ||
372 | reg = <0xf000 0x10>; | ||
373 | }; | ||
374 | |||
375 | |||
376 | n) Marvell Discovery GPP (General Purpose Pins) nodes | ||
377 | |||
378 | Represent the Discovery's GPP hardware | ||
379 | |||
380 | Required properties: | ||
381 | - compatible : "marvell,mv64360-gpp" | ||
382 | - reg : Offset and length of the register set for this device | ||
383 | |||
384 | Example Discovery GPP node: | ||
385 | gpp@f000 { | ||
386 | compatible = "marvell,mv64360-gpp"; | ||
387 | reg = <0xf100 0x20>; | ||
388 | }; | ||
389 | |||
390 | |||
391 | o) Marvell Discovery PCI host bridge node | ||
392 | |||
393 | Represents the Discovery's PCI host bridge device. The properties | ||
394 | for this node conform to Rev 2.1 of the PCI Bus Binding to IEEE | ||
395 | 1275-1994. A typical value for the compatible property is | ||
396 | "marvell,mv64360-pci". | ||
397 | |||
398 | Example Discovery PCI host bridge node | ||
399 | pci@80000000 { | ||
400 | #address-cells = <3>; | ||
401 | #size-cells = <2>; | ||
402 | #interrupt-cells = <1>; | ||
403 | device_type = "pci"; | ||
404 | compatible = "marvell,mv64360-pci"; | ||
405 | reg = <0xcf8 0x8>; | ||
406 | ranges = <0x01000000 0x0 0x0 | ||
407 | 0x88000000 0x0 0x01000000 | ||
408 | 0x02000000 0x0 0x80000000 | ||
409 | 0x80000000 0x0 0x08000000>; | ||
410 | bus-range = <0 255>; | ||
411 | clock-frequency = <66000000>; | ||
412 | interrupt-parent = <&PIC>; | ||
413 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | ||
414 | interrupt-map = < | ||
415 | /* IDSEL 0x0a */ | ||
416 | 0x5000 0 0 1 &PIC 80 | ||
417 | 0x5000 0 0 2 &PIC 81 | ||
418 | 0x5000 0 0 3 &PIC 91 | ||
419 | 0x5000 0 0 4 &PIC 93 | ||
420 | |||
421 | /* IDSEL 0x0b */ | ||
422 | 0x5800 0 0 1 &PIC 91 | ||
423 | 0x5800 0 0 2 &PIC 93 | ||
424 | 0x5800 0 0 3 &PIC 80 | ||
425 | 0x5800 0 0 4 &PIC 81 | ||
426 | |||
427 | /* IDSEL 0x0c */ | ||
428 | 0x6000 0 0 1 &PIC 91 | ||
429 | 0x6000 0 0 2 &PIC 93 | ||
430 | 0x6000 0 0 3 &PIC 80 | ||
431 | 0x6000 0 0 4 &PIC 81 | ||
432 | |||
433 | /* IDSEL 0x0d */ | ||
434 | 0x6800 0 0 1 &PIC 93 | ||
435 | 0x6800 0 0 2 &PIC 80 | ||
436 | 0x6800 0 0 3 &PIC 81 | ||
437 | 0x6800 0 0 4 &PIC 91 | ||
438 | >; | ||
439 | }; | ||
440 | |||
441 | |||
442 | p) Marvell Discovery CPU Error nodes | ||
443 | |||
444 | Represent the Discovery's CPU error handler device. | ||
445 | |||
446 | Required properties: | ||
447 | - compatible : "marvell,mv64360-cpu-error" | ||
448 | - reg : Offset and length of the register set for this device | ||
449 | - interrupts : the interrupt number for this device | ||
450 | - interrupt-parent : the phandle for the interrupt controller | ||
451 | that services interrupts for this device. | ||
452 | |||
453 | Example Discovery CPU Error node: | ||
454 | cpu-error@0070 { | ||
455 | compatible = "marvell,mv64360-cpu-error"; | ||
456 | reg = <0x70 0x10 0x128 0x28>; | ||
457 | interrupts = <3>; | ||
458 | interrupt-parent = <&PIC>; | ||
459 | }; | ||
460 | |||
461 | |||
462 | q) Marvell Discovery SRAM Controller nodes | ||
463 | |||
464 | Represent the Discovery's SRAM controller device. | ||
465 | |||
466 | Required properties: | ||
467 | - compatible : "marvell,mv64360-sram-ctrl" | ||
468 | - reg : Offset and length of the register set for this device | ||
469 | - interrupts : the interrupt number for this device | ||
470 | - interrupt-parent : the phandle for the interrupt controller | ||
471 | that services interrupts for this device. | ||
472 | |||
473 | Example Discovery SRAM Controller node: | ||
474 | sram-ctrl@0380 { | ||
475 | compatible = "marvell,mv64360-sram-ctrl"; | ||
476 | reg = <0x380 0x80>; | ||
477 | interrupts = <13>; | ||
478 | interrupt-parent = <&PIC>; | ||
479 | }; | ||
480 | |||
481 | |||
482 | r) Marvell Discovery PCI Error Handler nodes | ||
483 | |||
484 | Represent the Discovery's PCI error handler device. | ||
485 | |||
486 | Required properties: | ||
487 | - compatible : "marvell,mv64360-pci-error" | ||
488 | - reg : Offset and length of the register set for this device | ||
489 | - interrupts : the interrupt number for this device | ||
490 | - interrupt-parent : the phandle for the interrupt controller | ||
491 | that services interrupts for this device. | ||
492 | |||
493 | Example Discovery PCI Error Handler node: | ||
494 | pci-error@1d40 { | ||
495 | compatible = "marvell,mv64360-pci-error"; | ||
496 | reg = <0x1d40 0x40 0xc28 0x4>; | ||
497 | interrupts = <12>; | ||
498 | interrupt-parent = <&PIC>; | ||
499 | }; | ||
500 | |||
501 | |||
502 | s) Marvell Discovery Memory Controller nodes | ||
503 | |||
504 | Represent the Discovery's memory controller device. | ||
505 | |||
506 | Required properties: | ||
507 | - compatible : "marvell,mv64360-mem-ctrl" | ||
508 | - reg : Offset and length of the register set for this device | ||
509 | - interrupts : the interrupt number for this device | ||
510 | - interrupt-parent : the phandle for the interrupt controller | ||
511 | that services interrupts for this device. | ||
512 | |||
513 | Example Discovery Memory Controller node: | ||
514 | mem-ctrl@1400 { | ||
515 | compatible = "marvell,mv64360-mem-ctrl"; | ||
516 | reg = <0x1400 0x60>; | ||
517 | interrupts = <17>; | ||
518 | interrupt-parent = <&PIC>; | ||
519 | }; | ||
520 | |||
521 | |||
diff --git a/Documentation/devicetree/bindings/mmc/fsl-esdhc.txt b/Documentation/devicetree/bindings/mmc/fsl-esdhc.txt new file mode 100644 index 000000000000..64bcb8be973c --- /dev/null +++ b/Documentation/devicetree/bindings/mmc/fsl-esdhc.txt | |||
@@ -0,0 +1,29 @@ | |||
1 | * Freescale Enhanced Secure Digital Host Controller (eSDHC) | ||
2 | |||
3 | The Enhanced Secure Digital Host Controller provides an interface | ||
4 | for MMC, SD, and SDIO types of memory cards. | ||
5 | |||
6 | Required properties: | ||
7 | - compatible : should be | ||
8 | "fsl,<chip>-esdhc", "fsl,esdhc" | ||
9 | - reg : should contain eSDHC registers location and length. | ||
10 | - interrupts : should contain eSDHC interrupt. | ||
11 | - interrupt-parent : interrupt source phandle. | ||
12 | - clock-frequency : specifies eSDHC base clock frequency. | ||
13 | - sdhci,wp-inverted : (optional) specifies that eSDHC controller | ||
14 | reports inverted write-protect state; | ||
15 | - sdhci,1-bit-only : (optional) specifies that a controller can | ||
16 | only handle 1-bit data transfers. | ||
17 | - sdhci,auto-cmd12: (optional) specifies that a controller can | ||
18 | only handle auto CMD12. | ||
19 | |||
20 | Example: | ||
21 | |||
22 | sdhci@2e000 { | ||
23 | compatible = "fsl,mpc8378-esdhc", "fsl,esdhc"; | ||
24 | reg = <0x2e000 0x1000>; | ||
25 | interrupts = <42 0x8>; | ||
26 | interrupt-parent = <&ipic>; | ||
27 | /* Filled in by U-Boot */ | ||
28 | clock-frequency = <0>; | ||
29 | }; | ||
diff --git a/Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt b/Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt new file mode 100644 index 000000000000..c39ac2891951 --- /dev/null +++ b/Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt | |||
@@ -0,0 +1,23 @@ | |||
1 | MMC/SD/SDIO slot directly connected to a SPI bus | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : should be "mmc-spi-slot". | ||
5 | - reg : should specify SPI address (chip-select number). | ||
6 | - spi-max-frequency : maximum frequency for this device (Hz). | ||
7 | - voltage-ranges : two cells are required, first cell specifies minimum | ||
8 | slot voltage (mV), second cell specifies maximum slot voltage (mV). | ||
9 | Several ranges could be specified. | ||
10 | - gpios : (optional) may specify GPIOs in this order: Card-Detect GPIO, | ||
11 | Write-Protect GPIO. | ||
12 | |||
13 | Example: | ||
14 | |||
15 | mmc-slot@0 { | ||
16 | compatible = "fsl,mpc8323rdb-mmc-slot", | ||
17 | "mmc-spi-slot"; | ||
18 | reg = <0>; | ||
19 | gpios = <&qe_pio_d 14 1 | ||
20 | &qe_pio_d 15 0>; | ||
21 | voltage-ranges = <3300 3300>; | ||
22 | spi-max-frequency = <50000000>; | ||
23 | }; | ||
diff --git a/Documentation/devicetree/bindings/mtd/fsl-upm-nand.txt b/Documentation/devicetree/bindings/mtd/fsl-upm-nand.txt new file mode 100644 index 000000000000..a48b2cadc7f0 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/fsl-upm-nand.txt | |||
@@ -0,0 +1,63 @@ | |||
1 | Freescale Localbus UPM programmed to work with NAND flash | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : "fsl,upm-nand". | ||
5 | - reg : should specify localbus chip select and size used for the chip. | ||
6 | - fsl,upm-addr-offset : UPM pattern offset for the address latch. | ||
7 | - fsl,upm-cmd-offset : UPM pattern offset for the command latch. | ||
8 | |||
9 | Optional properties: | ||
10 | - fsl,upm-wait-flags : add chip-dependent short delays after running the | ||
11 | UPM pattern (0x1), after writing a data byte (0x2) or after | ||
12 | writing out a buffer (0x4). | ||
13 | - fsl,upm-addr-line-cs-offsets : address offsets for multi-chip support. | ||
14 | The corresponding address lines are used to select the chip. | ||
15 | - gpios : may specify optional GPIOs connected to the Ready-Not-Busy pins | ||
16 | (R/B#). For multi-chip devices, "n" GPIO definitions are required | ||
17 | according to the number of chips. | ||
18 | - chip-delay : chip dependent delay for transfering data from array to | ||
19 | read registers (tR). Required if property "gpios" is not used | ||
20 | (R/B# pins not connected). | ||
21 | |||
22 | Examples: | ||
23 | |||
24 | upm@1,0 { | ||
25 | compatible = "fsl,upm-nand"; | ||
26 | reg = <1 0 1>; | ||
27 | fsl,upm-addr-offset = <16>; | ||
28 | fsl,upm-cmd-offset = <8>; | ||
29 | gpios = <&qe_pio_e 18 0>; | ||
30 | |||
31 | flash { | ||
32 | #address-cells = <1>; | ||
33 | #size-cells = <1>; | ||
34 | compatible = "..."; | ||
35 | |||
36 | partition@0 { | ||
37 | ... | ||
38 | }; | ||
39 | }; | ||
40 | }; | ||
41 | |||
42 | upm@3,0 { | ||
43 | #address-cells = <0>; | ||
44 | #size-cells = <0>; | ||
45 | compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand"; | ||
46 | reg = <3 0x0 0x800>; | ||
47 | fsl,upm-addr-offset = <0x10>; | ||
48 | fsl,upm-cmd-offset = <0x08>; | ||
49 | /* Multi-chip NAND device */ | ||
50 | fsl,upm-addr-line-cs-offsets = <0x0 0x200>; | ||
51 | fsl,upm-wait-flags = <0x5>; | ||
52 | chip-delay = <25>; // in micro-seconds | ||
53 | |||
54 | nand@0 { | ||
55 | #address-cells = <1>; | ||
56 | #size-cells = <1>; | ||
57 | |||
58 | partition@0 { | ||
59 | label = "fs"; | ||
60 | reg = <0x00000000 0x10000000>; | ||
61 | }; | ||
62 | }; | ||
63 | }; | ||
diff --git a/Documentation/devicetree/bindings/mtd/mtd-physmap.txt b/Documentation/devicetree/bindings/mtd/mtd-physmap.txt new file mode 100644 index 000000000000..80152cb567d9 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/mtd-physmap.txt | |||
@@ -0,0 +1,90 @@ | |||
1 | CFI or JEDEC memory-mapped NOR flash, MTD-RAM (NVRAM...) | ||
2 | |||
3 | Flash chips (Memory Technology Devices) are often used for solid state | ||
4 | file systems on embedded devices. | ||
5 | |||
6 | - compatible : should contain the specific model of mtd chip(s) | ||
7 | used, if known, followed by either "cfi-flash", "jedec-flash" | ||
8 | or "mtd-ram". | ||
9 | - reg : Address range(s) of the mtd chip(s) | ||
10 | It's possible to (optionally) define multiple "reg" tuples so that | ||
11 | non-identical chips can be described in one node. | ||
12 | - bank-width : Width (in bytes) of the bank. Equal to the | ||
13 | device width times the number of interleaved chips. | ||
14 | - device-width : (optional) Width of a single mtd chip. If | ||
15 | omitted, assumed to be equal to 'bank-width'. | ||
16 | - #address-cells, #size-cells : Must be present if the device has | ||
17 | sub-nodes representing partitions (see below). In this case | ||
18 | both #address-cells and #size-cells must be equal to 1. | ||
19 | |||
20 | For JEDEC compatible devices, the following additional properties | ||
21 | are defined: | ||
22 | |||
23 | - vendor-id : Contains the flash chip's vendor id (1 byte). | ||
24 | - device-id : Contains the flash chip's device id (1 byte). | ||
25 | |||
26 | In addition to the information on the mtd bank itself, the | ||
27 | device tree may optionally contain additional information | ||
28 | describing partitions of the address space. This can be | ||
29 | used on platforms which have strong conventions about which | ||
30 | portions of a flash are used for what purposes, but which don't | ||
31 | use an on-flash partition table such as RedBoot. | ||
32 | |||
33 | Each partition is represented as a sub-node of the mtd device. | ||
34 | Each node's name represents the name of the corresponding | ||
35 | partition of the mtd device. | ||
36 | |||
37 | Flash partitions | ||
38 | - reg : The partition's offset and size within the mtd bank. | ||
39 | - label : (optional) The label / name for this partition. | ||
40 | If omitted, the label is taken from the node name (excluding | ||
41 | the unit address). | ||
42 | - read-only : (optional) This parameter, if present, is a hint to | ||
43 | Linux that this partition should only be mounted | ||
44 | read-only. This is usually used for flash partitions | ||
45 | containing early-boot firmware images or data which should not | ||
46 | be clobbered. | ||
47 | |||
48 | Example: | ||
49 | |||
50 | flash@ff000000 { | ||
51 | compatible = "amd,am29lv128ml", "cfi-flash"; | ||
52 | reg = <ff000000 01000000>; | ||
53 | bank-width = <4>; | ||
54 | device-width = <1>; | ||
55 | #address-cells = <1>; | ||
56 | #size-cells = <1>; | ||
57 | fs@0 { | ||
58 | label = "fs"; | ||
59 | reg = <0 f80000>; | ||
60 | }; | ||
61 | firmware@f80000 { | ||
62 | label ="firmware"; | ||
63 | reg = <f80000 80000>; | ||
64 | read-only; | ||
65 | }; | ||
66 | }; | ||
67 | |||
68 | Here an example with multiple "reg" tuples: | ||
69 | |||
70 | flash@f0000000,0 { | ||
71 | #address-cells = <1>; | ||
72 | #size-cells = <1>; | ||
73 | compatible = "intel,PC48F4400P0VB", "cfi-flash"; | ||
74 | reg = <0 0x00000000 0x02000000 | ||
75 | 0 0x02000000 0x02000000>; | ||
76 | bank-width = <2>; | ||
77 | partition@0 { | ||
78 | label = "test-part1"; | ||
79 | reg = <0 0x04000000>; | ||
80 | }; | ||
81 | }; | ||
82 | |||
83 | An example using SRAM: | ||
84 | |||
85 | sram@2,0 { | ||
86 | compatible = "samsung,k6f1616u6a", "mtd-ram"; | ||
87 | reg = <2 0 0x00200000>; | ||
88 | bank-width = <2>; | ||
89 | }; | ||
90 | |||
diff --git a/Documentation/devicetree/bindings/net/can/mpc5xxx-mscan.txt b/Documentation/devicetree/bindings/net/can/mpc5xxx-mscan.txt new file mode 100644 index 000000000000..2fa4fcd38fd6 --- /dev/null +++ b/Documentation/devicetree/bindings/net/can/mpc5xxx-mscan.txt | |||
@@ -0,0 +1,53 @@ | |||
1 | CAN Device Tree Bindings | ||
2 | ------------------------ | ||
3 | |||
4 | (c) 2006-2009 Secret Lab Technologies Ltd | ||
5 | Grant Likely <grant.likely@secretlab.ca> | ||
6 | |||
7 | fsl,mpc5200-mscan nodes | ||
8 | ----------------------- | ||
9 | In addition to the required compatible-, reg- and interrupt-properties, you can | ||
10 | also specify which clock source shall be used for the controller: | ||
11 | |||
12 | - fsl,mscan-clock-source : a string describing the clock source. Valid values | ||
13 | are: "ip" for ip bus clock | ||
14 | "ref" for reference clock (XTAL) | ||
15 | "ref" is default in case this property is not | ||
16 | present. | ||
17 | |||
18 | fsl,mpc5121-mscan nodes | ||
19 | ----------------------- | ||
20 | In addition to the required compatible-, reg- and interrupt-properties, you can | ||
21 | also specify which clock source and divider shall be used for the controller: | ||
22 | |||
23 | - fsl,mscan-clock-source : a string describing the clock source. Valid values | ||
24 | are: "ip" for ip bus clock | ||
25 | "ref" for reference clock | ||
26 | "sys" for system clock | ||
27 | If this property is not present, an optimal CAN | ||
28 | clock source and frequency based on the system | ||
29 | clock will be selected. If this is not possible, | ||
30 | the reference clock will be used. | ||
31 | |||
32 | - fsl,mscan-clock-divider: for the reference and system clock, an additional | ||
33 | clock divider can be specified. By default, a | ||
34 | value of 1 is used. | ||
35 | |||
36 | Note that the MPC5121 Rev. 1 processor is not supported. | ||
37 | |||
38 | Examples: | ||
39 | can@1300 { | ||
40 | compatible = "fsl,mpc5121-mscan"; | ||
41 | interrupts = <12 0x8>; | ||
42 | interrupt-parent = <&ipic>; | ||
43 | reg = <0x1300 0x80>; | ||
44 | }; | ||
45 | |||
46 | can@1380 { | ||
47 | compatible = "fsl,mpc5121-mscan"; | ||
48 | interrupts = <13 0x8>; | ||
49 | interrupt-parent = <&ipic>; | ||
50 | reg = <0x1380 0x80>; | ||
51 | fsl,mscan-clock-source = "ref"; | ||
52 | fsl,mscan-clock-divider = <3>; | ||
53 | }; | ||
diff --git a/Documentation/devicetree/bindings/net/can/sja1000.txt b/Documentation/devicetree/bindings/net/can/sja1000.txt new file mode 100644 index 000000000000..d6d209ded937 --- /dev/null +++ b/Documentation/devicetree/bindings/net/can/sja1000.txt | |||
@@ -0,0 +1,53 @@ | |||
1 | Memory mapped SJA1000 CAN controller from NXP (formerly Philips) | ||
2 | |||
3 | Required properties: | ||
4 | |||
5 | - compatible : should be "nxp,sja1000". | ||
6 | |||
7 | - reg : should specify the chip select, address offset and size required | ||
8 | to map the registers of the SJA1000. The size is usually 0x80. | ||
9 | |||
10 | - interrupts: property with a value describing the interrupt source | ||
11 | (number and sensitivity) required for the SJA1000. | ||
12 | |||
13 | Optional properties: | ||
14 | |||
15 | - nxp,external-clock-frequency : Frequency of the external oscillator | ||
16 | clock in Hz. Note that the internal clock frequency used by the | ||
17 | SJA1000 is half of that value. If not specified, a default value | ||
18 | of 16000000 (16 MHz) is used. | ||
19 | |||
20 | - nxp,tx-output-mode : operation mode of the TX output control logic: | ||
21 | <0x0> : bi-phase output mode | ||
22 | <0x1> : normal output mode (default) | ||
23 | <0x2> : test output mode | ||
24 | <0x3> : clock output mode | ||
25 | |||
26 | - nxp,tx-output-config : TX output pin configuration: | ||
27 | <0x01> : TX0 invert | ||
28 | <0x02> : TX0 pull-down (default) | ||
29 | <0x04> : TX0 pull-up | ||
30 | <0x06> : TX0 push-pull | ||
31 | <0x08> : TX1 invert | ||
32 | <0x10> : TX1 pull-down | ||
33 | <0x20> : TX1 pull-up | ||
34 | <0x30> : TX1 push-pull | ||
35 | |||
36 | - nxp,clock-out-frequency : clock frequency in Hz on the CLKOUT pin. | ||
37 | If not specified or if the specified value is 0, the CLKOUT pin | ||
38 | will be disabled. | ||
39 | |||
40 | - nxp,no-comparator-bypass : Allows to disable the CAN input comperator. | ||
41 | |||
42 | For futher information, please have a look to the SJA1000 data sheet. | ||
43 | |||
44 | Examples: | ||
45 | |||
46 | can@3,100 { | ||
47 | compatible = "nxp,sja1000"; | ||
48 | reg = <3 0x100 0x80>; | ||
49 | interrupts = <2 0>; | ||
50 | interrupt-parent = <&mpic>; | ||
51 | nxp,external-clock-frequency = <16000000>; | ||
52 | }; | ||
53 | |||
diff --git a/Documentation/devicetree/bindings/net/fsl-tsec-phy.txt b/Documentation/devicetree/bindings/net/fsl-tsec-phy.txt new file mode 100644 index 000000000000..edb7ae19e868 --- /dev/null +++ b/Documentation/devicetree/bindings/net/fsl-tsec-phy.txt | |||
@@ -0,0 +1,76 @@ | |||
1 | * MDIO IO device | ||
2 | |||
3 | The MDIO is a bus to which the PHY devices are connected. For each | ||
4 | device that exists on this bus, a child node should be created. See | ||
5 | the definition of the PHY node in booting-without-of.txt for an example | ||
6 | of how to define a PHY. | ||
7 | |||
8 | Required properties: | ||
9 | - reg : Offset and length of the register set for the device | ||
10 | - compatible : Should define the compatible device type for the | ||
11 | mdio. Currently, this is most likely to be "fsl,gianfar-mdio" | ||
12 | |||
13 | Example: | ||
14 | |||
15 | mdio@24520 { | ||
16 | reg = <24520 20>; | ||
17 | compatible = "fsl,gianfar-mdio"; | ||
18 | |||
19 | ethernet-phy@0 { | ||
20 | ...... | ||
21 | }; | ||
22 | }; | ||
23 | |||
24 | * TBI Internal MDIO bus | ||
25 | |||
26 | As of this writing, every tsec is associated with an internal TBI PHY. | ||
27 | This PHY is accessed through the local MDIO bus. These buses are defined | ||
28 | similarly to the mdio buses, except they are compatible with "fsl,gianfar-tbi". | ||
29 | The TBI PHYs underneath them are similar to normal PHYs, but the reg property | ||
30 | is considered instructive, rather than descriptive. The reg property should | ||
31 | be chosen so it doesn't interfere with other PHYs on the bus. | ||
32 | |||
33 | * Gianfar-compatible ethernet nodes | ||
34 | |||
35 | Properties: | ||
36 | |||
37 | - device_type : Should be "network" | ||
38 | - model : Model of the device. Can be "TSEC", "eTSEC", or "FEC" | ||
39 | - compatible : Should be "gianfar" | ||
40 | - reg : Offset and length of the register set for the device | ||
41 | - local-mac-address : List of bytes representing the ethernet address of | ||
42 | this controller | ||
43 | - interrupts : For FEC devices, the first interrupt is the device's | ||
44 | interrupt. For TSEC and eTSEC devices, the first interrupt is | ||
45 | transmit, the second is receive, and the third is error. | ||
46 | - phy-handle : The phandle for the PHY connected to this ethernet | ||
47 | controller. | ||
48 | - fixed-link : <a b c d e> where a is emulated phy id - choose any, | ||
49 | but unique to the all specified fixed-links, b is duplex - 0 half, | ||
50 | 1 full, c is link speed - d#10/d#100/d#1000, d is pause - 0 no | ||
51 | pause, 1 pause, e is asym_pause - 0 no asym_pause, 1 asym_pause. | ||
52 | - phy-connection-type : a string naming the controller/PHY interface type, | ||
53 | i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii", | ||
54 | "tbi", or "rtbi". This property is only really needed if the connection | ||
55 | is of type "rgmii-id", as all other connection types are detected by | ||
56 | hardware. | ||
57 | - fsl,magic-packet : If present, indicates that the hardware supports | ||
58 | waking up via magic packet. | ||
59 | - bd-stash : If present, indicates that the hardware supports stashing | ||
60 | buffer descriptors in the L2. | ||
61 | - rx-stash-len : Denotes the number of bytes of a received buffer to stash | ||
62 | in the L2. | ||
63 | - rx-stash-idx : Denotes the index of the first byte from the received | ||
64 | buffer to stash in the L2. | ||
65 | |||
66 | Example: | ||
67 | ethernet@24000 { | ||
68 | device_type = "network"; | ||
69 | model = "TSEC"; | ||
70 | compatible = "gianfar"; | ||
71 | reg = <0x24000 0x1000>; | ||
72 | local-mac-address = [ 00 E0 0C 00 73 00 ]; | ||
73 | interrupts = <29 2 30 2 34 2>; | ||
74 | interrupt-parent = <&mpic>; | ||
75 | phy-handle = <&phy0> | ||
76 | }; | ||
diff --git a/Documentation/devicetree/bindings/net/mdio-gpio.txt b/Documentation/devicetree/bindings/net/mdio-gpio.txt new file mode 100644 index 000000000000..bc9549529014 --- /dev/null +++ b/Documentation/devicetree/bindings/net/mdio-gpio.txt | |||
@@ -0,0 +1,19 @@ | |||
1 | MDIO on GPIOs | ||
2 | |||
3 | Currently defined compatibles: | ||
4 | - virtual,gpio-mdio | ||
5 | |||
6 | MDC and MDIO lines connected to GPIO controllers are listed in the | ||
7 | gpios property as described in section VIII.1 in the following order: | ||
8 | |||
9 | MDC, MDIO. | ||
10 | |||
11 | Example: | ||
12 | |||
13 | mdio { | ||
14 | compatible = "virtual,mdio-gpio"; | ||
15 | #address-cells = <1>; | ||
16 | #size-cells = <0>; | ||
17 | gpios = <&qe_pio_a 11 | ||
18 | &qe_pio_c 6>; | ||
19 | }; | ||
diff --git a/Documentation/devicetree/bindings/net/phy.txt b/Documentation/devicetree/bindings/net/phy.txt new file mode 100644 index 000000000000..bb8c742eb8c5 --- /dev/null +++ b/Documentation/devicetree/bindings/net/phy.txt | |||
@@ -0,0 +1,25 @@ | |||
1 | PHY nodes | ||
2 | |||
3 | Required properties: | ||
4 | |||
5 | - device_type : Should be "ethernet-phy" | ||
6 | - interrupts : <a b> where a is the interrupt number and b is a | ||
7 | field that represents an encoding of the sense and level | ||
8 | information for the interrupt. This should be encoded based on | ||
9 | the information in section 2) depending on the type of interrupt | ||
10 | controller you have. | ||
11 | - interrupt-parent : the phandle for the interrupt controller that | ||
12 | services interrupts for this device. | ||
13 | - reg : The ID number for the phy, usually a small integer | ||
14 | - linux,phandle : phandle for this node; likely referenced by an | ||
15 | ethernet controller node. | ||
16 | |||
17 | Example: | ||
18 | |||
19 | ethernet-phy@0 { | ||
20 | linux,phandle = <2452000> | ||
21 | interrupt-parent = <40000>; | ||
22 | interrupts = <35 1>; | ||
23 | reg = <0>; | ||
24 | device_type = "ethernet-phy"; | ||
25 | }; | ||
diff --git a/Documentation/devicetree/bindings/pci/83xx-512x-pci.txt b/Documentation/devicetree/bindings/pci/83xx-512x-pci.txt new file mode 100644 index 000000000000..35a465362408 --- /dev/null +++ b/Documentation/devicetree/bindings/pci/83xx-512x-pci.txt | |||
@@ -0,0 +1,40 @@ | |||
1 | * Freescale 83xx and 512x PCI bridges | ||
2 | |||
3 | Freescale 83xx and 512x SOCs include the same pci bridge core. | ||
4 | |||
5 | 83xx/512x specific notes: | ||
6 | - reg: should contain two address length tuples | ||
7 | The first is for the internal pci bridge registers | ||
8 | The second is for the pci config space access registers | ||
9 | |||
10 | Example (MPC8313ERDB) | ||
11 | pci0: pci@e0008500 { | ||
12 | cell-index = <1>; | ||
13 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | ||
14 | interrupt-map = < | ||
15 | /* IDSEL 0x0E -mini PCI */ | ||
16 | 0x7000 0x0 0x0 0x1 &ipic 18 0x8 | ||
17 | 0x7000 0x0 0x0 0x2 &ipic 18 0x8 | ||
18 | 0x7000 0x0 0x0 0x3 &ipic 18 0x8 | ||
19 | 0x7000 0x0 0x0 0x4 &ipic 18 0x8 | ||
20 | |||
21 | /* IDSEL 0x0F - PCI slot */ | ||
22 | 0x7800 0x0 0x0 0x1 &ipic 17 0x8 | ||
23 | 0x7800 0x0 0x0 0x2 &ipic 18 0x8 | ||
24 | 0x7800 0x0 0x0 0x3 &ipic 17 0x8 | ||
25 | 0x7800 0x0 0x0 0x4 &ipic 18 0x8>; | ||
26 | interrupt-parent = <&ipic>; | ||
27 | interrupts = <66 0x8>; | ||
28 | bus-range = <0x0 0x0>; | ||
29 | ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000 | ||
30 | 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000 | ||
31 | 0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>; | ||
32 | clock-frequency = <66666666>; | ||
33 | #interrupt-cells = <1>; | ||
34 | #size-cells = <2>; | ||
35 | #address-cells = <3>; | ||
36 | reg = <0xe0008500 0x100 /* internal registers */ | ||
37 | 0xe0008300 0x8>; /* config space access registers */ | ||
38 | compatible = "fsl,mpc8349-pci"; | ||
39 | device_type = "pci"; | ||
40 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/4xx/cpm.txt b/Documentation/devicetree/bindings/powerpc/4xx/cpm.txt new file mode 100644 index 000000000000..ee459806d35e --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/4xx/cpm.txt | |||
@@ -0,0 +1,52 @@ | |||
1 | PPC4xx Clock Power Management (CPM) node | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : compatible list, currently only "ibm,cpm" | ||
5 | - dcr-access-method : "native" | ||
6 | - dcr-reg : < DCR register range > | ||
7 | |||
8 | Optional properties: | ||
9 | - er-offset : All 4xx SoCs with a CPM controller have | ||
10 | one of two different order for the CPM | ||
11 | registers. Some have the CPM registers | ||
12 | in the following order (ER,FR,SR). The | ||
13 | others have them in the following order | ||
14 | (SR,ER,FR). For the second case set | ||
15 | er-offset = <1>. | ||
16 | - unused-units : specifier consist of one cell. For each | ||
17 | bit in the cell, the corresponding bit | ||
18 | in CPM will be set to turn off unused | ||
19 | devices. | ||
20 | - idle-doze : specifier consist of one cell. For each | ||
21 | bit in the cell, the corresponding bit | ||
22 | in CPM will be set to turn off unused | ||
23 | devices. This is usually just CPM[CPU]. | ||
24 | - standby : specifier consist of one cell. For each | ||
25 | bit in the cell, the corresponding bit | ||
26 | in CPM will be set on standby and | ||
27 | restored on resume. | ||
28 | - suspend : specifier consist of one cell. For each | ||
29 | bit in the cell, the corresponding bit | ||
30 | in CPM will be set on suspend (mem) and | ||
31 | restored on resume. Note, for standby | ||
32 | and suspend the corresponding bits can | ||
33 | be different or the same. Usually for | ||
34 | standby only class 2 and 3 units are set. | ||
35 | However, the interface does not care. | ||
36 | If they are the same, the additional | ||
37 | power saving will be seeing if support | ||
38 | is available to put the DDR in self | ||
39 | refresh mode and any additional power | ||
40 | saving techniques for the specific SoC. | ||
41 | |||
42 | Example: | ||
43 | CPM0: cpm { | ||
44 | compatible = "ibm,cpm"; | ||
45 | dcr-access-method = "native"; | ||
46 | dcr-reg = <0x160 0x003>; | ||
47 | er-offset = <0>; | ||
48 | unused-units = <0x00000100>; | ||
49 | idle-doze = <0x02000000>; | ||
50 | standby = <0xfeff0000>; | ||
51 | suspend = <0xfeff791d>; | ||
52 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/4xx/emac.txt b/Documentation/devicetree/bindings/powerpc/4xx/emac.txt new file mode 100644 index 000000000000..2161334a7ca5 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/4xx/emac.txt | |||
@@ -0,0 +1,148 @@ | |||
1 | 4xx/Axon EMAC ethernet nodes | ||
2 | |||
3 | The EMAC ethernet controller in IBM and AMCC 4xx chips, and also | ||
4 | the Axon bridge. To operate this needs to interact with a ths | ||
5 | special McMAL DMA controller, and sometimes an RGMII or ZMII | ||
6 | interface. In addition to the nodes and properties described | ||
7 | below, the node for the OPB bus on which the EMAC sits must have a | ||
8 | correct clock-frequency property. | ||
9 | |||
10 | i) The EMAC node itself | ||
11 | |||
12 | Required properties: | ||
13 | - device_type : "network" | ||
14 | |||
15 | - compatible : compatible list, contains 2 entries, first is | ||
16 | "ibm,emac-CHIP" where CHIP is the host ASIC (440gx, | ||
17 | 405gp, Axon) and second is either "ibm,emac" or | ||
18 | "ibm,emac4". For Axon, thus, we have: "ibm,emac-axon", | ||
19 | "ibm,emac4" | ||
20 | - interrupts : <interrupt mapping for EMAC IRQ and WOL IRQ> | ||
21 | - interrupt-parent : optional, if needed for interrupt mapping | ||
22 | - reg : <registers mapping> | ||
23 | - local-mac-address : 6 bytes, MAC address | ||
24 | - mal-device : phandle of the associated McMAL node | ||
25 | - mal-tx-channel : 1 cell, index of the tx channel on McMAL associated | ||
26 | with this EMAC | ||
27 | - mal-rx-channel : 1 cell, index of the rx channel on McMAL associated | ||
28 | with this EMAC | ||
29 | - cell-index : 1 cell, hardware index of the EMAC cell on a given | ||
30 | ASIC (typically 0x0 and 0x1 for EMAC0 and EMAC1 on | ||
31 | each Axon chip) | ||
32 | - max-frame-size : 1 cell, maximum frame size supported in bytes | ||
33 | - rx-fifo-size : 1 cell, Rx fifo size in bytes for 10 and 100 Mb/sec | ||
34 | operations. | ||
35 | For Axon, 2048 | ||
36 | - tx-fifo-size : 1 cell, Tx fifo size in bytes for 10 and 100 Mb/sec | ||
37 | operations. | ||
38 | For Axon, 2048. | ||
39 | - fifo-entry-size : 1 cell, size of a fifo entry (used to calculate | ||
40 | thresholds). | ||
41 | For Axon, 0x00000010 | ||
42 | - mal-burst-size : 1 cell, MAL burst size (used to calculate thresholds) | ||
43 | in bytes. | ||
44 | For Axon, 0x00000100 (I think ...) | ||
45 | - phy-mode : string, mode of operations of the PHY interface. | ||
46 | Supported values are: "mii", "rmii", "smii", "rgmii", | ||
47 | "tbi", "gmii", rtbi", "sgmii". | ||
48 | For Axon on CAB, it is "rgmii" | ||
49 | - mdio-device : 1 cell, required iff using shared MDIO registers | ||
50 | (440EP). phandle of the EMAC to use to drive the | ||
51 | MDIO lines for the PHY used by this EMAC. | ||
52 | - zmii-device : 1 cell, required iff connected to a ZMII. phandle of | ||
53 | the ZMII device node | ||
54 | - zmii-channel : 1 cell, required iff connected to a ZMII. Which ZMII | ||
55 | channel or 0xffffffff if ZMII is only used for MDIO. | ||
56 | - rgmii-device : 1 cell, required iff connected to an RGMII. phandle | ||
57 | of the RGMII device node. | ||
58 | For Axon: phandle of plb5/plb4/opb/rgmii | ||
59 | - rgmii-channel : 1 cell, required iff connected to an RGMII. Which | ||
60 | RGMII channel is used by this EMAC. | ||
61 | Fox Axon: present, whatever value is appropriate for each | ||
62 | EMAC, that is the content of the current (bogus) "phy-port" | ||
63 | property. | ||
64 | |||
65 | Optional properties: | ||
66 | - phy-address : 1 cell, optional, MDIO address of the PHY. If absent, | ||
67 | a search is performed. | ||
68 | - phy-map : 1 cell, optional, bitmap of addresses to probe the PHY | ||
69 | for, used if phy-address is absent. bit 0x00000001 is | ||
70 | MDIO address 0. | ||
71 | For Axon it can be absent, though my current driver | ||
72 | doesn't handle phy-address yet so for now, keep | ||
73 | 0x00ffffff in it. | ||
74 | - rx-fifo-size-gige : 1 cell, Rx fifo size in bytes for 1000 Mb/sec | ||
75 | operations (if absent the value is the same as | ||
76 | rx-fifo-size). For Axon, either absent or 2048. | ||
77 | - tx-fifo-size-gige : 1 cell, Tx fifo size in bytes for 1000 Mb/sec | ||
78 | operations (if absent the value is the same as | ||
79 | tx-fifo-size). For Axon, either absent or 2048. | ||
80 | - tah-device : 1 cell, optional. If connected to a TAH engine for | ||
81 | offload, phandle of the TAH device node. | ||
82 | - tah-channel : 1 cell, optional. If appropriate, channel used on the | ||
83 | TAH engine. | ||
84 | |||
85 | Example: | ||
86 | |||
87 | EMAC0: ethernet@40000800 { | ||
88 | device_type = "network"; | ||
89 | compatible = "ibm,emac-440gp", "ibm,emac"; | ||
90 | interrupt-parent = <&UIC1>; | ||
91 | interrupts = <1c 4 1d 4>; | ||
92 | reg = <40000800 70>; | ||
93 | local-mac-address = [00 04 AC E3 1B 1E]; | ||
94 | mal-device = <&MAL0>; | ||
95 | mal-tx-channel = <0 1>; | ||
96 | mal-rx-channel = <0>; | ||
97 | cell-index = <0>; | ||
98 | max-frame-size = <5dc>; | ||
99 | rx-fifo-size = <1000>; | ||
100 | tx-fifo-size = <800>; | ||
101 | phy-mode = "rmii"; | ||
102 | phy-map = <00000001>; | ||
103 | zmii-device = <&ZMII0>; | ||
104 | zmii-channel = <0>; | ||
105 | }; | ||
106 | |||
107 | ii) McMAL node | ||
108 | |||
109 | Required properties: | ||
110 | - device_type : "dma-controller" | ||
111 | - compatible : compatible list, containing 2 entries, first is | ||
112 | "ibm,mcmal-CHIP" where CHIP is the host ASIC (like | ||
113 | emac) and the second is either "ibm,mcmal" or | ||
114 | "ibm,mcmal2". | ||
115 | For Axon, "ibm,mcmal-axon","ibm,mcmal2" | ||
116 | - interrupts : <interrupt mapping for the MAL interrupts sources: | ||
117 | 5 sources: tx_eob, rx_eob, serr, txde, rxde>. | ||
118 | For Axon: This is _different_ from the current | ||
119 | firmware. We use the "delayed" interrupts for txeob | ||
120 | and rxeob. Thus we end up with mapping those 5 MPIC | ||
121 | interrupts, all level positive sensitive: 10, 11, 32, | ||
122 | 33, 34 (in decimal) | ||
123 | - dcr-reg : < DCR registers range > | ||
124 | - dcr-parent : if needed for dcr-reg | ||
125 | - num-tx-chans : 1 cell, number of Tx channels | ||
126 | - num-rx-chans : 1 cell, number of Rx channels | ||
127 | |||
128 | iii) ZMII node | ||
129 | |||
130 | Required properties: | ||
131 | - compatible : compatible list, containing 2 entries, first is | ||
132 | "ibm,zmii-CHIP" where CHIP is the host ASIC (like | ||
133 | EMAC) and the second is "ibm,zmii". | ||
134 | For Axon, there is no ZMII node. | ||
135 | - reg : <registers mapping> | ||
136 | |||
137 | iv) RGMII node | ||
138 | |||
139 | Required properties: | ||
140 | - compatible : compatible list, containing 2 entries, first is | ||
141 | "ibm,rgmii-CHIP" where CHIP is the host ASIC (like | ||
142 | EMAC) and the second is "ibm,rgmii". | ||
143 | For Axon, "ibm,rgmii-axon","ibm,rgmii" | ||
144 | - reg : <registers mapping> | ||
145 | - revision : as provided by the RGMII new version register if | ||
146 | available. | ||
147 | For Axon: 0x0000012a | ||
148 | |||
diff --git a/Documentation/devicetree/bindings/powerpc/4xx/ndfc.txt b/Documentation/devicetree/bindings/powerpc/4xx/ndfc.txt new file mode 100644 index 000000000000..869f0b5f16e8 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/4xx/ndfc.txt | |||
@@ -0,0 +1,39 @@ | |||
1 | AMCC NDFC (NanD Flash Controller) | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : "ibm,ndfc". | ||
5 | - reg : should specify chip select and size used for the chip (0x2000). | ||
6 | |||
7 | Optional properties: | ||
8 | - ccr : NDFC config and control register value (default 0). | ||
9 | - bank-settings : NDFC bank configuration register value (default 0). | ||
10 | |||
11 | Notes: | ||
12 | - partition(s) - follows the OF MTD standard for partitions | ||
13 | |||
14 | Example: | ||
15 | |||
16 | ndfc@1,0 { | ||
17 | compatible = "ibm,ndfc"; | ||
18 | reg = <0x00000001 0x00000000 0x00002000>; | ||
19 | ccr = <0x00001000>; | ||
20 | bank-settings = <0x80002222>; | ||
21 | #address-cells = <1>; | ||
22 | #size-cells = <1>; | ||
23 | |||
24 | nand { | ||
25 | #address-cells = <1>; | ||
26 | #size-cells = <1>; | ||
27 | |||
28 | partition@0 { | ||
29 | label = "kernel"; | ||
30 | reg = <0x00000000 0x00200000>; | ||
31 | }; | ||
32 | partition@200000 { | ||
33 | label = "root"; | ||
34 | reg = <0x00200000 0x03E00000>; | ||
35 | }; | ||
36 | }; | ||
37 | }; | ||
38 | |||
39 | |||
diff --git a/Documentation/devicetree/bindings/powerpc/4xx/ppc440spe-adma.txt b/Documentation/devicetree/bindings/powerpc/4xx/ppc440spe-adma.txt new file mode 100644 index 000000000000..515ebcf1b97d --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/4xx/ppc440spe-adma.txt | |||
@@ -0,0 +1,93 @@ | |||
1 | PPC440SPe DMA/XOR (DMA Controller and XOR Accelerator) | ||
2 | |||
3 | Device nodes needed for operation of the ppc440spe-adma driver | ||
4 | are specified hereby. These are I2O/DMA, DMA and XOR nodes | ||
5 | for DMA engines and Memory Queue Module node. The latter is used | ||
6 | by ADMA driver for configuration of RAID-6 H/W capabilities of | ||
7 | the PPC440SPe. In addition to the nodes and properties described | ||
8 | below, the ranges property of PLB node must specify ranges for | ||
9 | DMA devices. | ||
10 | |||
11 | i) The I2O node | ||
12 | |||
13 | Required properties: | ||
14 | |||
15 | - compatible : "ibm,i2o-440spe"; | ||
16 | - reg : <registers mapping> | ||
17 | - dcr-reg : <DCR registers range> | ||
18 | |||
19 | Example: | ||
20 | |||
21 | I2O: i2o@400100000 { | ||
22 | compatible = "ibm,i2o-440spe"; | ||
23 | reg = <0x00000004 0x00100000 0x100>; | ||
24 | dcr-reg = <0x060 0x020>; | ||
25 | }; | ||
26 | |||
27 | |||
28 | ii) The DMA node | ||
29 | |||
30 | Required properties: | ||
31 | |||
32 | - compatible : "ibm,dma-440spe"; | ||
33 | - cell-index : 1 cell, hardware index of the DMA engine | ||
34 | (typically 0x0 and 0x1 for DMA0 and DMA1) | ||
35 | - reg : <registers mapping> | ||
36 | - dcr-reg : <DCR registers range> | ||
37 | - interrupts : <interrupt mapping for DMA0/1 interrupts sources: | ||
38 | 2 sources: DMAx CS FIFO Needs Service IRQ (on UIC0) | ||
39 | and DMA Error IRQ (on UIC1). The latter is common | ||
40 | for both DMA engines>. | ||
41 | - interrupt-parent : needed for interrupt mapping | ||
42 | |||
43 | Example: | ||
44 | |||
45 | DMA0: dma0@400100100 { | ||
46 | compatible = "ibm,dma-440spe"; | ||
47 | cell-index = <0>; | ||
48 | reg = <0x00000004 0x00100100 0x100>; | ||
49 | dcr-reg = <0x060 0x020>; | ||
50 | interrupt-parent = <&DMA0>; | ||
51 | interrupts = <0 1>; | ||
52 | #interrupt-cells = <1>; | ||
53 | #address-cells = <0>; | ||
54 | #size-cells = <0>; | ||
55 | interrupt-map = < | ||
56 | 0 &UIC0 0x14 4 | ||
57 | 1 &UIC1 0x16 4>; | ||
58 | }; | ||
59 | |||
60 | |||
61 | iii) XOR Accelerator node | ||
62 | |||
63 | Required properties: | ||
64 | |||
65 | - compatible : "amcc,xor-accelerator"; | ||
66 | - reg : <registers mapping> | ||
67 | - interrupts : <interrupt mapping for XOR interrupt source> | ||
68 | - interrupt-parent : for interrupt mapping | ||
69 | |||
70 | Example: | ||
71 | |||
72 | xor-accel@400200000 { | ||
73 | compatible = "amcc,xor-accelerator"; | ||
74 | reg = <0x00000004 0x00200000 0x400>; | ||
75 | interrupt-parent = <&UIC1>; | ||
76 | interrupts = <0x1f 4>; | ||
77 | }; | ||
78 | |||
79 | |||
80 | iv) Memory Queue Module node | ||
81 | |||
82 | Required properties: | ||
83 | |||
84 | - compatible : "ibm,mq-440spe"; | ||
85 | - dcr-reg : <DCR registers range> | ||
86 | |||
87 | Example: | ||
88 | |||
89 | MQ0: mq { | ||
90 | compatible = "ibm,mq-440spe"; | ||
91 | dcr-reg = <0x040 0x020>; | ||
92 | }; | ||
93 | |||
diff --git a/Documentation/devicetree/bindings/powerpc/4xx/reboot.txt b/Documentation/devicetree/bindings/powerpc/4xx/reboot.txt new file mode 100644 index 000000000000..d7217260589c --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/4xx/reboot.txt | |||
@@ -0,0 +1,18 @@ | |||
1 | Reboot property to control system reboot on PPC4xx systems: | ||
2 | |||
3 | By setting "reset_type" to one of the following values, the default | ||
4 | software reset mechanism may be overidden. Here the possible values of | ||
5 | "reset_type": | ||
6 | |||
7 | 1 - PPC4xx core reset | ||
8 | 2 - PPC4xx chip reset | ||
9 | 3 - PPC4xx system reset (default) | ||
10 | |||
11 | Example: | ||
12 | |||
13 | cpu@0 { | ||
14 | device_type = "cpu"; | ||
15 | model = "PowerPC,440SPe"; | ||
16 | ... | ||
17 | reset-type = <2>; /* Use chip-reset */ | ||
18 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/board.txt b/Documentation/devicetree/bindings/powerpc/fsl/board.txt new file mode 100644 index 000000000000..39e941515a36 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/board.txt | |||
@@ -0,0 +1,63 @@ | |||
1 | * Board Control and Status (BCSR) | ||
2 | |||
3 | Required properties: | ||
4 | |||
5 | - compatible : Should be "fsl,<board>-bcsr" | ||
6 | - reg : Offset and length of the register set for the device | ||
7 | |||
8 | Example: | ||
9 | |||
10 | bcsr@f8000000 { | ||
11 | compatible = "fsl,mpc8360mds-bcsr"; | ||
12 | reg = <f8000000 8000>; | ||
13 | }; | ||
14 | |||
15 | * Freescale on board FPGA | ||
16 | |||
17 | This is the memory-mapped registers for on board FPGA. | ||
18 | |||
19 | Required properities: | ||
20 | - compatible : should be "fsl,fpga-pixis". | ||
21 | - reg : should contain the address and the length of the FPPGA register | ||
22 | set. | ||
23 | - interrupt-parent: should specify phandle for the interrupt controller. | ||
24 | - interrupts : should specify event (wakeup) IRQ. | ||
25 | |||
26 | Example (MPC8610HPCD): | ||
27 | |||
28 | board-control@e8000000 { | ||
29 | compatible = "fsl,fpga-pixis"; | ||
30 | reg = <0xe8000000 32>; | ||
31 | interrupt-parent = <&mpic>; | ||
32 | interrupts = <8 8>; | ||
33 | }; | ||
34 | |||
35 | * Freescale BCSR GPIO banks | ||
36 | |||
37 | Some BCSR registers act as simple GPIO controllers, each such | ||
38 | register can be represented by the gpio-controller node. | ||
39 | |||
40 | Required properities: | ||
41 | - compatible : Should be "fsl,<board>-bcsr-gpio". | ||
42 | - reg : Should contain the address and the length of the GPIO bank | ||
43 | register. | ||
44 | - #gpio-cells : Should be two. The first cell is the pin number and the | ||
45 | second cell is used to specify optional parameters (currently unused). | ||
46 | - gpio-controller : Marks the port as GPIO controller. | ||
47 | |||
48 | Example: | ||
49 | |||
50 | bcsr@1,0 { | ||
51 | #address-cells = <1>; | ||
52 | #size-cells = <1>; | ||
53 | compatible = "fsl,mpc8360mds-bcsr"; | ||
54 | reg = <1 0 0x8000>; | ||
55 | ranges = <0 1 0 0x8000>; | ||
56 | |||
57 | bcsr13: gpio-controller@d { | ||
58 | #gpio-cells = <2>; | ||
59 | compatible = "fsl,mpc8360mds-bcsr-gpio"; | ||
60 | reg = <0xd 1>; | ||
61 | gpio-controller; | ||
62 | }; | ||
63 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm.txt new file mode 100644 index 000000000000..160c752484b4 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm.txt | |||
@@ -0,0 +1,67 @@ | |||
1 | * Freescale Communications Processor Module | ||
2 | |||
3 | NOTE: This is an interim binding, and will likely change slightly, | ||
4 | as more devices are supported. The QE bindings especially are | ||
5 | incomplete. | ||
6 | |||
7 | * Root CPM node | ||
8 | |||
9 | Properties: | ||
10 | - compatible : "fsl,cpm1", "fsl,cpm2", or "fsl,qe". | ||
11 | - reg : A 48-byte region beginning with CPCR. | ||
12 | |||
13 | Example: | ||
14 | cpm@119c0 { | ||
15 | #address-cells = <1>; | ||
16 | #size-cells = <1>; | ||
17 | #interrupt-cells = <2>; | ||
18 | compatible = "fsl,mpc8272-cpm", "fsl,cpm2"; | ||
19 | reg = <119c0 30>; | ||
20 | } | ||
21 | |||
22 | * Properties common to multiple CPM/QE devices | ||
23 | |||
24 | - fsl,cpm-command : This value is ORed with the opcode and command flag | ||
25 | to specify the device on which a CPM command operates. | ||
26 | |||
27 | - fsl,cpm-brg : Indicates which baud rate generator the device | ||
28 | is associated with. If absent, an unused BRG | ||
29 | should be dynamically allocated. If zero, the | ||
30 | device uses an external clock rather than a BRG. | ||
31 | |||
32 | - reg : Unless otherwise specified, the first resource represents the | ||
33 | scc/fcc/ucc registers, and the second represents the device's | ||
34 | parameter RAM region (if it has one). | ||
35 | |||
36 | * Multi-User RAM (MURAM) | ||
37 | |||
38 | The multi-user/dual-ported RAM is expressed as a bus under the CPM node. | ||
39 | |||
40 | Ranges must be set up subject to the following restrictions: | ||
41 | |||
42 | - Children's reg nodes must be offsets from the start of all muram, even | ||
43 | if the user-data area does not begin at zero. | ||
44 | - If multiple range entries are used, the difference between the parent | ||
45 | address and the child address must be the same in all, so that a single | ||
46 | mapping can cover them all while maintaining the ability to determine | ||
47 | CPM-side offsets with pointer subtraction. It is recommended that | ||
48 | multiple range entries not be used. | ||
49 | - A child address of zero must be translatable, even if no reg resources | ||
50 | contain it. | ||
51 | |||
52 | A child "data" node must exist, compatible with "fsl,cpm-muram-data", to | ||
53 | indicate the portion of muram that is usable by the OS for arbitrary | ||
54 | purposes. The data node may have an arbitrary number of reg resources, | ||
55 | all of which contribute to the allocatable muram pool. | ||
56 | |||
57 | Example, based on mpc8272: | ||
58 | muram@0 { | ||
59 | #address-cells = <1>; | ||
60 | #size-cells = <1>; | ||
61 | ranges = <0 0 10000>; | ||
62 | |||
63 | data@0 { | ||
64 | compatible = "fsl,cpm-muram-data"; | ||
65 | reg = <0 2000 9800 800>; | ||
66 | }; | ||
67 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/brg.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/brg.txt new file mode 100644 index 000000000000..4c7d45eaf025 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/brg.txt | |||
@@ -0,0 +1,21 @@ | |||
1 | * Baud Rate Generators | ||
2 | |||
3 | Currently defined compatibles: | ||
4 | fsl,cpm-brg | ||
5 | fsl,cpm1-brg | ||
6 | fsl,cpm2-brg | ||
7 | |||
8 | Properties: | ||
9 | - reg : There may be an arbitrary number of reg resources; BRG | ||
10 | numbers are assigned to these in order. | ||
11 | - clock-frequency : Specifies the base frequency driving | ||
12 | the BRG. | ||
13 | |||
14 | Example: | ||
15 | brg@119f0 { | ||
16 | compatible = "fsl,mpc8272-brg", | ||
17 | "fsl,cpm2-brg", | ||
18 | "fsl,cpm-brg"; | ||
19 | reg = <119f0 10 115f0 10>; | ||
20 | clock-frequency = <d#25000000>; | ||
21 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/i2c.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/i2c.txt new file mode 100644 index 000000000000..87bc6048667e --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/i2c.txt | |||
@@ -0,0 +1,41 @@ | |||
1 | * I2C | ||
2 | |||
3 | The I2C controller is expressed as a bus under the CPM node. | ||
4 | |||
5 | Properties: | ||
6 | - compatible : "fsl,cpm1-i2c", "fsl,cpm2-i2c" | ||
7 | - reg : On CPM2 devices, the second resource doesn't specify the I2C | ||
8 | Parameter RAM itself, but the I2C_BASE field of the CPM2 Parameter RAM | ||
9 | (typically 0x8afc 0x2). | ||
10 | - #address-cells : Should be one. The cell is the i2c device address with | ||
11 | the r/w bit set to zero. | ||
12 | - #size-cells : Should be zero. | ||
13 | - clock-frequency : Can be used to set the i2c clock frequency. If | ||
14 | unspecified, a default frequency of 60kHz is being used. | ||
15 | The following two properties are deprecated. They are only used by legacy | ||
16 | i2c drivers to find the bus to probe: | ||
17 | - linux,i2c-index : Can be used to hard code an i2c bus number. By default, | ||
18 | the bus number is dynamically assigned by the i2c core. | ||
19 | - linux,i2c-class : Can be used to override the i2c class. The class is used | ||
20 | by legacy i2c device drivers to find a bus in a specific context like | ||
21 | system management, video or sound. By default, I2C_CLASS_HWMON (1) is | ||
22 | being used. The definition of the classes can be found in | ||
23 | include/i2c/i2c.h | ||
24 | |||
25 | Example, based on mpc823: | ||
26 | |||
27 | i2c@860 { | ||
28 | compatible = "fsl,mpc823-i2c", | ||
29 | "fsl,cpm1-i2c"; | ||
30 | reg = <0x860 0x20 0x3c80 0x30>; | ||
31 | interrupts = <16>; | ||
32 | interrupt-parent = <&CPM_PIC>; | ||
33 | fsl,cpm-command = <0x10>; | ||
34 | #address-cells = <1>; | ||
35 | #size-cells = <0>; | ||
36 | |||
37 | rtc@68 { | ||
38 | compatible = "dallas,ds1307"; | ||
39 | reg = <0x68>; | ||
40 | }; | ||
41 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/pic.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/pic.txt new file mode 100644 index 000000000000..8e3ee1681618 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/pic.txt | |||
@@ -0,0 +1,18 @@ | |||
1 | * Interrupt Controllers | ||
2 | |||
3 | Currently defined compatibles: | ||
4 | - fsl,cpm1-pic | ||
5 | - only one interrupt cell | ||
6 | - fsl,pq1-pic | ||
7 | - fsl,cpm2-pic | ||
8 | - second interrupt cell is level/sense: | ||
9 | - 2 is falling edge | ||
10 | - 8 is active low | ||
11 | |||
12 | Example: | ||
13 | interrupt-controller@10c00 { | ||
14 | #interrupt-cells = <2>; | ||
15 | interrupt-controller; | ||
16 | reg = <10c00 80>; | ||
17 | compatible = "mpc8272-pic", "fsl,cpm2-pic"; | ||
18 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/usb.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/usb.txt new file mode 100644 index 000000000000..74bfda4bb824 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/usb.txt | |||
@@ -0,0 +1,15 @@ | |||
1 | * USB (Universal Serial Bus Controller) | ||
2 | |||
3 | Properties: | ||
4 | - compatible : "fsl,cpm1-usb", "fsl,cpm2-usb", "fsl,qe-usb" | ||
5 | |||
6 | Example: | ||
7 | usb@11bc0 { | ||
8 | #address-cells = <1>; | ||
9 | #size-cells = <0>; | ||
10 | compatible = "fsl,cpm2-usb"; | ||
11 | reg = <11b60 18 8b00 100>; | ||
12 | interrupts = <b 8>; | ||
13 | interrupt-parent = <&PIC>; | ||
14 | fsl,cpm-command = <2e600000>; | ||
15 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/gpio.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/gpio.txt new file mode 100644 index 000000000000..349f79fd7076 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/gpio.txt | |||
@@ -0,0 +1,38 @@ | |||
1 | Every GPIO controller node must have #gpio-cells property defined, | ||
2 | this information will be used to translate gpio-specifiers. | ||
3 | |||
4 | On CPM1 devices, all ports are using slightly different register layouts. | ||
5 | Ports A, C and D are 16bit ports and Ports B and E are 32bit ports. | ||
6 | |||
7 | On CPM2 devices, all ports are 32bit ports and use a common register layout. | ||
8 | |||
9 | Required properties: | ||
10 | - compatible : "fsl,cpm1-pario-bank-a", "fsl,cpm1-pario-bank-b", | ||
11 | "fsl,cpm1-pario-bank-c", "fsl,cpm1-pario-bank-d", | ||
12 | "fsl,cpm1-pario-bank-e", "fsl,cpm2-pario-bank" | ||
13 | - #gpio-cells : Should be two. The first cell is the pin number and the | ||
14 | second cell is used to specify optional parameters (currently unused). | ||
15 | - gpio-controller : Marks the port as GPIO controller. | ||
16 | |||
17 | Example of three SOC GPIO banks defined as gpio-controller nodes: | ||
18 | |||
19 | CPM1_PIO_A: gpio-controller@950 { | ||
20 | #gpio-cells = <2>; | ||
21 | compatible = "fsl,cpm1-pario-bank-a"; | ||
22 | reg = <0x950 0x10>; | ||
23 | gpio-controller; | ||
24 | }; | ||
25 | |||
26 | CPM1_PIO_B: gpio-controller@ab8 { | ||
27 | #gpio-cells = <2>; | ||
28 | compatible = "fsl,cpm1-pario-bank-b"; | ||
29 | reg = <0xab8 0x10>; | ||
30 | gpio-controller; | ||
31 | }; | ||
32 | |||
33 | CPM1_PIO_E: gpio-controller@ac8 { | ||
34 | #gpio-cells = <2>; | ||
35 | compatible = "fsl,cpm1-pario-bank-e"; | ||
36 | reg = <0xac8 0x18>; | ||
37 | gpio-controller; | ||
38 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt new file mode 100644 index 000000000000..0e4269446580 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt | |||
@@ -0,0 +1,45 @@ | |||
1 | * Network | ||
2 | |||
3 | Currently defined compatibles: | ||
4 | - fsl,cpm1-scc-enet | ||
5 | - fsl,cpm2-scc-enet | ||
6 | - fsl,cpm1-fec-enet | ||
7 | - fsl,cpm2-fcc-enet (third resource is GFEMR) | ||
8 | - fsl,qe-enet | ||
9 | |||
10 | Example: | ||
11 | |||
12 | ethernet@11300 { | ||
13 | device_type = "network"; | ||
14 | compatible = "fsl,mpc8272-fcc-enet", | ||
15 | "fsl,cpm2-fcc-enet"; | ||
16 | reg = <11300 20 8400 100 11390 1>; | ||
17 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
18 | interrupts = <20 8>; | ||
19 | interrupt-parent = <&PIC>; | ||
20 | phy-handle = <&PHY0>; | ||
21 | fsl,cpm-command = <12000300>; | ||
22 | }; | ||
23 | |||
24 | * MDIO | ||
25 | |||
26 | Currently defined compatibles: | ||
27 | fsl,pq1-fec-mdio (reg is same as first resource of FEC device) | ||
28 | fsl,cpm2-mdio-bitbang (reg is port C registers) | ||
29 | |||
30 | Properties for fsl,cpm2-mdio-bitbang: | ||
31 | fsl,mdio-pin : pin of port C controlling mdio data | ||
32 | fsl,mdc-pin : pin of port C controlling mdio clock | ||
33 | |||
34 | Example: | ||
35 | mdio@10d40 { | ||
36 | device_type = "mdio"; | ||
37 | compatible = "fsl,mpc8272ads-mdio-bitbang", | ||
38 | "fsl,mpc8272-mdio-bitbang", | ||
39 | "fsl,cpm2-mdio-bitbang"; | ||
40 | reg = <10d40 14>; | ||
41 | #address-cells = <1>; | ||
42 | #size-cells = <0>; | ||
43 | fsl,mdio-pin = <12>; | ||
44 | fsl,mdc-pin = <13>; | ||
45 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe.txt new file mode 100644 index 000000000000..4f8930263dd9 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe.txt | |||
@@ -0,0 +1,115 @@ | |||
1 | * Freescale QUICC Engine module (QE) | ||
2 | This represents qe module that is installed on PowerQUICC II Pro. | ||
3 | |||
4 | NOTE: This is an interim binding; it should be updated to fit | ||
5 | in with the CPM binding later in this document. | ||
6 | |||
7 | Basically, it is a bus of devices, that could act more or less | ||
8 | as a complete entity (UCC, USB etc ). All of them should be siblings on | ||
9 | the "root" qe node, using the common properties from there. | ||
10 | The description below applies to the qe of MPC8360 and | ||
11 | more nodes and properties would be extended in the future. | ||
12 | |||
13 | i) Root QE device | ||
14 | |||
15 | Required properties: | ||
16 | - compatible : should be "fsl,qe"; | ||
17 | - model : precise model of the QE, Can be "QE", "CPM", or "CPM2" | ||
18 | - reg : offset and length of the device registers. | ||
19 | - bus-frequency : the clock frequency for QUICC Engine. | ||
20 | - fsl,qe-num-riscs: define how many RISC engines the QE has. | ||
21 | - fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the | ||
22 | threads. | ||
23 | |||
24 | Optional properties: | ||
25 | - fsl,firmware-phandle: | ||
26 | Usage: required only if there is no fsl,qe-firmware child node | ||
27 | Value type: <phandle> | ||
28 | Definition: Points to a firmware node (see "QE Firmware Node" below) | ||
29 | that contains the firmware that should be uploaded for this QE. | ||
30 | The compatible property for the firmware node should say, | ||
31 | "fsl,qe-firmware". | ||
32 | |||
33 | Recommended properties | ||
34 | - brg-frequency : the internal clock source frequency for baud-rate | ||
35 | generators in Hz. | ||
36 | |||
37 | Example: | ||
38 | qe@e0100000 { | ||
39 | #address-cells = <1>; | ||
40 | #size-cells = <1>; | ||
41 | #interrupt-cells = <2>; | ||
42 | compatible = "fsl,qe"; | ||
43 | ranges = <0 e0100000 00100000>; | ||
44 | reg = <e0100000 480>; | ||
45 | brg-frequency = <0>; | ||
46 | bus-frequency = <179A7B00>; | ||
47 | } | ||
48 | |||
49 | * Multi-User RAM (MURAM) | ||
50 | |||
51 | Required properties: | ||
52 | - compatible : should be "fsl,qe-muram", "fsl,cpm-muram". | ||
53 | - mode : the could be "host" or "slave". | ||
54 | - ranges : Should be defined as specified in 1) to describe the | ||
55 | translation of MURAM addresses. | ||
56 | - data-only : sub-node which defines the address area under MURAM | ||
57 | bus that can be allocated as data/parameter | ||
58 | |||
59 | Example: | ||
60 | |||
61 | muram@10000 { | ||
62 | compatible = "fsl,qe-muram", "fsl,cpm-muram"; | ||
63 | ranges = <0 00010000 0000c000>; | ||
64 | |||
65 | data-only@0{ | ||
66 | compatible = "fsl,qe-muram-data", | ||
67 | "fsl,cpm-muram-data"; | ||
68 | reg = <0 c000>; | ||
69 | }; | ||
70 | }; | ||
71 | |||
72 | * QE Firmware Node | ||
73 | |||
74 | This node defines a firmware binary that is embedded in the device tree, for | ||
75 | the purpose of passing the firmware from bootloader to the kernel, or from | ||
76 | the hypervisor to the guest. | ||
77 | |||
78 | The firmware node itself contains the firmware binary contents, a compatible | ||
79 | property, and any firmware-specific properties. The node should be placed | ||
80 | inside a QE node that needs it. Doing so eliminates the need for a | ||
81 | fsl,firmware-phandle property. Other QE nodes that need the same firmware | ||
82 | should define an fsl,firmware-phandle property that points to the firmware node | ||
83 | in the first QE node. | ||
84 | |||
85 | The fsl,firmware property can be specified in the DTS (possibly using incbin) | ||
86 | or can be inserted by the boot loader at boot time. | ||
87 | |||
88 | Required properties: | ||
89 | - compatible | ||
90 | Usage: required | ||
91 | Value type: <string> | ||
92 | Definition: A standard property. Specify a string that indicates what | ||
93 | kind of firmware it is. For QE, this should be "fsl,qe-firmware". | ||
94 | |||
95 | - fsl,firmware | ||
96 | Usage: required | ||
97 | Value type: <prop-encoded-array>, encoded as an array of bytes | ||
98 | Definition: A standard property. This property contains the firmware | ||
99 | binary "blob". | ||
100 | |||
101 | Example: | ||
102 | qe1@e0080000 { | ||
103 | compatible = "fsl,qe"; | ||
104 | qe_firmware:qe-firmware { | ||
105 | compatible = "fsl,qe-firmware"; | ||
106 | fsl,firmware = [0x70 0xcd 0x00 0x00 0x01 0x46 0x45 ...]; | ||
107 | }; | ||
108 | ... | ||
109 | }; | ||
110 | |||
111 | qe2@e0090000 { | ||
112 | compatible = "fsl,qe"; | ||
113 | fsl,firmware-phandle = <&qe_firmware>; | ||
114 | ... | ||
115 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/firmware.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/firmware.txt new file mode 100644 index 000000000000..249db3a15d15 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/firmware.txt | |||
@@ -0,0 +1,24 @@ | |||
1 | * Uploaded QE firmware | ||
2 | |||
3 | If a new firmware has been uploaded to the QE (usually by the | ||
4 | boot loader), then a 'firmware' child node should be added to the QE | ||
5 | node. This node provides information on the uploaded firmware that | ||
6 | device drivers may need. | ||
7 | |||
8 | Required properties: | ||
9 | - id: The string name of the firmware. This is taken from the 'id' | ||
10 | member of the qe_firmware structure of the uploaded firmware. | ||
11 | Device drivers can search this string to determine if the | ||
12 | firmware they want is already present. | ||
13 | - extended-modes: The Extended Modes bitfield, taken from the | ||
14 | firmware binary. It is a 64-bit number represented | ||
15 | as an array of two 32-bit numbers. | ||
16 | - virtual-traps: The virtual traps, taken from the firmware binary. | ||
17 | It is an array of 8 32-bit numbers. | ||
18 | |||
19 | Example: | ||
20 | firmware { | ||
21 | id = "Soft-UART"; | ||
22 | extended-modes = <0 0>; | ||
23 | virtual-traps = <0 0 0 0 0 0 0 0>; | ||
24 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/par_io.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/par_io.txt new file mode 100644 index 000000000000..60984260207b --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/par_io.txt | |||
@@ -0,0 +1,51 @@ | |||
1 | * Parallel I/O Ports | ||
2 | |||
3 | This node configures Parallel I/O ports for CPUs with QE support. | ||
4 | The node should reside in the "soc" node of the tree. For each | ||
5 | device that using parallel I/O ports, a child node should be created. | ||
6 | See the definition of the Pin configuration nodes below for more | ||
7 | information. | ||
8 | |||
9 | Required properties: | ||
10 | - device_type : should be "par_io". | ||
11 | - reg : offset to the register set and its length. | ||
12 | - num-ports : number of Parallel I/O ports | ||
13 | |||
14 | Example: | ||
15 | par_io@1400 { | ||
16 | reg = <1400 100>; | ||
17 | #address-cells = <1>; | ||
18 | #size-cells = <0>; | ||
19 | device_type = "par_io"; | ||
20 | num-ports = <7>; | ||
21 | ucc_pin@01 { | ||
22 | ...... | ||
23 | }; | ||
24 | |||
25 | Note that "par_io" nodes are obsolete, and should not be used for | ||
26 | the new device trees. Instead, each Par I/O bank should be represented | ||
27 | via its own gpio-controller node: | ||
28 | |||
29 | Required properties: | ||
30 | - #gpio-cells : should be "2". | ||
31 | - compatible : should be "fsl,<chip>-qe-pario-bank", | ||
32 | "fsl,mpc8323-qe-pario-bank". | ||
33 | - reg : offset to the register set and its length. | ||
34 | - gpio-controller : node to identify gpio controllers. | ||
35 | |||
36 | Example: | ||
37 | qe_pio_a: gpio-controller@1400 { | ||
38 | #gpio-cells = <2>; | ||
39 | compatible = "fsl,mpc8360-qe-pario-bank", | ||
40 | "fsl,mpc8323-qe-pario-bank"; | ||
41 | reg = <0x1400 0x18>; | ||
42 | gpio-controller; | ||
43 | }; | ||
44 | |||
45 | qe_pio_e: gpio-controller@1460 { | ||
46 | #gpio-cells = <2>; | ||
47 | compatible = "fsl,mpc8360-qe-pario-bank", | ||
48 | "fsl,mpc8323-qe-pario-bank"; | ||
49 | reg = <0x1460 0x18>; | ||
50 | gpio-controller; | ||
51 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/pincfg.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/pincfg.txt new file mode 100644 index 000000000000..c5b43061db3a --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/pincfg.txt | |||
@@ -0,0 +1,60 @@ | |||
1 | * Pin configuration nodes | ||
2 | |||
3 | Required properties: | ||
4 | - linux,phandle : phandle of this node; likely referenced by a QE | ||
5 | device. | ||
6 | - pio-map : array of pin configurations. Each pin is defined by 6 | ||
7 | integers. The six numbers are respectively: port, pin, dir, | ||
8 | open_drain, assignment, has_irq. | ||
9 | - port : port number of the pin; 0-6 represent port A-G in UM. | ||
10 | - pin : pin number in the port. | ||
11 | - dir : direction of the pin, should encode as follows: | ||
12 | |||
13 | 0 = The pin is disabled | ||
14 | 1 = The pin is an output | ||
15 | 2 = The pin is an input | ||
16 | 3 = The pin is I/O | ||
17 | |||
18 | - open_drain : indicates the pin is normal or wired-OR: | ||
19 | |||
20 | 0 = The pin is actively driven as an output | ||
21 | 1 = The pin is an open-drain driver. As an output, the pin is | ||
22 | driven active-low, otherwise it is three-stated. | ||
23 | |||
24 | - assignment : function number of the pin according to the Pin Assignment | ||
25 | tables in User Manual. Each pin can have up to 4 possible functions in | ||
26 | QE and two options for CPM. | ||
27 | - has_irq : indicates if the pin is used as source of external | ||
28 | interrupts. | ||
29 | |||
30 | Example: | ||
31 | ucc_pin@01 { | ||
32 | linux,phandle = <140001>; | ||
33 | pio-map = < | ||
34 | /* port pin dir open_drain assignment has_irq */ | ||
35 | 0 3 1 0 1 0 /* TxD0 */ | ||
36 | 0 4 1 0 1 0 /* TxD1 */ | ||
37 | 0 5 1 0 1 0 /* TxD2 */ | ||
38 | 0 6 1 0 1 0 /* TxD3 */ | ||
39 | 1 6 1 0 3 0 /* TxD4 */ | ||
40 | 1 7 1 0 1 0 /* TxD5 */ | ||
41 | 1 9 1 0 2 0 /* TxD6 */ | ||
42 | 1 a 1 0 2 0 /* TxD7 */ | ||
43 | 0 9 2 0 1 0 /* RxD0 */ | ||
44 | 0 a 2 0 1 0 /* RxD1 */ | ||
45 | 0 b 2 0 1 0 /* RxD2 */ | ||
46 | 0 c 2 0 1 0 /* RxD3 */ | ||
47 | 0 d 2 0 1 0 /* RxD4 */ | ||
48 | 1 1 2 0 2 0 /* RxD5 */ | ||
49 | 1 0 2 0 2 0 /* RxD6 */ | ||
50 | 1 4 2 0 2 0 /* RxD7 */ | ||
51 | 0 7 1 0 1 0 /* TX_EN */ | ||
52 | 0 8 1 0 1 0 /* TX_ER */ | ||
53 | 0 f 2 0 1 0 /* RX_DV */ | ||
54 | 0 10 2 0 1 0 /* RX_ER */ | ||
55 | 0 0 2 0 1 0 /* RX_CLK */ | ||
56 | 2 9 1 0 3 0 /* GTX_CLK - CLK10 */ | ||
57 | 2 8 2 0 1 0>; /* GTX125 - CLK9 */ | ||
58 | }; | ||
59 | |||
60 | |||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/ucc.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/ucc.txt new file mode 100644 index 000000000000..e47734bee3f0 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/ucc.txt | |||
@@ -0,0 +1,70 @@ | |||
1 | * UCC (Unified Communications Controllers) | ||
2 | |||
3 | Required properties: | ||
4 | - device_type : should be "network", "hldc", "uart", "transparent" | ||
5 | "bisync", "atm", or "serial". | ||
6 | - compatible : could be "ucc_geth" or "fsl_atm" and so on. | ||
7 | - cell-index : the ucc number(1-8), corresponding to UCCx in UM. | ||
8 | - reg : Offset and length of the register set for the device | ||
9 | - interrupts : <a b> where a is the interrupt number and b is a | ||
10 | field that represents an encoding of the sense and level | ||
11 | information for the interrupt. This should be encoded based on | ||
12 | the information in section 2) depending on the type of interrupt | ||
13 | controller you have. | ||
14 | - interrupt-parent : the phandle for the interrupt controller that | ||
15 | services interrupts for this device. | ||
16 | - pio-handle : The phandle for the Parallel I/O port configuration. | ||
17 | - port-number : for UART drivers, the port number to use, between 0 and 3. | ||
18 | This usually corresponds to the /dev/ttyQE device, e.g. <0> = /dev/ttyQE0. | ||
19 | The port number is added to the minor number of the device. Unlike the | ||
20 | CPM UART driver, the port-number is required for the QE UART driver. | ||
21 | - soft-uart : for UART drivers, if specified this means the QE UART device | ||
22 | driver should use "Soft-UART" mode, which is needed on some SOCs that have | ||
23 | broken UART hardware. Soft-UART is provided via a microcode upload. | ||
24 | - rx-clock-name: the UCC receive clock source | ||
25 | "none": clock source is disabled | ||
26 | "brg1" through "brg16": clock source is BRG1-BRG16, respectively | ||
27 | "clk1" through "clk24": clock source is CLK1-CLK24, respectively | ||
28 | - tx-clock-name: the UCC transmit clock source | ||
29 | "none": clock source is disabled | ||
30 | "brg1" through "brg16": clock source is BRG1-BRG16, respectively | ||
31 | "clk1" through "clk24": clock source is CLK1-CLK24, respectively | ||
32 | The following two properties are deprecated. rx-clock has been replaced | ||
33 | with rx-clock-name, and tx-clock has been replaced with tx-clock-name. | ||
34 | Drivers that currently use the deprecated properties should continue to | ||
35 | do so, in order to support older device trees, but they should be updated | ||
36 | to check for the new properties first. | ||
37 | - rx-clock : represents the UCC receive clock source. | ||
38 | 0x00 : clock source is disabled; | ||
39 | 0x1~0x10 : clock source is BRG1~BRG16 respectively; | ||
40 | 0x11~0x28: clock source is QE_CLK1~QE_CLK24 respectively. | ||
41 | - tx-clock: represents the UCC transmit clock source; | ||
42 | 0x00 : clock source is disabled; | ||
43 | 0x1~0x10 : clock source is BRG1~BRG16 respectively; | ||
44 | 0x11~0x28: clock source is QE_CLK1~QE_CLK24 respectively. | ||
45 | |||
46 | Required properties for network device_type: | ||
47 | - mac-address : list of bytes representing the ethernet address. | ||
48 | - phy-handle : The phandle for the PHY connected to this controller. | ||
49 | |||
50 | Recommended properties: | ||
51 | - phy-connection-type : a string naming the controller/PHY interface type, | ||
52 | i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id" (Internal | ||
53 | Delay), "rgmii-txid" (delay on TX only), "rgmii-rxid" (delay on RX only), | ||
54 | "tbi", or "rtbi". | ||
55 | |||
56 | Example: | ||
57 | ucc@2000 { | ||
58 | device_type = "network"; | ||
59 | compatible = "ucc_geth"; | ||
60 | cell-index = <1>; | ||
61 | reg = <2000 200>; | ||
62 | interrupts = <a0 0>; | ||
63 | interrupt-parent = <700>; | ||
64 | mac-address = [ 00 04 9f 00 23 23 ]; | ||
65 | rx-clock = "none"; | ||
66 | tx-clock = "clk9"; | ||
67 | phy-handle = <212000>; | ||
68 | phy-connection-type = "gmii"; | ||
69 | pio-handle = <140001>; | ||
70 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/usb.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/usb.txt new file mode 100644 index 000000000000..9ccd5f30405b --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/usb.txt | |||
@@ -0,0 +1,37 @@ | |||
1 | Freescale QUICC Engine USB Controller | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : should be "fsl,<chip>-qe-usb", "fsl,mpc8323-qe-usb". | ||
5 | - reg : the first two cells should contain usb registers location and | ||
6 | length, the next two two cells should contain PRAM location and | ||
7 | length. | ||
8 | - interrupts : should contain USB interrupt. | ||
9 | - interrupt-parent : interrupt source phandle. | ||
10 | - fsl,fullspeed-clock : specifies the full speed USB clock source: | ||
11 | "none": clock source is disabled | ||
12 | "brg1" through "brg16": clock source is BRG1-BRG16, respectively | ||
13 | "clk1" through "clk24": clock source is CLK1-CLK24, respectively | ||
14 | - fsl,lowspeed-clock : specifies the low speed USB clock source: | ||
15 | "none": clock source is disabled | ||
16 | "brg1" through "brg16": clock source is BRG1-BRG16, respectively | ||
17 | "clk1" through "clk24": clock source is CLK1-CLK24, respectively | ||
18 | - hub-power-budget : USB power budget for the root hub, in mA. | ||
19 | - gpios : should specify GPIOs in this order: USBOE, USBTP, USBTN, USBRP, | ||
20 | USBRN, SPEED (optional), and POWER (optional). | ||
21 | |||
22 | Example: | ||
23 | |||
24 | usb@6c0 { | ||
25 | compatible = "fsl,mpc8360-qe-usb", "fsl,mpc8323-qe-usb"; | ||
26 | reg = <0x6c0 0x40 0x8b00 0x100>; | ||
27 | interrupts = <11>; | ||
28 | interrupt-parent = <&qeic>; | ||
29 | fsl,fullspeed-clock = "clk21"; | ||
30 | gpios = <&qe_pio_b 2 0 /* USBOE */ | ||
31 | &qe_pio_b 3 0 /* USBTP */ | ||
32 | &qe_pio_b 8 0 /* USBTN */ | ||
33 | &qe_pio_b 9 0 /* USBRP */ | ||
34 | &qe_pio_b 11 0 /* USBRN */ | ||
35 | &qe_pio_e 20 0 /* SPEED */ | ||
36 | &qe_pio_e 21 0 /* POWER */>; | ||
37 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/serial.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/serial.txt new file mode 100644 index 000000000000..2ea76d9d137c --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/serial.txt | |||
@@ -0,0 +1,32 @@ | |||
1 | * Serial | ||
2 | |||
3 | Currently defined compatibles: | ||
4 | - fsl,cpm1-smc-uart | ||
5 | - fsl,cpm2-smc-uart | ||
6 | - fsl,cpm1-scc-uart | ||
7 | - fsl,cpm2-scc-uart | ||
8 | - fsl,qe-uart | ||
9 | |||
10 | Modem control lines connected to GPIO controllers are listed in the gpios | ||
11 | property as described in booting-without-of.txt, section IX.1 in the following | ||
12 | order: | ||
13 | |||
14 | CTS, RTS, DCD, DSR, DTR, and RI. | ||
15 | |||
16 | The gpios property is optional and can be left out when control lines are | ||
17 | not used. | ||
18 | |||
19 | Example: | ||
20 | |||
21 | serial@11a00 { | ||
22 | device_type = "serial"; | ||
23 | compatible = "fsl,mpc8272-scc-uart", | ||
24 | "fsl,cpm2-scc-uart"; | ||
25 | reg = <11a00 20 8000 100>; | ||
26 | interrupts = <28 8>; | ||
27 | interrupt-parent = <&PIC>; | ||
28 | fsl,cpm-brg = <1>; | ||
29 | fsl,cpm-command = <00800000>; | ||
30 | gpios = <&gpio_c 15 0 | ||
31 | &gpio_d 29 0>; | ||
32 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/diu.txt b/Documentation/devicetree/bindings/powerpc/fsl/diu.txt new file mode 100644 index 000000000000..b66cb6d31d69 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/diu.txt | |||
@@ -0,0 +1,34 @@ | |||
1 | * Freescale Display Interface Unit | ||
2 | |||
3 | The Freescale DIU is a LCD controller, with proper hardware, it can also | ||
4 | drive DVI monitors. | ||
5 | |||
6 | Required properties: | ||
7 | - compatible : should be "fsl,diu" or "fsl,mpc5121-diu". | ||
8 | - reg : should contain at least address and length of the DIU register | ||
9 | set. | ||
10 | - interrupts : one DIU interrupt should be described here. | ||
11 | - interrupt-parent : the phandle for the interrupt controller that | ||
12 | services interrupts for this device. | ||
13 | |||
14 | Optional properties: | ||
15 | - edid : verbatim EDID data block describing attached display. | ||
16 | Data from the detailed timing descriptor will be used to | ||
17 | program the display controller. | ||
18 | |||
19 | Example (MPC8610HPCD): | ||
20 | display@2c000 { | ||
21 | compatible = "fsl,diu"; | ||
22 | reg = <0x2c000 100>; | ||
23 | interrupts = <72 2>; | ||
24 | interrupt-parent = <&mpic>; | ||
25 | }; | ||
26 | |||
27 | Example for MPC5121: | ||
28 | display@2100 { | ||
29 | compatible = "fsl,mpc5121-diu"; | ||
30 | reg = <0x2100 0x100>; | ||
31 | interrupts = <64 0x8>; | ||
32 | interrupt-parent = <&ipic>; | ||
33 | edid = [edid-data]; | ||
34 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/dma.txt b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt new file mode 100644 index 000000000000..2a4b4bce6110 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt | |||
@@ -0,0 +1,144 @@ | |||
1 | * Freescale 83xx DMA Controller | ||
2 | |||
3 | Freescale PowerPC 83xx have on chip general purpose DMA controllers. | ||
4 | |||
5 | Required properties: | ||
6 | |||
7 | - compatible : compatible list, contains 2 entries, first is | ||
8 | "fsl,CHIP-dma", where CHIP is the processor | ||
9 | (mpc8349, mpc8360, etc.) and the second is | ||
10 | "fsl,elo-dma" | ||
11 | - reg : <registers mapping for DMA general status reg> | ||
12 | - ranges : Should be defined as specified in 1) to describe the | ||
13 | DMA controller channels. | ||
14 | - cell-index : controller index. 0 for controller @ 0x8100 | ||
15 | - interrupts : <interrupt mapping for DMA IRQ> | ||
16 | - interrupt-parent : optional, if needed for interrupt mapping | ||
17 | |||
18 | |||
19 | - DMA channel nodes: | ||
20 | - compatible : compatible list, contains 2 entries, first is | ||
21 | "fsl,CHIP-dma-channel", where CHIP is the processor | ||
22 | (mpc8349, mpc8350, etc.) and the second is | ||
23 | "fsl,elo-dma-channel". However, see note below. | ||
24 | - reg : <registers mapping for channel> | ||
25 | - cell-index : dma channel index starts at 0. | ||
26 | |||
27 | Optional properties: | ||
28 | - interrupts : <interrupt mapping for DMA channel IRQ> | ||
29 | (on 83xx this is expected to be identical to | ||
30 | the interrupts property of the parent node) | ||
31 | - interrupt-parent : optional, if needed for interrupt mapping | ||
32 | |||
33 | Example: | ||
34 | dma@82a8 { | ||
35 | #address-cells = <1>; | ||
36 | #size-cells = <1>; | ||
37 | compatible = "fsl,mpc8349-dma", "fsl,elo-dma"; | ||
38 | reg = <0x82a8 4>; | ||
39 | ranges = <0 0x8100 0x1a4>; | ||
40 | interrupt-parent = <&ipic>; | ||
41 | interrupts = <71 8>; | ||
42 | cell-index = <0>; | ||
43 | dma-channel@0 { | ||
44 | compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel"; | ||
45 | cell-index = <0>; | ||
46 | reg = <0 0x80>; | ||
47 | interrupt-parent = <&ipic>; | ||
48 | interrupts = <71 8>; | ||
49 | }; | ||
50 | dma-channel@80 { | ||
51 | compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel"; | ||
52 | cell-index = <1>; | ||
53 | reg = <0x80 0x80>; | ||
54 | interrupt-parent = <&ipic>; | ||
55 | interrupts = <71 8>; | ||
56 | }; | ||
57 | dma-channel@100 { | ||
58 | compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel"; | ||
59 | cell-index = <2>; | ||
60 | reg = <0x100 0x80>; | ||
61 | interrupt-parent = <&ipic>; | ||
62 | interrupts = <71 8>; | ||
63 | }; | ||
64 | dma-channel@180 { | ||
65 | compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel"; | ||
66 | cell-index = <3>; | ||
67 | reg = <0x180 0x80>; | ||
68 | interrupt-parent = <&ipic>; | ||
69 | interrupts = <71 8>; | ||
70 | }; | ||
71 | }; | ||
72 | |||
73 | * Freescale 85xx/86xx DMA Controller | ||
74 | |||
75 | Freescale PowerPC 85xx/86xx have on chip general purpose DMA controllers. | ||
76 | |||
77 | Required properties: | ||
78 | |||
79 | - compatible : compatible list, contains 2 entries, first is | ||
80 | "fsl,CHIP-dma", where CHIP is the processor | ||
81 | (mpc8540, mpc8540, etc.) and the second is | ||
82 | "fsl,eloplus-dma" | ||
83 | - reg : <registers mapping for DMA general status reg> | ||
84 | - cell-index : controller index. 0 for controller @ 0x21000, | ||
85 | 1 for controller @ 0xc000 | ||
86 | - ranges : Should be defined as specified in 1) to describe the | ||
87 | DMA controller channels. | ||
88 | |||
89 | - DMA channel nodes: | ||
90 | - compatible : compatible list, contains 2 entries, first is | ||
91 | "fsl,CHIP-dma-channel", where CHIP is the processor | ||
92 | (mpc8540, mpc8560, etc.) and the second is | ||
93 | "fsl,eloplus-dma-channel". However, see note below. | ||
94 | - cell-index : dma channel index starts at 0. | ||
95 | - reg : <registers mapping for channel> | ||
96 | - interrupts : <interrupt mapping for DMA channel IRQ> | ||
97 | - interrupt-parent : optional, if needed for interrupt mapping | ||
98 | |||
99 | Example: | ||
100 | dma@21300 { | ||
101 | #address-cells = <1>; | ||
102 | #size-cells = <1>; | ||
103 | compatible = "fsl,mpc8540-dma", "fsl,eloplus-dma"; | ||
104 | reg = <0x21300 4>; | ||
105 | ranges = <0 0x21100 0x200>; | ||
106 | cell-index = <0>; | ||
107 | dma-channel@0 { | ||
108 | compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel"; | ||
109 | reg = <0 0x80>; | ||
110 | cell-index = <0>; | ||
111 | interrupt-parent = <&mpic>; | ||
112 | interrupts = <20 2>; | ||
113 | }; | ||
114 | dma-channel@80 { | ||
115 | compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel"; | ||
116 | reg = <0x80 0x80>; | ||
117 | cell-index = <1>; | ||
118 | interrupt-parent = <&mpic>; | ||
119 | interrupts = <21 2>; | ||
120 | }; | ||
121 | dma-channel@100 { | ||
122 | compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel"; | ||
123 | reg = <0x100 0x80>; | ||
124 | cell-index = <2>; | ||
125 | interrupt-parent = <&mpic>; | ||
126 | interrupts = <22 2>; | ||
127 | }; | ||
128 | dma-channel@180 { | ||
129 | compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel"; | ||
130 | reg = <0x180 0x80>; | ||
131 | cell-index = <3>; | ||
132 | interrupt-parent = <&mpic>; | ||
133 | interrupts = <23 2>; | ||
134 | }; | ||
135 | }; | ||
136 | |||
137 | Note on DMA channel compatible properties: The compatible property must say | ||
138 | "fsl,elo-dma-channel" or "fsl,eloplus-dma-channel" to be used by the Elo DMA | ||
139 | driver (fsldma). Any DMA channel used by fsldma cannot be used by another | ||
140 | DMA driver, such as the SSI sound drivers for the MPC8610. Therefore, any DMA | ||
141 | channel that should be used for another driver should not use | ||
142 | "fsl,elo-dma-channel" or "fsl,eloplus-dma-channel". For the SSI drivers, for | ||
143 | example, the compatible property should be "fsl,ssi-dma-channel". See ssi.txt | ||
144 | for more information. | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/ecm.txt b/Documentation/devicetree/bindings/powerpc/fsl/ecm.txt new file mode 100644 index 000000000000..f514f29c67d6 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/ecm.txt | |||
@@ -0,0 +1,64 @@ | |||
1 | ===================================================================== | ||
2 | E500 LAW & Coherency Module Device Tree Binding | ||
3 | Copyright (C) 2009 Freescale Semiconductor Inc. | ||
4 | ===================================================================== | ||
5 | |||
6 | Local Access Window (LAW) Node | ||
7 | |||
8 | The LAW node represents the region of CCSR space where local access | ||
9 | windows are configured. For ECM based devices this is the first 4k | ||
10 | of CCSR space that includes CCSRBAR, ALTCBAR, ALTCAR, BPTR, and some | ||
11 | number of local access windows as specified by fsl,num-laws. | ||
12 | |||
13 | PROPERTIES | ||
14 | |||
15 | - compatible | ||
16 | Usage: required | ||
17 | Value type: <string> | ||
18 | Definition: Must include "fsl,ecm-law" | ||
19 | |||
20 | - reg | ||
21 | Usage: required | ||
22 | Value type: <prop-encoded-array> | ||
23 | Definition: A standard property. The value specifies the | ||
24 | physical address offset and length of the CCSR space | ||
25 | registers. | ||
26 | |||
27 | - fsl,num-laws | ||
28 | Usage: required | ||
29 | Value type: <u32> | ||
30 | Definition: The value specifies the number of local access | ||
31 | windows for this device. | ||
32 | |||
33 | ===================================================================== | ||
34 | |||
35 | E500 Coherency Module Node | ||
36 | |||
37 | The E500 LAW node represents the region of CCSR space where ECM config | ||
38 | and error reporting registers exist, this is the second 4k (0x1000) | ||
39 | of CCSR space. | ||
40 | |||
41 | PROPERTIES | ||
42 | |||
43 | - compatible | ||
44 | Usage: required | ||
45 | Value type: <string> | ||
46 | Definition: Must include "fsl,CHIP-ecm", "fsl,ecm" where | ||
47 | CHIP is the processor (mpc8572, mpc8544, etc.) | ||
48 | |||
49 | - reg | ||
50 | Usage: required | ||
51 | Value type: <prop-encoded-array> | ||
52 | Definition: A standard property. The value specifies the | ||
53 | physical address offset and length of the CCSR space | ||
54 | registers. | ||
55 | |||
56 | - interrupts | ||
57 | Usage: required | ||
58 | Value type: <prop-encoded-array> | ||
59 | |||
60 | - interrupt-parent | ||
61 | Usage: required | ||
62 | Value type: <phandle> | ||
63 | |||
64 | ===================================================================== | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/gtm.txt b/Documentation/devicetree/bindings/powerpc/fsl/gtm.txt new file mode 100644 index 000000000000..9a33efded4bc --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/gtm.txt | |||
@@ -0,0 +1,31 @@ | |||
1 | * Freescale General-purpose Timers Module | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : should be | ||
5 | "fsl,<chip>-gtm", "fsl,gtm" for SOC GTMs | ||
6 | "fsl,<chip>-qe-gtm", "fsl,qe-gtm", "fsl,gtm" for QE GTMs | ||
7 | "fsl,<chip>-cpm2-gtm", "fsl,cpm2-gtm", "fsl,gtm" for CPM2 GTMs | ||
8 | - reg : should contain gtm registers location and length (0x40). | ||
9 | - interrupts : should contain four interrupts. | ||
10 | - interrupt-parent : interrupt source phandle. | ||
11 | - clock-frequency : specifies the frequency driving the timer. | ||
12 | |||
13 | Example: | ||
14 | |||
15 | timer@500 { | ||
16 | compatible = "fsl,mpc8360-gtm", "fsl,gtm"; | ||
17 | reg = <0x500 0x40>; | ||
18 | interrupts = <90 8 78 8 84 8 72 8>; | ||
19 | interrupt-parent = <&ipic>; | ||
20 | /* filled by u-boot */ | ||
21 | clock-frequency = <0>; | ||
22 | }; | ||
23 | |||
24 | timer@440 { | ||
25 | compatible = "fsl,mpc8360-qe-gtm", "fsl,qe-gtm", "fsl,gtm"; | ||
26 | reg = <0x440 0x40>; | ||
27 | interrupts = <12 13 14 15>; | ||
28 | interrupt-parent = <&qeic>; | ||
29 | /* filled by u-boot */ | ||
30 | clock-frequency = <0>; | ||
31 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/guts.txt b/Documentation/devicetree/bindings/powerpc/fsl/guts.txt new file mode 100644 index 000000000000..9e7a2417dac5 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/guts.txt | |||
@@ -0,0 +1,25 @@ | |||
1 | * Global Utilities Block | ||
2 | |||
3 | The global utilities block controls power management, I/O device | ||
4 | enabling, power-on-reset configuration monitoring, general-purpose | ||
5 | I/O signal configuration, alternate function selection for multiplexed | ||
6 | signals, and clock control. | ||
7 | |||
8 | Required properties: | ||
9 | |||
10 | - compatible : Should define the compatible device type for | ||
11 | global-utilities. | ||
12 | - reg : Offset and length of the register set for the device. | ||
13 | |||
14 | Recommended properties: | ||
15 | |||
16 | - fsl,has-rstcr : Indicates that the global utilities register set | ||
17 | contains a functioning "reset control register" (i.e. the board | ||
18 | is wired to reset upon setting the HRESET_REQ bit in this register). | ||
19 | |||
20 | Example: | ||
21 | global-utilities@e0000 { /* global utilities block */ | ||
22 | compatible = "fsl,mpc8548-guts"; | ||
23 | reg = <e0000 1000>; | ||
24 | fsl,has-rstcr; | ||
25 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/lbc.txt b/Documentation/devicetree/bindings/powerpc/fsl/lbc.txt new file mode 100644 index 000000000000..3300fec501c5 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/lbc.txt | |||
@@ -0,0 +1,35 @@ | |||
1 | * Chipselect/Local Bus | ||
2 | |||
3 | Properties: | ||
4 | - name : Should be localbus | ||
5 | - #address-cells : Should be either two or three. The first cell is the | ||
6 | chipselect number, and the remaining cells are the | ||
7 | offset into the chipselect. | ||
8 | - #size-cells : Either one or two, depending on how large each chipselect | ||
9 | can be. | ||
10 | - ranges : Each range corresponds to a single chipselect, and cover | ||
11 | the entire access window as configured. | ||
12 | |||
13 | Example: | ||
14 | localbus@f0010100 { | ||
15 | compatible = "fsl,mpc8272-localbus", | ||
16 | "fsl,pq2-localbus"; | ||
17 | #address-cells = <2>; | ||
18 | #size-cells = <1>; | ||
19 | reg = <f0010100 40>; | ||
20 | |||
21 | ranges = <0 0 fe000000 02000000 | ||
22 | 1 0 f4500000 00008000>; | ||
23 | |||
24 | flash@0,0 { | ||
25 | compatible = "jedec-flash"; | ||
26 | reg = <0 0 2000000>; | ||
27 | bank-width = <4>; | ||
28 | device-width = <1>; | ||
29 | }; | ||
30 | |||
31 | board-control@1,0 { | ||
32 | reg = <1 0 20>; | ||
33 | compatible = "fsl,mpc8272ads-bcsr"; | ||
34 | }; | ||
35 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/mcm.txt b/Documentation/devicetree/bindings/powerpc/fsl/mcm.txt new file mode 100644 index 000000000000..4ceda9b3b413 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/mcm.txt | |||
@@ -0,0 +1,64 @@ | |||
1 | ===================================================================== | ||
2 | MPX LAW & Coherency Module Device Tree Binding | ||
3 | Copyright (C) 2009 Freescale Semiconductor Inc. | ||
4 | ===================================================================== | ||
5 | |||
6 | Local Access Window (LAW) Node | ||
7 | |||
8 | The LAW node represents the region of CCSR space where local access | ||
9 | windows are configured. For MCM based devices this is the first 4k | ||
10 | of CCSR space that includes CCSRBAR, ALTCBAR, ALTCAR, BPTR, and some | ||
11 | number of local access windows as specified by fsl,num-laws. | ||
12 | |||
13 | PROPERTIES | ||
14 | |||
15 | - compatible | ||
16 | Usage: required | ||
17 | Value type: <string> | ||
18 | Definition: Must include "fsl,mcm-law" | ||
19 | |||
20 | - reg | ||
21 | Usage: required | ||
22 | Value type: <prop-encoded-array> | ||
23 | Definition: A standard property. The value specifies the | ||
24 | physical address offset and length of the CCSR space | ||
25 | registers. | ||
26 | |||
27 | - fsl,num-laws | ||
28 | Usage: required | ||
29 | Value type: <u32> | ||
30 | Definition: The value specifies the number of local access | ||
31 | windows for this device. | ||
32 | |||
33 | ===================================================================== | ||
34 | |||
35 | MPX Coherency Module Node | ||
36 | |||
37 | The MPX LAW node represents the region of CCSR space where MCM config | ||
38 | and error reporting registers exist, this is the second 4k (0x1000) | ||
39 | of CCSR space. | ||
40 | |||
41 | PROPERTIES | ||
42 | |||
43 | - compatible | ||
44 | Usage: required | ||
45 | Value type: <string> | ||
46 | Definition: Must include "fsl,CHIP-mcm", "fsl,mcm" where | ||
47 | CHIP is the processor (mpc8641, mpc8610, etc.) | ||
48 | |||
49 | - reg | ||
50 | Usage: required | ||
51 | Value type: <prop-encoded-array> | ||
52 | Definition: A standard property. The value specifies the | ||
53 | physical address offset and length of the CCSR space | ||
54 | registers. | ||
55 | |||
56 | - interrupts | ||
57 | Usage: required | ||
58 | Value type: <prop-encoded-array> | ||
59 | |||
60 | - interrupt-parent | ||
61 | Usage: required | ||
62 | Value type: <phandle> | ||
63 | |||
64 | ===================================================================== | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/mcu-mpc8349emitx.txt b/Documentation/devicetree/bindings/powerpc/fsl/mcu-mpc8349emitx.txt new file mode 100644 index 000000000000..0f766333b6eb --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/mcu-mpc8349emitx.txt | |||
@@ -0,0 +1,17 @@ | |||
1 | Freescale MPC8349E-mITX-compatible Power Management Micro Controller Unit (MCU) | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : "fsl,<mcu-chip>-<board>", "fsl,mcu-mpc8349emitx". | ||
5 | - reg : should specify I2C address (0x0a). | ||
6 | - #gpio-cells : should be 2. | ||
7 | - gpio-controller : should be present. | ||
8 | |||
9 | Example: | ||
10 | |||
11 | mcu@0a { | ||
12 | #gpio-cells = <2>; | ||
13 | compatible = "fsl,mc9s08qg8-mpc8349emitx", | ||
14 | "fsl,mcu-mpc8349emitx"; | ||
15 | reg = <0x0a>; | ||
16 | gpio-controller; | ||
17 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/mpc5121-psc.txt b/Documentation/devicetree/bindings/powerpc/fsl/mpc5121-psc.txt new file mode 100644 index 000000000000..8832e8798912 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/mpc5121-psc.txt | |||
@@ -0,0 +1,70 @@ | |||
1 | MPC5121 PSC Device Tree Bindings | ||
2 | |||
3 | PSC in UART mode | ||
4 | ---------------- | ||
5 | |||
6 | For PSC in UART mode the needed PSC serial devices | ||
7 | are specified by fsl,mpc5121-psc-uart nodes in the | ||
8 | fsl,mpc5121-immr SoC node. Additionally the PSC FIFO | ||
9 | Controller node fsl,mpc5121-psc-fifo is requered there: | ||
10 | |||
11 | fsl,mpc5121-psc-uart nodes | ||
12 | -------------------------- | ||
13 | |||
14 | Required properties : | ||
15 | - compatible : Should contain "fsl,mpc5121-psc-uart" and "fsl,mpc5121-psc" | ||
16 | - cell-index : Index of the PSC in hardware | ||
17 | - reg : Offset and length of the register set for the PSC device | ||
18 | - interrupts : <a b> where a is the interrupt number of the | ||
19 | PSC FIFO Controller and b is a field that represents an | ||
20 | encoding of the sense and level information for the interrupt. | ||
21 | - interrupt-parent : the phandle for the interrupt controller that | ||
22 | services interrupts for this device. | ||
23 | |||
24 | Recommended properties : | ||
25 | - fsl,rx-fifo-size : the size of the RX fifo slice (a multiple of 4) | ||
26 | - fsl,tx-fifo-size : the size of the TX fifo slice (a multiple of 4) | ||
27 | |||
28 | |||
29 | fsl,mpc5121-psc-fifo node | ||
30 | ------------------------- | ||
31 | |||
32 | Required properties : | ||
33 | - compatible : Should be "fsl,mpc5121-psc-fifo" | ||
34 | - reg : Offset and length of the register set for the PSC | ||
35 | FIFO Controller | ||
36 | - interrupts : <a b> where a is the interrupt number of the | ||
37 | PSC FIFO Controller and b is a field that represents an | ||
38 | encoding of the sense and level information for the interrupt. | ||
39 | - interrupt-parent : the phandle for the interrupt controller that | ||
40 | services interrupts for this device. | ||
41 | |||
42 | |||
43 | Example for a board using PSC0 and PSC1 devices in serial mode: | ||
44 | |||
45 | serial@11000 { | ||
46 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
47 | cell-index = <0>; | ||
48 | reg = <0x11000 0x100>; | ||
49 | interrupts = <40 0x8>; | ||
50 | interrupt-parent = < &ipic >; | ||
51 | fsl,rx-fifo-size = <16>; | ||
52 | fsl,tx-fifo-size = <16>; | ||
53 | }; | ||
54 | |||
55 | serial@11100 { | ||
56 | compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc"; | ||
57 | cell-index = <1>; | ||
58 | reg = <0x11100 0x100>; | ||
59 | interrupts = <40 0x8>; | ||
60 | interrupt-parent = < &ipic >; | ||
61 | fsl,rx-fifo-size = <16>; | ||
62 | fsl,tx-fifo-size = <16>; | ||
63 | }; | ||
64 | |||
65 | pscfifo@11f00 { | ||
66 | compatible = "fsl,mpc5121-psc-fifo"; | ||
67 | reg = <0x11f00 0x100>; | ||
68 | interrupts = <40 0x8>; | ||
69 | interrupt-parent = < &ipic >; | ||
70 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/mpc5200.txt b/Documentation/devicetree/bindings/powerpc/fsl/mpc5200.txt new file mode 100644 index 000000000000..4ccb2cd5df94 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/mpc5200.txt | |||
@@ -0,0 +1,198 @@ | |||
1 | MPC5200 Device Tree Bindings | ||
2 | ---------------------------- | ||
3 | |||
4 | (c) 2006-2009 Secret Lab Technologies Ltd | ||
5 | Grant Likely <grant.likely@secretlab.ca> | ||
6 | |||
7 | Naming conventions | ||
8 | ------------------ | ||
9 | For mpc5200 on-chip devices, the format for each compatible value is | ||
10 | <chip>-<device>[-<mode>]. The OS should be able to match a device driver | ||
11 | to the device based solely on the compatible value. If two drivers | ||
12 | match on the compatible list; the 'most compatible' driver should be | ||
13 | selected. | ||
14 | |||
15 | The split between the MPC5200 and the MPC5200B leaves a bit of a | ||
16 | conundrum. How should the compatible property be set up to provide | ||
17 | maximum compatibility information; but still accurately describe the | ||
18 | chip? For the MPC5200; the answer is easy. Most of the SoC devices | ||
19 | originally appeared on the MPC5200. Since they didn't exist anywhere | ||
20 | else; the 5200 compatible properties will contain only one item; | ||
21 | "fsl,mpc5200-<device>". | ||
22 | |||
23 | The 5200B is almost the same as the 5200, but not quite. It fixes | ||
24 | silicon bugs and it adds a small number of enhancements. Most of the | ||
25 | devices either provide exactly the same interface as on the 5200. A few | ||
26 | devices have extra functions but still have a backwards compatible mode. | ||
27 | To express this information as completely as possible, 5200B device trees | ||
28 | should have two items in the compatible list: | ||
29 | compatible = "fsl,mpc5200b-<device>","fsl,mpc5200-<device>"; | ||
30 | |||
31 | It is *strongly* recommended that 5200B device trees follow this convention | ||
32 | (instead of only listing the base mpc5200 item). | ||
33 | |||
34 | ie. ethernet on mpc5200: compatible = "fsl,mpc5200-fec"; | ||
35 | ethernet on mpc5200b: compatible = "fsl,mpc5200b-fec", "fsl,mpc5200-fec"; | ||
36 | |||
37 | Modal devices, like PSCs, also append the configured function to the | ||
38 | end of the compatible field. ie. A PSC in i2s mode would specify | ||
39 | "fsl,mpc5200-psc-i2s", not "fsl,mpc5200-i2s". This convention is chosen to | ||
40 | avoid naming conflicts with non-psc devices providing the same | ||
41 | function. For example, "fsl,mpc5200-spi" and "fsl,mpc5200-psc-spi" describe | ||
42 | the mpc5200 simple spi device and a PSC spi mode respectively. | ||
43 | |||
44 | At the time of writing, exact chip may be either 'fsl,mpc5200' or | ||
45 | 'fsl,mpc5200b'. | ||
46 | |||
47 | The soc node | ||
48 | ------------ | ||
49 | This node describes the on chip SOC peripherals. Every mpc5200 based | ||
50 | board will have this node, and as such there is a common naming | ||
51 | convention for SOC devices. | ||
52 | |||
53 | Required properties: | ||
54 | name description | ||
55 | ---- ----------- | ||
56 | ranges Memory range of the internal memory mapped registers. | ||
57 | Should be <0 [baseaddr] 0xc000> | ||
58 | reg Should be <[baseaddr] 0x100> | ||
59 | compatible mpc5200: "fsl,mpc5200-immr" | ||
60 | mpc5200b: "fsl,mpc5200b-immr" | ||
61 | system-frequency 'fsystem' frequency in Hz; XLB, IPB, USB and PCI | ||
62 | clocks are derived from the fsystem clock. | ||
63 | bus-frequency IPB bus frequency in Hz. Clock rate | ||
64 | used by most of the soc devices. | ||
65 | |||
66 | soc child nodes | ||
67 | --------------- | ||
68 | Any on chip SOC devices available to Linux must appear as soc5200 child nodes. | ||
69 | |||
70 | Note: The tables below show the value for the mpc5200. A mpc5200b device | ||
71 | tree should use the "fsl,mpc5200b-<device>","fsl,mpc5200-<device>" form. | ||
72 | |||
73 | Required soc5200 child nodes: | ||
74 | name compatible Description | ||
75 | ---- ---------- ----------- | ||
76 | cdm@<addr> fsl,mpc5200-cdm Clock Distribution | ||
77 | interrupt-controller@<addr> fsl,mpc5200-pic need an interrupt | ||
78 | controller to boot | ||
79 | bestcomm@<addr> fsl,mpc5200-bestcomm Bestcomm DMA controller | ||
80 | |||
81 | Recommended soc5200 child nodes; populate as needed for your board | ||
82 | name compatible Description | ||
83 | ---- ---------- ----------- | ||
84 | timer@<addr> fsl,mpc5200-gpt General purpose timers | ||
85 | gpio@<addr> fsl,mpc5200-gpio MPC5200 simple gpio controller | ||
86 | gpio@<addr> fsl,mpc5200-gpio-wkup MPC5200 wakeup gpio controller | ||
87 | rtc@<addr> fsl,mpc5200-rtc Real time clock | ||
88 | mscan@<addr> fsl,mpc5200-mscan CAN bus controller | ||
89 | pci@<addr> fsl,mpc5200-pci PCI bridge | ||
90 | serial@<addr> fsl,mpc5200-psc-uart PSC in serial mode | ||
91 | i2s@<addr> fsl,mpc5200-psc-i2s PSC in i2s mode | ||
92 | ac97@<addr> fsl,mpc5200-psc-ac97 PSC in ac97 mode | ||
93 | spi@<addr> fsl,mpc5200-psc-spi PSC in spi mode | ||
94 | irda@<addr> fsl,mpc5200-psc-irda PSC in IrDA mode | ||
95 | spi@<addr> fsl,mpc5200-spi MPC5200 spi device | ||
96 | ethernet@<addr> fsl,mpc5200-fec MPC5200 ethernet device | ||
97 | ata@<addr> fsl,mpc5200-ata IDE ATA interface | ||
98 | i2c@<addr> fsl,mpc5200-i2c I2C controller | ||
99 | usb@<addr> fsl,mpc5200-ohci,ohci-be USB controller | ||
100 | xlb@<addr> fsl,mpc5200-xlb XLB arbitrator | ||
101 | |||
102 | fsl,mpc5200-gpt nodes | ||
103 | --------------------- | ||
104 | On the mpc5200 and 5200b, GPT0 has a watchdog timer function. If the board | ||
105 | design supports the internal wdt, then the device node for GPT0 should | ||
106 | include the empty property 'fsl,has-wdt'. Note that this does not activate | ||
107 | the watchdog. The timer will function as a GPT if the timer api is used, and | ||
108 | it will function as watchdog if the watchdog device is used. The watchdog | ||
109 | mode has priority over the gpt mode, i.e. if the watchdog is activated, any | ||
110 | gpt api call to this timer will fail with -EBUSY. | ||
111 | |||
112 | If you add the property | ||
113 | fsl,wdt-on-boot = <n>; | ||
114 | GPT0 will be marked as in-use watchdog, i.e. blocking every gpt access to it. | ||
115 | If n>0, the watchdog is started with a timeout of n seconds. If n=0, the | ||
116 | configuration of the watchdog is not touched. This is useful in two cases: | ||
117 | - just mark GPT0 as watchdog, blocking gpt accesses, and configure it later; | ||
118 | - do not touch a configuration assigned by the boot loader which supervises | ||
119 | the boot process itself. | ||
120 | |||
121 | The watchdog will respect the CONFIG_WATCHDOG_NOWAYOUT option. | ||
122 | |||
123 | An mpc5200-gpt can be used as a single line GPIO controller. To do so, | ||
124 | add the following properties to the gpt node: | ||
125 | gpio-controller; | ||
126 | #gpio-cells = <2>; | ||
127 | When referencing the GPIO line from another node, the first cell must always | ||
128 | be zero and the second cell represents the gpio flags and described in the | ||
129 | gpio device tree binding. | ||
130 | |||
131 | An mpc5200-gpt can be used as a single line edge sensitive interrupt | ||
132 | controller. To do so, add the following properties to the gpt node: | ||
133 | interrupt-controller; | ||
134 | #interrupt-cells = <1>; | ||
135 | When referencing the IRQ line from another node, the cell represents the | ||
136 | sense mode; 1 for edge rising, 2 for edge falling. | ||
137 | |||
138 | fsl,mpc5200-psc nodes | ||
139 | --------------------- | ||
140 | The PSCs should include a cell-index which is the index of the PSC in | ||
141 | hardware. cell-index is used to determine which shared SoC registers to | ||
142 | use when setting up PSC clocking. cell-index number starts at '0'. ie: | ||
143 | PSC1 has 'cell-index = <0>' | ||
144 | PSC4 has 'cell-index = <3>' | ||
145 | |||
146 | PSC in i2s mode: The mpc5200 and mpc5200b PSCs are not compatible when in | ||
147 | i2s mode. An 'mpc5200b-psc-i2s' node cannot include 'mpc5200-psc-i2s' in the | ||
148 | compatible field. | ||
149 | |||
150 | |||
151 | fsl,mpc5200-gpio and fsl,mpc5200-gpio-wkup nodes | ||
152 | ------------------------------------------------ | ||
153 | Each GPIO controller node should have the empty property gpio-controller and | ||
154 | #gpio-cells set to 2. First cell is the GPIO number which is interpreted | ||
155 | according to the bit numbers in the GPIO control registers. The second cell | ||
156 | is for flags which is currently unused. | ||
157 | |||
158 | fsl,mpc5200-fec nodes | ||
159 | --------------------- | ||
160 | The FEC node can specify one of the following properties to configure | ||
161 | the MII link: | ||
162 | - fsl,7-wire-mode - An empty property that specifies the link uses 7-wire | ||
163 | mode instead of MII | ||
164 | - current-speed - Specifies that the MII should be configured for a fixed | ||
165 | speed. This property should contain two cells. The | ||
166 | first cell specifies the speed in Mbps and the second | ||
167 | should be '0' for half duplex and '1' for full duplex | ||
168 | - phy-handle - Contains a phandle to an Ethernet PHY. | ||
169 | |||
170 | Interrupt controller (fsl,mpc5200-pic) node | ||
171 | ------------------------------------------- | ||
172 | The mpc5200 pic binding splits hardware IRQ numbers into two levels. The | ||
173 | split reflects the layout of the PIC hardware itself, which groups | ||
174 | interrupts into one of three groups; CRIT, MAIN or PERP. Also, the | ||
175 | Bestcomm dma engine has it's own set of interrupt sources which are | ||
176 | cascaded off of peripheral interrupt 0, which the driver interprets as a | ||
177 | fourth group, SDMA. | ||
178 | |||
179 | The interrupts property for device nodes using the mpc5200 pic consists | ||
180 | of three cells; <L1 L2 level> | ||
181 | |||
182 | L1 := [CRIT=0, MAIN=1, PERP=2, SDMA=3] | ||
183 | L2 := interrupt number; directly mapped from the value in the | ||
184 | "ICTL PerStat, MainStat, CritStat Encoded Register" | ||
185 | level := [LEVEL_HIGH=0, EDGE_RISING=1, EDGE_FALLING=2, LEVEL_LOW=3] | ||
186 | |||
187 | For external IRQs, use the following interrupt property values (how to | ||
188 | specify external interrupts is a frequently asked question): | ||
189 | External interrupts: | ||
190 | external irq0: interrupts = <0 0 n>; | ||
191 | external irq1: interrupts = <1 1 n>; | ||
192 | external irq2: interrupts = <1 2 n>; | ||
193 | external irq3: interrupts = <1 3 n>; | ||
194 | 'n' is sense (0: level high, 1: edge rising, 2: edge falling 3: level low) | ||
195 | |||
196 | fsl,mpc5200-mscan nodes | ||
197 | ----------------------- | ||
198 | See file can.txt in this directory. | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/mpic.txt b/Documentation/devicetree/bindings/powerpc/fsl/mpic.txt new file mode 100644 index 000000000000..71e39cf3215b --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/mpic.txt | |||
@@ -0,0 +1,42 @@ | |||
1 | * OpenPIC and its interrupt numbers on Freescale's e500/e600 cores | ||
2 | |||
3 | The OpenPIC specification does not specify which interrupt source has to | ||
4 | become which interrupt number. This is up to the software implementation | ||
5 | of the interrupt controller. The only requirement is that every | ||
6 | interrupt source has to have an unique interrupt number / vector number. | ||
7 | To accomplish this the current implementation assigns the number zero to | ||
8 | the first source, the number one to the second source and so on until | ||
9 | all interrupt sources have their unique number. | ||
10 | Usually the assigned vector number equals the interrupt number mentioned | ||
11 | in the documentation for a given core / CPU. This is however not true | ||
12 | for the e500 cores (MPC85XX CPUs) where the documentation distinguishes | ||
13 | between internal and external interrupt sources and starts counting at | ||
14 | zero for both of them. | ||
15 | |||
16 | So what to write for external interrupt source X or internal interrupt | ||
17 | source Y into the device tree? Here is an example: | ||
18 | |||
19 | The memory map for the interrupt controller in the MPC8544[0] shows, | ||
20 | that the first interrupt source starts at 0x5_0000 (PIC Register Address | ||
21 | Map-Interrupt Source Configuration Registers). This source becomes the | ||
22 | number zero therefore: | ||
23 | External interrupt 0 = interrupt number 0 | ||
24 | External interrupt 1 = interrupt number 1 | ||
25 | External interrupt 2 = interrupt number 2 | ||
26 | ... | ||
27 | Every interrupt number allocates 0x20 bytes register space. So to get | ||
28 | its number it is sufficient to shift the lower 16bits to right by five. | ||
29 | So for the external interrupt 10 we have: | ||
30 | 0x0140 >> 5 = 10 | ||
31 | |||
32 | After the external sources, the internal sources follow. The in core I2C | ||
33 | controller on the MPC8544 for instance has the internal source number | ||
34 | 27. Oo obtain its interrupt number we take the lower 16bits of its memory | ||
35 | address (0x5_0560) and shift it right: | ||
36 | 0x0560 >> 5 = 43 | ||
37 | |||
38 | Therefore the I2C device node for the MPC8544 CPU has to have the | ||
39 | interrupt number 43 specified in the device tree. | ||
40 | |||
41 | [0] MPC8544E PowerQUICCTM III, Integrated Host Processor Family Reference Manual | ||
42 | MPC8544ERM Rev. 1 10/2007 | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt b/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt new file mode 100644 index 000000000000..bcc30bac6831 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/msi-pic.txt | |||
@@ -0,0 +1,36 @@ | |||
1 | * Freescale MSI interrupt controller | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : compatible list, contains 2 entries, | ||
5 | first is "fsl,CHIP-msi", where CHIP is the processor(mpc8610, mpc8572, | ||
6 | etc.) and the second is "fsl,mpic-msi" or "fsl,ipic-msi" depending on | ||
7 | the parent type. | ||
8 | - reg : should contain the address and the length of the shared message | ||
9 | interrupt register set. | ||
10 | - msi-available-ranges: use <start count> style section to define which | ||
11 | msi interrupt can be used in the 256 msi interrupts. This property is | ||
12 | optional, without this, all the 256 MSI interrupts can be used. | ||
13 | - interrupts : each one of the interrupts here is one entry per 32 MSIs, | ||
14 | and routed to the host interrupt controller. the interrupts should | ||
15 | be set as edge sensitive. | ||
16 | - interrupt-parent: the phandle for the interrupt controller | ||
17 | that services interrupts for this device. for 83xx cpu, the interrupts | ||
18 | are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed | ||
19 | to MPIC. | ||
20 | |||
21 | Example: | ||
22 | msi@41600 { | ||
23 | compatible = "fsl,mpc8610-msi", "fsl,mpic-msi"; | ||
24 | reg = <0x41600 0x80>; | ||
25 | msi-available-ranges = <0 0x100>; | ||
26 | interrupts = < | ||
27 | 0xe0 0 | ||
28 | 0xe1 0 | ||
29 | 0xe2 0 | ||
30 | 0xe3 0 | ||
31 | 0xe4 0 | ||
32 | 0xe5 0 | ||
33 | 0xe6 0 | ||
34 | 0xe7 0>; | ||
35 | interrupt-parent = <&mpic>; | ||
36 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/pmc.txt b/Documentation/devicetree/bindings/powerpc/fsl/pmc.txt new file mode 100644 index 000000000000..07256b7ffcaa --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/pmc.txt | |||
@@ -0,0 +1,63 @@ | |||
1 | * Power Management Controller | ||
2 | |||
3 | Properties: | ||
4 | - compatible: "fsl,<chip>-pmc". | ||
5 | |||
6 | "fsl,mpc8349-pmc" should be listed for any chip whose PMC is | ||
7 | compatible. "fsl,mpc8313-pmc" should also be listed for any chip | ||
8 | whose PMC is compatible, and implies deep-sleep capability. | ||
9 | |||
10 | "fsl,mpc8548-pmc" should be listed for any chip whose PMC is | ||
11 | compatible. "fsl,mpc8536-pmc" should also be listed for any chip | ||
12 | whose PMC is compatible, and implies deep-sleep capability. | ||
13 | |||
14 | "fsl,mpc8641d-pmc" should be listed for any chip whose PMC is | ||
15 | compatible; all statements below that apply to "fsl,mpc8548-pmc" also | ||
16 | apply to "fsl,mpc8641d-pmc". | ||
17 | |||
18 | Compatibility does not include bit assignments in SCCR/PMCDR/DEVDISR; these | ||
19 | bit assignments are indicated via the sleep specifier in each device's | ||
20 | sleep property. | ||
21 | |||
22 | - reg: For devices compatible with "fsl,mpc8349-pmc", the first resource | ||
23 | is the PMC block, and the second resource is the Clock Configuration | ||
24 | block. | ||
25 | |||
26 | For devices compatible with "fsl,mpc8548-pmc", the first resource | ||
27 | is a 32-byte block beginning with DEVDISR. | ||
28 | |||
29 | - interrupts: For "fsl,mpc8349-pmc"-compatible devices, the first | ||
30 | resource is the PMC block interrupt. | ||
31 | |||
32 | - fsl,mpc8313-wakeup-timer: For "fsl,mpc8313-pmc"-compatible devices, | ||
33 | this is a phandle to an "fsl,gtm" node on which timer 4 can be used as | ||
34 | a wakeup source from deep sleep. | ||
35 | |||
36 | Sleep specifiers: | ||
37 | |||
38 | fsl,mpc8349-pmc: Sleep specifiers consist of one cell. For each bit | ||
39 | that is set in the cell, the corresponding bit in SCCR will be saved | ||
40 | and cleared on suspend, and restored on resume. This sleep controller | ||
41 | supports disabling and resuming devices at any time. | ||
42 | |||
43 | fsl,mpc8536-pmc: Sleep specifiers consist of three cells, the third of | ||
44 | which will be ORed into PMCDR upon suspend, and cleared from PMCDR | ||
45 | upon resume. The first two cells are as described for fsl,mpc8578-pmc. | ||
46 | This sleep controller only supports disabling devices during system | ||
47 | sleep, or permanently. | ||
48 | |||
49 | fsl,mpc8548-pmc: Sleep specifiers consist of one or two cells, the | ||
50 | first of which will be ORed into DEVDISR (and the second into | ||
51 | DEVDISR2, if present -- this cell should be zero or absent if the | ||
52 | hardware does not have DEVDISR2) upon a request for permanent device | ||
53 | disabling. This sleep controller does not support configuring devices | ||
54 | to disable during system sleep (unless supported by another compatible | ||
55 | match), or dynamically. | ||
56 | |||
57 | Example: | ||
58 | |||
59 | power@b00 { | ||
60 | compatible = "fsl,mpc8313-pmc", "fsl,mpc8349-pmc"; | ||
61 | reg = <0xb00 0x100 0xa00 0x100>; | ||
62 | interrupts = <80 8>; | ||
63 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/sec.txt b/Documentation/devicetree/bindings/powerpc/fsl/sec.txt new file mode 100644 index 000000000000..2b6f2d45c45a --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/sec.txt | |||
@@ -0,0 +1,68 @@ | |||
1 | Freescale SoC SEC Security Engines | ||
2 | |||
3 | Required properties: | ||
4 | |||
5 | - compatible : Should contain entries for this and backward compatible | ||
6 | SEC versions, high to low, e.g., "fsl,sec2.1", "fsl,sec2.0" | ||
7 | - reg : Offset and length of the register set for the device | ||
8 | - interrupts : the SEC's interrupt number | ||
9 | - fsl,num-channels : An integer representing the number of channels | ||
10 | available. | ||
11 | - fsl,channel-fifo-len : An integer representing the number of | ||
12 | descriptor pointers each channel fetch fifo can hold. | ||
13 | - fsl,exec-units-mask : The bitmask representing what execution units | ||
14 | (EUs) are available. It's a single 32-bit cell. EU information | ||
15 | should be encoded following the SEC's Descriptor Header Dword | ||
16 | EU_SEL0 field documentation, i.e. as follows: | ||
17 | |||
18 | bit 0 = reserved - should be 0 | ||
19 | bit 1 = set if SEC has the ARC4 EU (AFEU) | ||
20 | bit 2 = set if SEC has the DES/3DES EU (DEU) | ||
21 | bit 3 = set if SEC has the message digest EU (MDEU/MDEU-A) | ||
22 | bit 4 = set if SEC has the random number generator EU (RNG) | ||
23 | bit 5 = set if SEC has the public key EU (PKEU) | ||
24 | bit 6 = set if SEC has the AES EU (AESU) | ||
25 | bit 7 = set if SEC has the Kasumi EU (KEU) | ||
26 | bit 8 = set if SEC has the CRC EU (CRCU) | ||
27 | bit 11 = set if SEC has the message digest EU extended alg set (MDEU-B) | ||
28 | |||
29 | remaining bits are reserved for future SEC EUs. | ||
30 | |||
31 | - fsl,descriptor-types-mask : The bitmask representing what descriptors | ||
32 | are available. It's a single 32-bit cell. Descriptor type information | ||
33 | should be encoded following the SEC's Descriptor Header Dword DESC_TYPE | ||
34 | field documentation, i.e. as follows: | ||
35 | |||
36 | bit 0 = set if SEC supports the aesu_ctr_nonsnoop desc. type | ||
37 | bit 1 = set if SEC supports the ipsec_esp descriptor type | ||
38 | bit 2 = set if SEC supports the common_nonsnoop desc. type | ||
39 | bit 3 = set if SEC supports the 802.11i AES ccmp desc. type | ||
40 | bit 4 = set if SEC supports the hmac_snoop_no_afeu desc. type | ||
41 | bit 5 = set if SEC supports the srtp descriptor type | ||
42 | bit 6 = set if SEC supports the non_hmac_snoop_no_afeu desc.type | ||
43 | bit 7 = set if SEC supports the pkeu_assemble descriptor type | ||
44 | bit 8 = set if SEC supports the aesu_key_expand_output desc.type | ||
45 | bit 9 = set if SEC supports the pkeu_ptmul descriptor type | ||
46 | bit 10 = set if SEC supports the common_nonsnoop_afeu desc. type | ||
47 | bit 11 = set if SEC supports the pkeu_ptadd_dbl descriptor type | ||
48 | |||
49 | ..and so on and so forth. | ||
50 | |||
51 | Optional properties: | ||
52 | |||
53 | - interrupt-parent : the phandle for the interrupt controller that | ||
54 | services interrupts for this device. | ||
55 | |||
56 | Example: | ||
57 | |||
58 | /* MPC8548E */ | ||
59 | crypto@30000 { | ||
60 | compatible = "fsl,sec2.1", "fsl,sec2.0"; | ||
61 | reg = <0x30000 0x10000>; | ||
62 | interrupts = <29 2>; | ||
63 | interrupt-parent = <&mpic>; | ||
64 | fsl,num-channels = <4>; | ||
65 | fsl,channel-fifo-len = <24>; | ||
66 | fsl,exec-units-mask = <0xfe>; | ||
67 | fsl,descriptor-types-mask = <0x12b0ebf>; | ||
68 | }; | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/ssi.txt b/Documentation/devicetree/bindings/powerpc/fsl/ssi.txt new file mode 100644 index 000000000000..5ff76c9c57d2 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/fsl/ssi.txt | |||
@@ -0,0 +1,73 @@ | |||
1 | Freescale Synchronous Serial Interface | ||
2 | |||
3 | The SSI is a serial device that communicates with audio codecs. It can | ||
4 | be programmed in AC97, I2S, left-justified, or right-justified modes. | ||
5 | |||
6 | Required properties: | ||
7 | - compatible: Compatible list, contains "fsl,ssi". | ||
8 | - cell-index: The SSI, <0> = SSI1, <1> = SSI2, and so on. | ||
9 | - reg: Offset and length of the register set for the device. | ||
10 | - interrupts: <a b> where a is the interrupt number and b is a | ||
11 | field that represents an encoding of the sense and | ||
12 | level information for the interrupt. This should be | ||
13 | encoded based on the information in section 2) | ||
14 | depending on the type of interrupt controller you | ||
15 | have. | ||
16 | - interrupt-parent: The phandle for the interrupt controller that | ||
17 | services interrupts for this device. | ||
18 | - fsl,mode: The operating mode for the SSI interface. | ||
19 | "i2s-slave" - I2S mode, SSI is clock slave | ||
20 | "i2s-master" - I2S mode, SSI is clock master | ||
21 | "lj-slave" - left-justified mode, SSI is clock slave | ||
22 | "lj-master" - l.j. mode, SSI is clock master | ||
23 | "rj-slave" - right-justified mode, SSI is clock slave | ||
24 | "rj-master" - r.j., SSI is clock master | ||
25 | "ac97-slave" - AC97 mode, SSI is clock slave | ||
26 | "ac97-master" - AC97 mode, SSI is clock master | ||
27 | - fsl,playback-dma: Phandle to a node for the DMA channel to use for | ||
28 | playback of audio. This is typically dictated by SOC | ||
29 | design. See the notes below. | ||
30 | - fsl,capture-dma: Phandle to a node for the DMA channel to use for | ||
31 | capture (recording) of audio. This is typically dictated | ||
32 | by SOC design. See the notes below. | ||
33 | - fsl,fifo-depth: The number of elements in the transmit and receive FIFOs. | ||
34 | This number is the maximum allowed value for SFCSR[TFWM0]. | ||
35 | - fsl,ssi-asynchronous: | ||
36 | If specified, the SSI is to be programmed in asynchronous | ||
37 | mode. In this mode, pins SRCK, STCK, SRFS, and STFS must | ||
38 | all be connected to valid signals. In synchronous mode, | ||
39 | SRCK and SRFS are ignored. Asynchronous mode allows | ||
40 | playback and capture to use different sample sizes and | ||
41 | sample rates. Some drivers may require that SRCK and STCK | ||
42 | be connected together, and SRFS and STFS be connected | ||
43 | together. This would still allow different sample sizes, | ||
44 | but not different sample rates. | ||
45 | |||
46 | Optional properties: | ||
47 | - codec-handle: Phandle to a 'codec' node that defines an audio | ||
48 | codec connected to this SSI. This node is typically | ||
49 | a child of an I2C or other control node. | ||
50 | |||
51 | Child 'codec' node required properties: | ||
52 | - compatible: Compatible list, contains the name of the codec | ||
53 | |||
54 | Child 'codec' node optional properties: | ||
55 | - clock-frequency: The frequency of the input clock, which typically comes | ||
56 | from an on-board dedicated oscillator. | ||
57 | |||
58 | Notes on fsl,playback-dma and fsl,capture-dma: | ||
59 | |||
60 | On SOCs that have an SSI, specific DMA channels are hard-wired for playback | ||
61 | and capture. On the MPC8610, for example, SSI1 must use DMA channel 0 for | ||
62 | playback and DMA channel 1 for capture. SSI2 must use DMA channel 2 for | ||
63 | playback and DMA channel 3 for capture. The developer can choose which | ||
64 | DMA controller to use, but the channels themselves are hard-wired. The | ||
65 | purpose of these two properties is to represent this hardware design. | ||
66 | |||
67 | The device tree nodes for the DMA channels that are referenced by | ||
68 | "fsl,playback-dma" and "fsl,capture-dma" must be marked as compatible with | ||
69 | "fsl,ssi-dma-channel". The SOC-specific compatible string (e.g. | ||
70 | "fsl,mpc8610-dma-channel") can remain. If these nodes are left as | ||
71 | "fsl,elo-dma-channel" or "fsl,eloplus-dma-channel", then the generic Elo DMA | ||
72 | drivers (fsldma) will attempt to use them, and it will conflict with the | ||
73 | sound drivers. | ||
diff --git a/Documentation/devicetree/bindings/powerpc/nintendo/gamecube.txt b/Documentation/devicetree/bindings/powerpc/nintendo/gamecube.txt new file mode 100644 index 000000000000..b558585b1aaf --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/nintendo/gamecube.txt | |||
@@ -0,0 +1,109 @@ | |||
1 | |||
2 | Nintendo GameCube device tree | ||
3 | ============================= | ||
4 | |||
5 | 1) The "flipper" node | ||
6 | |||
7 | This node represents the multi-function "Flipper" chip, which packages | ||
8 | many of the devices found in the Nintendo GameCube. | ||
9 | |||
10 | Required properties: | ||
11 | |||
12 | - compatible : Should be "nintendo,flipper" | ||
13 | |||
14 | 1.a) The Video Interface (VI) node | ||
15 | |||
16 | Represents the interface between the graphics processor and a external | ||
17 | video encoder. | ||
18 | |||
19 | Required properties: | ||
20 | |||
21 | - compatible : should be "nintendo,flipper-vi" | ||
22 | - reg : should contain the VI registers location and length | ||
23 | - interrupts : should contain the VI interrupt | ||
24 | |||
25 | 1.b) The Processor Interface (PI) node | ||
26 | |||
27 | Represents the data and control interface between the main processor | ||
28 | and graphics and audio processor. | ||
29 | |||
30 | Required properties: | ||
31 | |||
32 | - compatible : should be "nintendo,flipper-pi" | ||
33 | - reg : should contain the PI registers location and length | ||
34 | |||
35 | 1.b.i) The "Flipper" interrupt controller node | ||
36 | |||
37 | Represents the interrupt controller within the "Flipper" chip. | ||
38 | The node for the "Flipper" interrupt controller must be placed under | ||
39 | the PI node. | ||
40 | |||
41 | Required properties: | ||
42 | |||
43 | - compatible : should be "nintendo,flipper-pic" | ||
44 | |||
45 | 1.c) The Digital Signal Procesor (DSP) node | ||
46 | |||
47 | Represents the digital signal processor interface, designed to offload | ||
48 | audio related tasks. | ||
49 | |||
50 | Required properties: | ||
51 | |||
52 | - compatible : should be "nintendo,flipper-dsp" | ||
53 | - reg : should contain the DSP registers location and length | ||
54 | - interrupts : should contain the DSP interrupt | ||
55 | |||
56 | 1.c.i) The Auxiliary RAM (ARAM) node | ||
57 | |||
58 | Represents the non cpu-addressable ram designed mainly to store audio | ||
59 | related information. | ||
60 | The ARAM node must be placed under the DSP node. | ||
61 | |||
62 | Required properties: | ||
63 | |||
64 | - compatible : should be "nintendo,flipper-aram" | ||
65 | - reg : should contain the ARAM start (zero-based) and length | ||
66 | |||
67 | 1.d) The Disk Interface (DI) node | ||
68 | |||
69 | Represents the interface used to communicate with mass storage devices. | ||
70 | |||
71 | Required properties: | ||
72 | |||
73 | - compatible : should be "nintendo,flipper-di" | ||
74 | - reg : should contain the DI registers location and length | ||
75 | - interrupts : should contain the DI interrupt | ||
76 | |||
77 | 1.e) The Audio Interface (AI) node | ||
78 | |||
79 | Represents the interface to the external 16-bit stereo digital-to-analog | ||
80 | converter. | ||
81 | |||
82 | Required properties: | ||
83 | |||
84 | - compatible : should be "nintendo,flipper-ai" | ||
85 | - reg : should contain the AI registers location and length | ||
86 | - interrupts : should contain the AI interrupt | ||
87 | |||
88 | 1.f) The Serial Interface (SI) node | ||
89 | |||
90 | Represents the interface to the four single bit serial interfaces. | ||
91 | The SI is a proprietary serial interface used normally to control gamepads. | ||
92 | It's NOT a RS232-type interface. | ||
93 | |||
94 | Required properties: | ||
95 | |||
96 | - compatible : should be "nintendo,flipper-si" | ||
97 | - reg : should contain the SI registers location and length | ||
98 | - interrupts : should contain the SI interrupt | ||
99 | |||
100 | 1.g) The External Interface (EXI) node | ||
101 | |||
102 | Represents the multi-channel SPI-like interface. | ||
103 | |||
104 | Required properties: | ||
105 | |||
106 | - compatible : should be "nintendo,flipper-exi" | ||
107 | - reg : should contain the EXI registers location and length | ||
108 | - interrupts : should contain the EXI interrupt | ||
109 | |||
diff --git a/Documentation/devicetree/bindings/powerpc/nintendo/wii.txt b/Documentation/devicetree/bindings/powerpc/nintendo/wii.txt new file mode 100644 index 000000000000..a7e155a023b8 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/nintendo/wii.txt | |||
@@ -0,0 +1,184 @@ | |||
1 | |||
2 | Nintendo Wii device tree | ||
3 | ======================== | ||
4 | |||
5 | 0) The root node | ||
6 | |||
7 | This node represents the Nintendo Wii video game console. | ||
8 | |||
9 | Required properties: | ||
10 | |||
11 | - model : Should be "nintendo,wii" | ||
12 | - compatible : Should be "nintendo,wii" | ||
13 | |||
14 | 1) The "hollywood" node | ||
15 | |||
16 | This node represents the multi-function "Hollywood" chip, which packages | ||
17 | many of the devices found in the Nintendo Wii. | ||
18 | |||
19 | Required properties: | ||
20 | |||
21 | - compatible : Should be "nintendo,hollywood" | ||
22 | |||
23 | 1.a) The Video Interface (VI) node | ||
24 | |||
25 | Represents the interface between the graphics processor and a external | ||
26 | video encoder. | ||
27 | |||
28 | Required properties: | ||
29 | |||
30 | - compatible : should be "nintendo,hollywood-vi","nintendo,flipper-vi" | ||
31 | - reg : should contain the VI registers location and length | ||
32 | - interrupts : should contain the VI interrupt | ||
33 | |||
34 | 1.b) The Processor Interface (PI) node | ||
35 | |||
36 | Represents the data and control interface between the main processor | ||
37 | and graphics and audio processor. | ||
38 | |||
39 | Required properties: | ||
40 | |||
41 | - compatible : should be "nintendo,hollywood-pi","nintendo,flipper-pi" | ||
42 | - reg : should contain the PI registers location and length | ||
43 | |||
44 | 1.b.i) The "Flipper" interrupt controller node | ||
45 | |||
46 | Represents the "Flipper" interrupt controller within the "Hollywood" chip. | ||
47 | The node for the "Flipper" interrupt controller must be placed under | ||
48 | the PI node. | ||
49 | |||
50 | Required properties: | ||
51 | |||
52 | - #interrupt-cells : <1> | ||
53 | - compatible : should be "nintendo,flipper-pic" | ||
54 | - interrupt-controller | ||
55 | |||
56 | 1.c) The Digital Signal Procesor (DSP) node | ||
57 | |||
58 | Represents the digital signal processor interface, designed to offload | ||
59 | audio related tasks. | ||
60 | |||
61 | Required properties: | ||
62 | |||
63 | - compatible : should be "nintendo,hollywood-dsp","nintendo,flipper-dsp" | ||
64 | - reg : should contain the DSP registers location and length | ||
65 | - interrupts : should contain the DSP interrupt | ||
66 | |||
67 | 1.d) The Serial Interface (SI) node | ||
68 | |||
69 | Represents the interface to the four single bit serial interfaces. | ||
70 | The SI is a proprietary serial interface used normally to control gamepads. | ||
71 | It's NOT a RS232-type interface. | ||
72 | |||
73 | Required properties: | ||
74 | |||
75 | - compatible : should be "nintendo,hollywood-si","nintendo,flipper-si" | ||
76 | - reg : should contain the SI registers location and length | ||
77 | - interrupts : should contain the SI interrupt | ||
78 | |||
79 | 1.e) The Audio Interface (AI) node | ||
80 | |||
81 | Represents the interface to the external 16-bit stereo digital-to-analog | ||
82 | converter. | ||
83 | |||
84 | Required properties: | ||
85 | |||
86 | - compatible : should be "nintendo,hollywood-ai","nintendo,flipper-ai" | ||
87 | - reg : should contain the AI registers location and length | ||
88 | - interrupts : should contain the AI interrupt | ||
89 | |||
90 | 1.f) The External Interface (EXI) node | ||
91 | |||
92 | Represents the multi-channel SPI-like interface. | ||
93 | |||
94 | Required properties: | ||
95 | |||
96 | - compatible : should be "nintendo,hollywood-exi","nintendo,flipper-exi" | ||
97 | - reg : should contain the EXI registers location and length | ||
98 | - interrupts : should contain the EXI interrupt | ||
99 | |||
100 | 1.g) The Open Host Controller Interface (OHCI) nodes | ||
101 | |||
102 | Represent the USB 1.x Open Host Controller Interfaces. | ||
103 | |||
104 | Required properties: | ||
105 | |||
106 | - compatible : should be "nintendo,hollywood-usb-ohci","usb-ohci" | ||
107 | - reg : should contain the OHCI registers location and length | ||
108 | - interrupts : should contain the OHCI interrupt | ||
109 | |||
110 | 1.h) The Enhanced Host Controller Interface (EHCI) node | ||
111 | |||
112 | Represents the USB 2.0 Enhanced Host Controller Interface. | ||
113 | |||
114 | Required properties: | ||
115 | |||
116 | - compatible : should be "nintendo,hollywood-usb-ehci","usb-ehci" | ||
117 | - reg : should contain the EHCI registers location and length | ||
118 | - interrupts : should contain the EHCI interrupt | ||
119 | |||
120 | 1.i) The Secure Digital Host Controller Interface (SDHCI) nodes | ||
121 | |||
122 | Represent the Secure Digital Host Controller Interfaces. | ||
123 | |||
124 | Required properties: | ||
125 | |||
126 | - compatible : should be "nintendo,hollywood-sdhci","sdhci" | ||
127 | - reg : should contain the SDHCI registers location and length | ||
128 | - interrupts : should contain the SDHCI interrupt | ||
129 | |||
130 | 1.j) The Inter-Processsor Communication (IPC) node | ||
131 | |||
132 | Represent the Inter-Processor Communication interface. This interface | ||
133 | enables communications between the Broadway and the Starlet processors. | ||
134 | |||
135 | - compatible : should be "nintendo,hollywood-ipc" | ||
136 | - reg : should contain the IPC registers location and length | ||
137 | - interrupts : should contain the IPC interrupt | ||
138 | |||
139 | 1.k) The "Hollywood" interrupt controller node | ||
140 | |||
141 | Represents the "Hollywood" interrupt controller within the | ||
142 | "Hollywood" chip. | ||
143 | |||
144 | Required properties: | ||
145 | |||
146 | - #interrupt-cells : <1> | ||
147 | - compatible : should be "nintendo,hollywood-pic" | ||
148 | - reg : should contain the controller registers location and length | ||
149 | - interrupt-controller | ||
150 | - interrupts : should contain the cascade interrupt of the "flipper" pic | ||
151 | - interrupt-parent: should contain the phandle of the "flipper" pic | ||
152 | |||
153 | 1.l) The General Purpose I/O (GPIO) controller node | ||
154 | |||
155 | Represents the dual access 32 GPIO controller interface. | ||
156 | |||
157 | Required properties: | ||
158 | |||
159 | - #gpio-cells : <2> | ||
160 | - compatible : should be "nintendo,hollywood-gpio" | ||
161 | - reg : should contain the IPC registers location and length | ||
162 | - gpio-controller | ||
163 | |||
164 | 1.m) The control node | ||
165 | |||
166 | Represents the control interface used to setup several miscellaneous | ||
167 | settings of the "Hollywood" chip like boot memory mappings, resets, | ||
168 | disk interface mode, etc. | ||
169 | |||
170 | Required properties: | ||
171 | |||
172 | - compatible : should be "nintendo,hollywood-control" | ||
173 | - reg : should contain the control registers location and length | ||
174 | |||
175 | 1.n) The Disk Interface (DI) node | ||
176 | |||
177 | Represents the interface used to communicate with mass storage devices. | ||
178 | |||
179 | Required properties: | ||
180 | |||
181 | - compatible : should be "nintendo,hollywood-di" | ||
182 | - reg : should contain the DI registers location and length | ||
183 | - interrupts : should contain the DI interrupt | ||
184 | |||
diff --git a/Documentation/devicetree/bindings/spi/fsl-spi.txt b/Documentation/devicetree/bindings/spi/fsl-spi.txt new file mode 100644 index 000000000000..777abd7399d5 --- /dev/null +++ b/Documentation/devicetree/bindings/spi/fsl-spi.txt | |||
@@ -0,0 +1,53 @@ | |||
1 | * SPI (Serial Peripheral Interface) | ||
2 | |||
3 | Required properties: | ||
4 | - cell-index : QE SPI subblock index. | ||
5 | 0: QE subblock SPI1 | ||
6 | 1: QE subblock SPI2 | ||
7 | - compatible : should be "fsl,spi". | ||
8 | - mode : the SPI operation mode, it can be "cpu" or "cpu-qe". | ||
9 | - reg : Offset and length of the register set for the device | ||
10 | - interrupts : <a b> where a is the interrupt number and b is a | ||
11 | field that represents an encoding of the sense and level | ||
12 | information for the interrupt. This should be encoded based on | ||
13 | the information in section 2) depending on the type of interrupt | ||
14 | controller you have. | ||
15 | - interrupt-parent : the phandle for the interrupt controller that | ||
16 | services interrupts for this device. | ||
17 | |||
18 | Optional properties: | ||
19 | - gpios : specifies the gpio pins to be used for chipselects. | ||
20 | The gpios will be referred to as reg = <index> in the SPI child nodes. | ||
21 | If unspecified, a single SPI device without a chip select can be used. | ||
22 | |||
23 | Example: | ||
24 | spi@4c0 { | ||
25 | cell-index = <0>; | ||
26 | compatible = "fsl,spi"; | ||
27 | reg = <4c0 40>; | ||
28 | interrupts = <82 0>; | ||
29 | interrupt-parent = <700>; | ||
30 | mode = "cpu"; | ||
31 | gpios = <&gpio 18 1 // device reg=<0> | ||
32 | &gpio 19 1>; // device reg=<1> | ||
33 | }; | ||
34 | |||
35 | |||
36 | * eSPI (Enhanced Serial Peripheral Interface) | ||
37 | |||
38 | Required properties: | ||
39 | - compatible : should be "fsl,mpc8536-espi". | ||
40 | - reg : Offset and length of the register set for the device. | ||
41 | - interrupts : should contain eSPI interrupt, the device has one interrupt. | ||
42 | - fsl,espi-num-chipselects : the number of the chipselect signals. | ||
43 | |||
44 | Example: | ||
45 | spi@110000 { | ||
46 | #address-cells = <1>; | ||
47 | #size-cells = <0>; | ||
48 | compatible = "fsl,mpc8536-espi"; | ||
49 | reg = <0x110000 0x1000>; | ||
50 | interrupts = <53 0x2>; | ||
51 | interrupt-parent = <&mpic>; | ||
52 | fsl,espi-num-chipselects = <4>; | ||
53 | }; | ||
diff --git a/Documentation/devicetree/bindings/spi/spi-bus.txt b/Documentation/devicetree/bindings/spi/spi-bus.txt new file mode 100644 index 000000000000..e782add2e457 --- /dev/null +++ b/Documentation/devicetree/bindings/spi/spi-bus.txt | |||
@@ -0,0 +1,57 @@ | |||
1 | SPI (Serial Peripheral Interface) busses | ||
2 | |||
3 | SPI busses can be described with a node for the SPI master device | ||
4 | and a set of child nodes for each SPI slave on the bus. For this | ||
5 | discussion, it is assumed that the system's SPI controller is in | ||
6 | SPI master mode. This binding does not describe SPI controllers | ||
7 | in slave mode. | ||
8 | |||
9 | The SPI master node requires the following properties: | ||
10 | - #address-cells - number of cells required to define a chip select | ||
11 | address on the SPI bus. | ||
12 | - #size-cells - should be zero. | ||
13 | - compatible - name of SPI bus controller following generic names | ||
14 | recommended practice. | ||
15 | No other properties are required in the SPI bus node. It is assumed | ||
16 | that a driver for an SPI bus device will understand that it is an SPI bus. | ||
17 | However, the binding does not attempt to define the specific method for | ||
18 | assigning chip select numbers. Since SPI chip select configuration is | ||
19 | flexible and non-standardized, it is left out of this binding with the | ||
20 | assumption that board specific platform code will be used to manage | ||
21 | chip selects. Individual drivers can define additional properties to | ||
22 | support describing the chip select layout. | ||
23 | |||
24 | SPI slave nodes must be children of the SPI master node and can | ||
25 | contain the following properties. | ||
26 | - reg - (required) chip select address of device. | ||
27 | - compatible - (required) name of SPI device following generic names | ||
28 | recommended practice | ||
29 | - spi-max-frequency - (required) Maximum SPI clocking speed of device in Hz | ||
30 | - spi-cpol - (optional) Empty property indicating device requires | ||
31 | inverse clock polarity (CPOL) mode | ||
32 | - spi-cpha - (optional) Empty property indicating device requires | ||
33 | shifted clock phase (CPHA) mode | ||
34 | - spi-cs-high - (optional) Empty property indicating device requires | ||
35 | chip select active high | ||
36 | |||
37 | SPI example for an MPC5200 SPI bus: | ||
38 | spi@f00 { | ||
39 | #address-cells = <1>; | ||
40 | #size-cells = <0>; | ||
41 | compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi"; | ||
42 | reg = <0xf00 0x20>; | ||
43 | interrupts = <2 13 0 2 14 0>; | ||
44 | interrupt-parent = <&mpc5200_pic>; | ||
45 | |||
46 | ethernet-switch@0 { | ||
47 | compatible = "micrel,ks8995m"; | ||
48 | spi-max-frequency = <1000000>; | ||
49 | reg = <0>; | ||
50 | }; | ||
51 | |||
52 | codec@1 { | ||
53 | compatible = "ti,tlv320aic26"; | ||
54 | spi-max-frequency = <100000>; | ||
55 | reg = <1>; | ||
56 | }; | ||
57 | }; | ||
diff --git a/Documentation/devicetree/bindings/usb/fsl-usb.txt b/Documentation/devicetree/bindings/usb/fsl-usb.txt new file mode 100644 index 000000000000..bd5723f0b67e --- /dev/null +++ b/Documentation/devicetree/bindings/usb/fsl-usb.txt | |||
@@ -0,0 +1,81 @@ | |||
1 | Freescale SOC USB controllers | ||
2 | |||
3 | The device node for a USB controller that is part of a Freescale | ||
4 | SOC is as described in the document "Open Firmware Recommended | ||
5 | Practice : Universal Serial Bus" with the following modifications | ||
6 | and additions : | ||
7 | |||
8 | Required properties : | ||
9 | - compatible : Should be "fsl-usb2-mph" for multi port host USB | ||
10 | controllers, or "fsl-usb2-dr" for dual role USB controllers | ||
11 | or "fsl,mpc5121-usb2-dr" for dual role USB controllers of MPC5121 | ||
12 | - phy_type : For multi port host USB controllers, should be one of | ||
13 | "ulpi", or "serial". For dual role USB controllers, should be | ||
14 | one of "ulpi", "utmi", "utmi_wide", or "serial". | ||
15 | - reg : Offset and length of the register set for the device | ||
16 | - port0 : boolean; if defined, indicates port0 is connected for | ||
17 | fsl-usb2-mph compatible controllers. Either this property or | ||
18 | "port1" (or both) must be defined for "fsl-usb2-mph" compatible | ||
19 | controllers. | ||
20 | - port1 : boolean; if defined, indicates port1 is connected for | ||
21 | fsl-usb2-mph compatible controllers. Either this property or | ||
22 | "port0" (or both) must be defined for "fsl-usb2-mph" compatible | ||
23 | controllers. | ||
24 | - dr_mode : indicates the working mode for "fsl-usb2-dr" compatible | ||
25 | controllers. Can be "host", "peripheral", or "otg". Default to | ||
26 | "host" if not defined for backward compatibility. | ||
27 | |||
28 | Recommended properties : | ||
29 | - interrupts : <a b> where a is the interrupt number and b is a | ||
30 | field that represents an encoding of the sense and level | ||
31 | information for the interrupt. This should be encoded based on | ||
32 | the information in section 2) depending on the type of interrupt | ||
33 | controller you have. | ||
34 | - interrupt-parent : the phandle for the interrupt controller that | ||
35 | services interrupts for this device. | ||
36 | |||
37 | Optional properties : | ||
38 | - fsl,invert-drvvbus : boolean; for MPC5121 USB0 only. Indicates the | ||
39 | port power polarity of internal PHY signal DRVVBUS is inverted. | ||
40 | - fsl,invert-pwr-fault : boolean; for MPC5121 USB0 only. Indicates | ||
41 | the PWR_FAULT signal polarity is inverted. | ||
42 | |||
43 | Example multi port host USB controller device node : | ||
44 | usb@22000 { | ||
45 | compatible = "fsl-usb2-mph"; | ||
46 | reg = <22000 1000>; | ||
47 | #address-cells = <1>; | ||
48 | #size-cells = <0>; | ||
49 | interrupt-parent = <700>; | ||
50 | interrupts = <27 1>; | ||
51 | phy_type = "ulpi"; | ||
52 | port0; | ||
53 | port1; | ||
54 | }; | ||
55 | |||
56 | Example dual role USB controller device node : | ||
57 | usb@23000 { | ||
58 | compatible = "fsl-usb2-dr"; | ||
59 | reg = <23000 1000>; | ||
60 | #address-cells = <1>; | ||
61 | #size-cells = <0>; | ||
62 | interrupt-parent = <700>; | ||
63 | interrupts = <26 1>; | ||
64 | dr_mode = "otg"; | ||
65 | phy = "ulpi"; | ||
66 | }; | ||
67 | |||
68 | Example dual role USB controller device node for MPC5121ADS: | ||
69 | |||
70 | usb@4000 { | ||
71 | compatible = "fsl,mpc5121-usb2-dr"; | ||
72 | reg = <0x4000 0x1000>; | ||
73 | #address-cells = <1>; | ||
74 | #size-cells = <0>; | ||
75 | interrupt-parent = < &ipic >; | ||
76 | interrupts = <44 0x8>; | ||
77 | dr_mode = "otg"; | ||
78 | phy_type = "utmi_wide"; | ||
79 | fsl,invert-drvvbus; | ||
80 | fsl,invert-pwr-fault; | ||
81 | }; | ||
diff --git a/Documentation/devicetree/bindings/usb/usb-ehci.txt b/Documentation/devicetree/bindings/usb/usb-ehci.txt new file mode 100644 index 000000000000..fa18612f757b --- /dev/null +++ b/Documentation/devicetree/bindings/usb/usb-ehci.txt | |||
@@ -0,0 +1,25 @@ | |||
1 | USB EHCI controllers | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : should be "usb-ehci". | ||
5 | - reg : should contain at least address and length of the standard EHCI | ||
6 | register set for the device. Optional platform-dependent registers | ||
7 | (debug-port or other) can be also specified here, but only after | ||
8 | definition of standard EHCI registers. | ||
9 | - interrupts : one EHCI interrupt should be described here. | ||
10 | If device registers are implemented in big endian mode, the device | ||
11 | node should have "big-endian-regs" property. | ||
12 | If controller implementation operates with big endian descriptors, | ||
13 | "big-endian-desc" property should be specified. | ||
14 | If both big endian registers and descriptors are used by the controller | ||
15 | implementation, "big-endian" property can be specified instead of having | ||
16 | both "big-endian-regs" and "big-endian-desc". | ||
17 | |||
18 | Example (Sequoia 440EPx): | ||
19 | ehci@e0000300 { | ||
20 | compatible = "ibm,usb-ehci-440epx", "usb-ehci"; | ||
21 | interrupt-parent = <&UIC0>; | ||
22 | interrupts = <1a 4>; | ||
23 | reg = <0 e0000300 90 0 e0000390 70>; | ||
24 | big-endian; | ||
25 | }; | ||
diff --git a/Documentation/devicetree/bindings/xilinx.txt b/Documentation/devicetree/bindings/xilinx.txt new file mode 100644 index 000000000000..299d0923537b --- /dev/null +++ b/Documentation/devicetree/bindings/xilinx.txt | |||
@@ -0,0 +1,306 @@ | |||
1 | d) Xilinx IP cores | ||
2 | |||
3 | The Xilinx EDK toolchain ships with a set of IP cores (devices) for use | ||
4 | in Xilinx Spartan and Virtex FPGAs. The devices cover the whole range | ||
5 | of standard device types (network, serial, etc.) and miscellaneous | ||
6 | devices (gpio, LCD, spi, etc). Also, since these devices are | ||
7 | implemented within the fpga fabric every instance of the device can be | ||
8 | synthesised with different options that change the behaviour. | ||
9 | |||
10 | Each IP-core has a set of parameters which the FPGA designer can use to | ||
11 | control how the core is synthesized. Historically, the EDK tool would | ||
12 | extract the device parameters relevant to device drivers and copy them | ||
13 | into an 'xparameters.h' in the form of #define symbols. This tells the | ||
14 | device drivers how the IP cores are configured, but it requires the kernel | ||
15 | to be recompiled every time the FPGA bitstream is resynthesized. | ||
16 | |||
17 | The new approach is to export the parameters into the device tree and | ||
18 | generate a new device tree each time the FPGA bitstream changes. The | ||
19 | parameters which used to be exported as #defines will now become | ||
20 | properties of the device node. In general, device nodes for IP-cores | ||
21 | will take the following form: | ||
22 | |||
23 | (name): (generic-name)@(base-address) { | ||
24 | compatible = "xlnx,(ip-core-name)-(HW_VER)" | ||
25 | [, (list of compatible devices), ...]; | ||
26 | reg = <(baseaddr) (size)>; | ||
27 | interrupt-parent = <&interrupt-controller-phandle>; | ||
28 | interrupts = < ... >; | ||
29 | xlnx,(parameter1) = "(string-value)"; | ||
30 | xlnx,(parameter2) = <(int-value)>; | ||
31 | }; | ||
32 | |||
33 | (generic-name): an open firmware-style name that describes the | ||
34 | generic class of device. Preferably, this is one word, such | ||
35 | as 'serial' or 'ethernet'. | ||
36 | (ip-core-name): the name of the ip block (given after the BEGIN | ||
37 | directive in system.mhs). Should be in lowercase | ||
38 | and all underscores '_' converted to dashes '-'. | ||
39 | (name): is derived from the "PARAMETER INSTANCE" value. | ||
40 | (parameter#): C_* parameters from system.mhs. The C_ prefix is | ||
41 | dropped from the parameter name, the name is converted | ||
42 | to lowercase and all underscore '_' characters are | ||
43 | converted to dashes '-'. | ||
44 | (baseaddr): the baseaddr parameter value (often named C_BASEADDR). | ||
45 | (HW_VER): from the HW_VER parameter. | ||
46 | (size): the address range size (often C_HIGHADDR - C_BASEADDR + 1). | ||
47 | |||
48 | Typically, the compatible list will include the exact IP core version | ||
49 | followed by an older IP core version which implements the same | ||
50 | interface or any other device with the same interface. | ||
51 | |||
52 | 'reg', 'interrupt-parent' and 'interrupts' are all optional properties. | ||
53 | |||
54 | For example, the following block from system.mhs: | ||
55 | |||
56 | BEGIN opb_uartlite | ||
57 | PARAMETER INSTANCE = opb_uartlite_0 | ||
58 | PARAMETER HW_VER = 1.00.b | ||
59 | PARAMETER C_BAUDRATE = 115200 | ||
60 | PARAMETER C_DATA_BITS = 8 | ||
61 | PARAMETER C_ODD_PARITY = 0 | ||
62 | PARAMETER C_USE_PARITY = 0 | ||
63 | PARAMETER C_CLK_FREQ = 50000000 | ||
64 | PARAMETER C_BASEADDR = 0xEC100000 | ||
65 | PARAMETER C_HIGHADDR = 0xEC10FFFF | ||
66 | BUS_INTERFACE SOPB = opb_7 | ||
67 | PORT OPB_Clk = CLK_50MHz | ||
68 | PORT Interrupt = opb_uartlite_0_Interrupt | ||
69 | PORT RX = opb_uartlite_0_RX | ||
70 | PORT TX = opb_uartlite_0_TX | ||
71 | PORT OPB_Rst = sys_bus_reset_0 | ||
72 | END | ||
73 | |||
74 | becomes the following device tree node: | ||
75 | |||
76 | opb_uartlite_0: serial@ec100000 { | ||
77 | device_type = "serial"; | ||
78 | compatible = "xlnx,opb-uartlite-1.00.b"; | ||
79 | reg = <ec100000 10000>; | ||
80 | interrupt-parent = <&opb_intc_0>; | ||
81 | interrupts = <1 0>; // got this from the opb_intc parameters | ||
82 | current-speed = <d#115200>; // standard serial device prop | ||
83 | clock-frequency = <d#50000000>; // standard serial device prop | ||
84 | xlnx,data-bits = <8>; | ||
85 | xlnx,odd-parity = <0>; | ||
86 | xlnx,use-parity = <0>; | ||
87 | }; | ||
88 | |||
89 | Some IP cores actually implement 2 or more logical devices. In | ||
90 | this case, the device should still describe the whole IP core with | ||
91 | a single node and add a child node for each logical device. The | ||
92 | ranges property can be used to translate from parent IP-core to the | ||
93 | registers of each device. In addition, the parent node should be | ||
94 | compatible with the bus type 'xlnx,compound', and should contain | ||
95 | #address-cells and #size-cells, as with any other bus. (Note: this | ||
96 | makes the assumption that both logical devices have the same bus | ||
97 | binding. If this is not true, then separate nodes should be used | ||
98 | for each logical device). The 'cell-index' property can be used to | ||
99 | enumerate logical devices within an IP core. For example, the | ||
100 | following is the system.mhs entry for the dual ps2 controller found | ||
101 | on the ml403 reference design. | ||
102 | |||
103 | BEGIN opb_ps2_dual_ref | ||
104 | PARAMETER INSTANCE = opb_ps2_dual_ref_0 | ||
105 | PARAMETER HW_VER = 1.00.a | ||
106 | PARAMETER C_BASEADDR = 0xA9000000 | ||
107 | PARAMETER C_HIGHADDR = 0xA9001FFF | ||
108 | BUS_INTERFACE SOPB = opb_v20_0 | ||
109 | PORT Sys_Intr1 = ps2_1_intr | ||
110 | PORT Sys_Intr2 = ps2_2_intr | ||
111 | PORT Clkin1 = ps2_clk_rx_1 | ||
112 | PORT Clkin2 = ps2_clk_rx_2 | ||
113 | PORT Clkpd1 = ps2_clk_tx_1 | ||
114 | PORT Clkpd2 = ps2_clk_tx_2 | ||
115 | PORT Rx1 = ps2_d_rx_1 | ||
116 | PORT Rx2 = ps2_d_rx_2 | ||
117 | PORT Txpd1 = ps2_d_tx_1 | ||
118 | PORT Txpd2 = ps2_d_tx_2 | ||
119 | END | ||
120 | |||
121 | It would result in the following device tree nodes: | ||
122 | |||
123 | opb_ps2_dual_ref_0: opb-ps2-dual-ref@a9000000 { | ||
124 | #address-cells = <1>; | ||
125 | #size-cells = <1>; | ||
126 | compatible = "xlnx,compound"; | ||
127 | ranges = <0 a9000000 2000>; | ||
128 | // If this device had extra parameters, then they would | ||
129 | // go here. | ||
130 | ps2@0 { | ||
131 | compatible = "xlnx,opb-ps2-dual-ref-1.00.a"; | ||
132 | reg = <0 40>; | ||
133 | interrupt-parent = <&opb_intc_0>; | ||
134 | interrupts = <3 0>; | ||
135 | cell-index = <0>; | ||
136 | }; | ||
137 | ps2@1000 { | ||
138 | compatible = "xlnx,opb-ps2-dual-ref-1.00.a"; | ||
139 | reg = <1000 40>; | ||
140 | interrupt-parent = <&opb_intc_0>; | ||
141 | interrupts = <3 0>; | ||
142 | cell-index = <0>; | ||
143 | }; | ||
144 | }; | ||
145 | |||
146 | Also, the system.mhs file defines bus attachments from the processor | ||
147 | to the devices. The device tree structure should reflect the bus | ||
148 | attachments. Again an example; this system.mhs fragment: | ||
149 | |||
150 | BEGIN ppc405_virtex4 | ||
151 | PARAMETER INSTANCE = ppc405_0 | ||
152 | PARAMETER HW_VER = 1.01.a | ||
153 | BUS_INTERFACE DPLB = plb_v34_0 | ||
154 | BUS_INTERFACE IPLB = plb_v34_0 | ||
155 | END | ||
156 | |||
157 | BEGIN opb_intc | ||
158 | PARAMETER INSTANCE = opb_intc_0 | ||
159 | PARAMETER HW_VER = 1.00.c | ||
160 | PARAMETER C_BASEADDR = 0xD1000FC0 | ||
161 | PARAMETER C_HIGHADDR = 0xD1000FDF | ||
162 | BUS_INTERFACE SOPB = opb_v20_0 | ||
163 | END | ||
164 | |||
165 | BEGIN opb_uart16550 | ||
166 | PARAMETER INSTANCE = opb_uart16550_0 | ||
167 | PARAMETER HW_VER = 1.00.d | ||
168 | PARAMETER C_BASEADDR = 0xa0000000 | ||
169 | PARAMETER C_HIGHADDR = 0xa0001FFF | ||
170 | BUS_INTERFACE SOPB = opb_v20_0 | ||
171 | END | ||
172 | |||
173 | BEGIN plb_v34 | ||
174 | PARAMETER INSTANCE = plb_v34_0 | ||
175 | PARAMETER HW_VER = 1.02.a | ||
176 | END | ||
177 | |||
178 | BEGIN plb_bram_if_cntlr | ||
179 | PARAMETER INSTANCE = plb_bram_if_cntlr_0 | ||
180 | PARAMETER HW_VER = 1.00.b | ||
181 | PARAMETER C_BASEADDR = 0xFFFF0000 | ||
182 | PARAMETER C_HIGHADDR = 0xFFFFFFFF | ||
183 | BUS_INTERFACE SPLB = plb_v34_0 | ||
184 | END | ||
185 | |||
186 | BEGIN plb2opb_bridge | ||
187 | PARAMETER INSTANCE = plb2opb_bridge_0 | ||
188 | PARAMETER HW_VER = 1.01.a | ||
189 | PARAMETER C_RNG0_BASEADDR = 0x20000000 | ||
190 | PARAMETER C_RNG0_HIGHADDR = 0x3FFFFFFF | ||
191 | PARAMETER C_RNG1_BASEADDR = 0x60000000 | ||
192 | PARAMETER C_RNG1_HIGHADDR = 0x7FFFFFFF | ||
193 | PARAMETER C_RNG2_BASEADDR = 0x80000000 | ||
194 | PARAMETER C_RNG2_HIGHADDR = 0xBFFFFFFF | ||
195 | PARAMETER C_RNG3_BASEADDR = 0xC0000000 | ||
196 | PARAMETER C_RNG3_HIGHADDR = 0xDFFFFFFF | ||
197 | BUS_INTERFACE SPLB = plb_v34_0 | ||
198 | BUS_INTERFACE MOPB = opb_v20_0 | ||
199 | END | ||
200 | |||
201 | Gives this device tree (some properties removed for clarity): | ||
202 | |||
203 | plb@0 { | ||
204 | #address-cells = <1>; | ||
205 | #size-cells = <1>; | ||
206 | compatible = "xlnx,plb-v34-1.02.a"; | ||
207 | device_type = "ibm,plb"; | ||
208 | ranges; // 1:1 translation | ||
209 | |||
210 | plb_bram_if_cntrl_0: bram@ffff0000 { | ||
211 | reg = <ffff0000 10000>; | ||
212 | } | ||
213 | |||
214 | opb@20000000 { | ||
215 | #address-cells = <1>; | ||
216 | #size-cells = <1>; | ||
217 | ranges = <20000000 20000000 20000000 | ||
218 | 60000000 60000000 20000000 | ||
219 | 80000000 80000000 40000000 | ||
220 | c0000000 c0000000 20000000>; | ||
221 | |||
222 | opb_uart16550_0: serial@a0000000 { | ||
223 | reg = <a00000000 2000>; | ||
224 | }; | ||
225 | |||
226 | opb_intc_0: interrupt-controller@d1000fc0 { | ||
227 | reg = <d1000fc0 20>; | ||
228 | }; | ||
229 | }; | ||
230 | }; | ||
231 | |||
232 | That covers the general approach to binding xilinx IP cores into the | ||
233 | device tree. The following are bindings for specific devices: | ||
234 | |||
235 | i) Xilinx ML300 Framebuffer | ||
236 | |||
237 | Simple framebuffer device from the ML300 reference design (also on the | ||
238 | ML403 reference design as well as others). | ||
239 | |||
240 | Optional properties: | ||
241 | - resolution = <xres yres> : pixel resolution of framebuffer. Some | ||
242 | implementations use a different resolution. | ||
243 | Default is <d#640 d#480> | ||
244 | - virt-resolution = <xvirt yvirt> : Size of framebuffer in memory. | ||
245 | Default is <d#1024 d#480>. | ||
246 | - rotate-display (empty) : rotate display 180 degrees. | ||
247 | |||
248 | ii) Xilinx SystemACE | ||
249 | |||
250 | The Xilinx SystemACE device is used to program FPGAs from an FPGA | ||
251 | bitstream stored on a CF card. It can also be used as a generic CF | ||
252 | interface device. | ||
253 | |||
254 | Optional properties: | ||
255 | - 8-bit (empty) : Set this property for SystemACE in 8 bit mode | ||
256 | |||
257 | iii) Xilinx EMAC and Xilinx TEMAC | ||
258 | |||
259 | Xilinx Ethernet devices. In addition to general xilinx properties | ||
260 | listed above, nodes for these devices should include a phy-handle | ||
261 | property, and may include other common network device properties | ||
262 | like local-mac-address. | ||
263 | |||
264 | iv) Xilinx Uartlite | ||
265 | |||
266 | Xilinx uartlite devices are simple fixed speed serial ports. | ||
267 | |||
268 | Required properties: | ||
269 | - current-speed : Baud rate of uartlite | ||
270 | |||
271 | v) Xilinx hwicap | ||
272 | |||
273 | Xilinx hwicap devices provide access to the configuration logic | ||
274 | of the FPGA through the Internal Configuration Access Port | ||
275 | (ICAP). The ICAP enables partial reconfiguration of the FPGA, | ||
276 | readback of the configuration information, and some control over | ||
277 | 'warm boots' of the FPGA fabric. | ||
278 | |||
279 | Required properties: | ||
280 | - xlnx,family : The family of the FPGA, necessary since the | ||
281 | capabilities of the underlying ICAP hardware | ||
282 | differ between different families. May be | ||
283 | 'virtex2p', 'virtex4', or 'virtex5'. | ||
284 | |||
285 | vi) Xilinx Uart 16550 | ||
286 | |||
287 | Xilinx UART 16550 devices are very similar to the NS16550 but with | ||
288 | different register spacing and an offset from the base address. | ||
289 | |||
290 | Required properties: | ||
291 | - clock-frequency : Frequency of the clock input | ||
292 | - reg-offset : A value of 3 is required | ||
293 | - reg-shift : A value of 2 is required | ||
294 | |||
295 | vii) Xilinx USB Host controller | ||
296 | |||
297 | The Xilinx USB host controller is EHCI compatible but with a different | ||
298 | base address for the EHCI registers, and it is always a big-endian | ||
299 | USB Host controller. The hardware can be configured as high speed only, | ||
300 | or high speed/full speed hybrid. | ||
301 | |||
302 | Required properties: | ||
303 | - xlnx,support-usb-fs: A value 0 means the core is built as high speed | ||
304 | only. A value 1 means the core also supports | ||
305 | full speed devices. | ||
306 | |||
diff --git a/Documentation/devicetree/booting-without-of.txt b/Documentation/devicetree/booting-without-of.txt new file mode 100644 index 000000000000..7400d7555dc3 --- /dev/null +++ b/Documentation/devicetree/booting-without-of.txt | |||
@@ -0,0 +1,1447 @@ | |||
1 | Booting the Linux/ppc kernel without Open Firmware | ||
2 | -------------------------------------------------- | ||
3 | |||
4 | (c) 2005 Benjamin Herrenschmidt <benh at kernel.crashing.org>, | ||
5 | IBM Corp. | ||
6 | (c) 2005 Becky Bruce <becky.bruce at freescale.com>, | ||
7 | Freescale Semiconductor, FSL SOC and 32-bit additions | ||
8 | (c) 2006 MontaVista Software, Inc. | ||
9 | Flash chip node definition | ||
10 | |||
11 | Table of Contents | ||
12 | ================= | ||
13 | |||
14 | I - Introduction | ||
15 | 1) Entry point for arch/powerpc | ||
16 | 2) Board support | ||
17 | |||
18 | II - The DT block format | ||
19 | 1) Header | ||
20 | 2) Device tree generalities | ||
21 | 3) Device tree "structure" block | ||
22 | 4) Device tree "strings" block | ||
23 | |||
24 | III - Required content of the device tree | ||
25 | 1) Note about cells and address representation | ||
26 | 2) Note about "compatible" properties | ||
27 | 3) Note about "name" properties | ||
28 | 4) Note about node and property names and character set | ||
29 | 5) Required nodes and properties | ||
30 | a) The root node | ||
31 | b) The /cpus node | ||
32 | c) The /cpus/* nodes | ||
33 | d) the /memory node(s) | ||
34 | e) The /chosen node | ||
35 | f) the /soc<SOCname> node | ||
36 | |||
37 | IV - "dtc", the device tree compiler | ||
38 | |||
39 | V - Recommendations for a bootloader | ||
40 | |||
41 | VI - System-on-a-chip devices and nodes | ||
42 | 1) Defining child nodes of an SOC | ||
43 | 2) Representing devices without a current OF specification | ||
44 | a) PHY nodes | ||
45 | b) Interrupt controllers | ||
46 | c) 4xx/Axon EMAC ethernet nodes | ||
47 | d) Xilinx IP cores | ||
48 | e) USB EHCI controllers | ||
49 | f) MDIO on GPIOs | ||
50 | g) SPI busses | ||
51 | |||
52 | VII - Specifying interrupt information for devices | ||
53 | 1) interrupts property | ||
54 | 2) interrupt-parent property | ||
55 | 3) OpenPIC Interrupt Controllers | ||
56 | 4) ISA Interrupt Controllers | ||
57 | |||
58 | VIII - Specifying device power management information (sleep property) | ||
59 | |||
60 | Appendix A - Sample SOC node for MPC8540 | ||
61 | |||
62 | |||
63 | Revision Information | ||
64 | ==================== | ||
65 | |||
66 | May 18, 2005: Rev 0.1 - Initial draft, no chapter III yet. | ||
67 | |||
68 | May 19, 2005: Rev 0.2 - Add chapter III and bits & pieces here or | ||
69 | clarifies the fact that a lot of things are | ||
70 | optional, the kernel only requires a very | ||
71 | small device tree, though it is encouraged | ||
72 | to provide an as complete one as possible. | ||
73 | |||
74 | May 24, 2005: Rev 0.3 - Precise that DT block has to be in RAM | ||
75 | - Misc fixes | ||
76 | - Define version 3 and new format version 16 | ||
77 | for the DT block (version 16 needs kernel | ||
78 | patches, will be fwd separately). | ||
79 | String block now has a size, and full path | ||
80 | is replaced by unit name for more | ||
81 | compactness. | ||
82 | linux,phandle is made optional, only nodes | ||
83 | that are referenced by other nodes need it. | ||
84 | "name" property is now automatically | ||
85 | deduced from the unit name | ||
86 | |||
87 | June 1, 2005: Rev 0.4 - Correct confusion between OF_DT_END and | ||
88 | OF_DT_END_NODE in structure definition. | ||
89 | - Change version 16 format to always align | ||
90 | property data to 4 bytes. Since tokens are | ||
91 | already aligned, that means no specific | ||
92 | required alignment between property size | ||
93 | and property data. The old style variable | ||
94 | alignment would make it impossible to do | ||
95 | "simple" insertion of properties using | ||
96 | memmove (thanks Milton for | ||
97 | noticing). Updated kernel patch as well | ||
98 | - Correct a few more alignment constraints | ||
99 | - Add a chapter about the device-tree | ||
100 | compiler and the textural representation of | ||
101 | the tree that can be "compiled" by dtc. | ||
102 | |||
103 | November 21, 2005: Rev 0.5 | ||
104 | - Additions/generalizations for 32-bit | ||
105 | - Changed to reflect the new arch/powerpc | ||
106 | structure | ||
107 | - Added chapter VI | ||
108 | |||
109 | |||
110 | ToDo: | ||
111 | - Add some definitions of interrupt tree (simple/complex) | ||
112 | - Add some definitions for PCI host bridges | ||
113 | - Add some common address format examples | ||
114 | - Add definitions for standard properties and "compatible" | ||
115 | names for cells that are not already defined by the existing | ||
116 | OF spec. | ||
117 | - Compare FSL SOC use of PCI to standard and make sure no new | ||
118 | node definition required. | ||
119 | - Add more information about node definitions for SOC devices | ||
120 | that currently have no standard, like the FSL CPM. | ||
121 | |||
122 | |||
123 | I - Introduction | ||
124 | ================ | ||
125 | |||
126 | During the recent development of the Linux/ppc64 kernel, and more | ||
127 | specifically, the addition of new platform types outside of the old | ||
128 | IBM pSeries/iSeries pair, it was decided to enforce some strict rules | ||
129 | regarding the kernel entry and bootloader <-> kernel interfaces, in | ||
130 | order to avoid the degeneration that had become the ppc32 kernel entry | ||
131 | point and the way a new platform should be added to the kernel. The | ||
132 | legacy iSeries platform breaks those rules as it predates this scheme, | ||
133 | but no new board support will be accepted in the main tree that | ||
134 | doesn't follow them properly. In addition, since the advent of the | ||
135 | arch/powerpc merged architecture for ppc32 and ppc64, new 32-bit | ||
136 | platforms and 32-bit platforms which move into arch/powerpc will be | ||
137 | required to use these rules as well. | ||
138 | |||
139 | The main requirement that will be defined in more detail below is | ||
140 | the presence of a device-tree whose format is defined after Open | ||
141 | Firmware specification. However, in order to make life easier | ||
142 | to embedded board vendors, the kernel doesn't require the device-tree | ||
143 | to represent every device in the system and only requires some nodes | ||
144 | and properties to be present. This will be described in detail in | ||
145 | section III, but, for example, the kernel does not require you to | ||
146 | create a node for every PCI device in the system. It is a requirement | ||
147 | to have a node for PCI host bridges in order to provide interrupt | ||
148 | routing informations and memory/IO ranges, among others. It is also | ||
149 | recommended to define nodes for on chip devices and other busses that | ||
150 | don't specifically fit in an existing OF specification. This creates a | ||
151 | great flexibility in the way the kernel can then probe those and match | ||
152 | drivers to device, without having to hard code all sorts of tables. It | ||
153 | also makes it more flexible for board vendors to do minor hardware | ||
154 | upgrades without significantly impacting the kernel code or cluttering | ||
155 | it with special cases. | ||
156 | |||
157 | |||
158 | 1) Entry point for arch/powerpc | ||
159 | ------------------------------- | ||
160 | |||
161 | There is one and one single entry point to the kernel, at the start | ||
162 | of the kernel image. That entry point supports two calling | ||
163 | conventions: | ||
164 | |||
165 | a) Boot from Open Firmware. If your firmware is compatible | ||
166 | with Open Firmware (IEEE 1275) or provides an OF compatible | ||
167 | client interface API (support for "interpret" callback of | ||
168 | forth words isn't required), you can enter the kernel with: | ||
169 | |||
170 | r5 : OF callback pointer as defined by IEEE 1275 | ||
171 | bindings to powerpc. Only the 32-bit client interface | ||
172 | is currently supported | ||
173 | |||
174 | r3, r4 : address & length of an initrd if any or 0 | ||
175 | |||
176 | The MMU is either on or off; the kernel will run the | ||
177 | trampoline located in arch/powerpc/kernel/prom_init.c to | ||
178 | extract the device-tree and other information from open | ||
179 | firmware and build a flattened device-tree as described | ||
180 | in b). prom_init() will then re-enter the kernel using | ||
181 | the second method. This trampoline code runs in the | ||
182 | context of the firmware, which is supposed to handle all | ||
183 | exceptions during that time. | ||
184 | |||
185 | b) Direct entry with a flattened device-tree block. This entry | ||
186 | point is called by a) after the OF trampoline and can also be | ||
187 | called directly by a bootloader that does not support the Open | ||
188 | Firmware client interface. It is also used by "kexec" to | ||
189 | implement "hot" booting of a new kernel from a previous | ||
190 | running one. This method is what I will describe in more | ||
191 | details in this document, as method a) is simply standard Open | ||
192 | Firmware, and thus should be implemented according to the | ||
193 | various standard documents defining it and its binding to the | ||
194 | PowerPC platform. The entry point definition then becomes: | ||
195 | |||
196 | r3 : physical pointer to the device-tree block | ||
197 | (defined in chapter II) in RAM | ||
198 | |||
199 | r4 : physical pointer to the kernel itself. This is | ||
200 | used by the assembly code to properly disable the MMU | ||
201 | in case you are entering the kernel with MMU enabled | ||
202 | and a non-1:1 mapping. | ||
203 | |||
204 | r5 : NULL (as to differentiate with method a) | ||
205 | |||
206 | Note about SMP entry: Either your firmware puts your other | ||
207 | CPUs in some sleep loop or spin loop in ROM where you can get | ||
208 | them out via a soft reset or some other means, in which case | ||
209 | you don't need to care, or you'll have to enter the kernel | ||
210 | with all CPUs. The way to do that with method b) will be | ||
211 | described in a later revision of this document. | ||
212 | |||
213 | |||
214 | 2) Board support | ||
215 | ---------------- | ||
216 | |||
217 | 64-bit kernels: | ||
218 | |||
219 | Board supports (platforms) are not exclusive config options. An | ||
220 | arbitrary set of board supports can be built in a single kernel | ||
221 | image. The kernel will "know" what set of functions to use for a | ||
222 | given platform based on the content of the device-tree. Thus, you | ||
223 | should: | ||
224 | |||
225 | a) add your platform support as a _boolean_ option in | ||
226 | arch/powerpc/Kconfig, following the example of PPC_PSERIES, | ||
227 | PPC_PMAC and PPC_MAPLE. The later is probably a good | ||
228 | example of a board support to start from. | ||
229 | |||
230 | b) create your main platform file as | ||
231 | "arch/powerpc/platforms/myplatform/myboard_setup.c" and add it | ||
232 | to the Makefile under the condition of your CONFIG_ | ||
233 | option. This file will define a structure of type "ppc_md" | ||
234 | containing the various callbacks that the generic code will | ||
235 | use to get to your platform specific code | ||
236 | |||
237 | c) Add a reference to your "ppc_md" structure in the | ||
238 | "machines" table in arch/powerpc/kernel/setup_64.c if you are | ||
239 | a 64-bit platform. | ||
240 | |||
241 | d) request and get assigned a platform number (see PLATFORM_* | ||
242 | constants in arch/powerpc/include/asm/processor.h | ||
243 | |||
244 | 32-bit embedded kernels: | ||
245 | |||
246 | Currently, board support is essentially an exclusive config option. | ||
247 | The kernel is configured for a single platform. Part of the reason | ||
248 | for this is to keep kernels on embedded systems small and efficient; | ||
249 | part of this is due to the fact the code is already that way. In the | ||
250 | future, a kernel may support multiple platforms, but only if the | ||
251 | platforms feature the same core architecture. A single kernel build | ||
252 | cannot support both configurations with Book E and configurations | ||
253 | with classic Powerpc architectures. | ||
254 | |||
255 | 32-bit embedded platforms that are moved into arch/powerpc using a | ||
256 | flattened device tree should adopt the merged tree practice of | ||
257 | setting ppc_md up dynamically, even though the kernel is currently | ||
258 | built with support for only a single platform at a time. This allows | ||
259 | unification of the setup code, and will make it easier to go to a | ||
260 | multiple-platform-support model in the future. | ||
261 | |||
262 | NOTE: I believe the above will be true once Ben's done with the merge | ||
263 | of the boot sequences.... someone speak up if this is wrong! | ||
264 | |||
265 | To add a 32-bit embedded platform support, follow the instructions | ||
266 | for 64-bit platforms above, with the exception that the Kconfig | ||
267 | option should be set up such that the kernel builds exclusively for | ||
268 | the platform selected. The processor type for the platform should | ||
269 | enable another config option to select the specific board | ||
270 | supported. | ||
271 | |||
272 | NOTE: If Ben doesn't merge the setup files, may need to change this to | ||
273 | point to setup_32.c | ||
274 | |||
275 | |||
276 | I will describe later the boot process and various callbacks that | ||
277 | your platform should implement. | ||
278 | |||
279 | |||
280 | II - The DT block format | ||
281 | ======================== | ||
282 | |||
283 | |||
284 | This chapter defines the actual format of the flattened device-tree | ||
285 | passed to the kernel. The actual content of it and kernel requirements | ||
286 | are described later. You can find example of code manipulating that | ||
287 | format in various places, including arch/powerpc/kernel/prom_init.c | ||
288 | which will generate a flattened device-tree from the Open Firmware | ||
289 | representation, or the fs2dt utility which is part of the kexec tools | ||
290 | which will generate one from a filesystem representation. It is | ||
291 | expected that a bootloader like uboot provides a bit more support, | ||
292 | that will be discussed later as well. | ||
293 | |||
294 | Note: The block has to be in main memory. It has to be accessible in | ||
295 | both real mode and virtual mode with no mapping other than main | ||
296 | memory. If you are writing a simple flash bootloader, it should copy | ||
297 | the block to RAM before passing it to the kernel. | ||
298 | |||
299 | |||
300 | 1) Header | ||
301 | --------- | ||
302 | |||
303 | The kernel is entered with r3 pointing to an area of memory that is | ||
304 | roughly described in arch/powerpc/include/asm/prom.h by the structure | ||
305 | boot_param_header: | ||
306 | |||
307 | struct boot_param_header { | ||
308 | u32 magic; /* magic word OF_DT_HEADER */ | ||
309 | u32 totalsize; /* total size of DT block */ | ||
310 | u32 off_dt_struct; /* offset to structure */ | ||
311 | u32 off_dt_strings; /* offset to strings */ | ||
312 | u32 off_mem_rsvmap; /* offset to memory reserve map | ||
313 | */ | ||
314 | u32 version; /* format version */ | ||
315 | u32 last_comp_version; /* last compatible version */ | ||
316 | |||
317 | /* version 2 fields below */ | ||
318 | u32 boot_cpuid_phys; /* Which physical CPU id we're | ||
319 | booting on */ | ||
320 | /* version 3 fields below */ | ||
321 | u32 size_dt_strings; /* size of the strings block */ | ||
322 | |||
323 | /* version 17 fields below */ | ||
324 | u32 size_dt_struct; /* size of the DT structure block */ | ||
325 | }; | ||
326 | |||
327 | Along with the constants: | ||
328 | |||
329 | /* Definitions used by the flattened device tree */ | ||
330 | #define OF_DT_HEADER 0xd00dfeed /* 4: version, | ||
331 | 4: total size */ | ||
332 | #define OF_DT_BEGIN_NODE 0x1 /* Start node: full name | ||
333 | */ | ||
334 | #define OF_DT_END_NODE 0x2 /* End node */ | ||
335 | #define OF_DT_PROP 0x3 /* Property: name off, | ||
336 | size, content */ | ||
337 | #define OF_DT_END 0x9 | ||
338 | |||
339 | All values in this header are in big endian format, the various | ||
340 | fields in this header are defined more precisely below. All | ||
341 | "offset" values are in bytes from the start of the header; that is | ||
342 | from the value of r3. | ||
343 | |||
344 | - magic | ||
345 | |||
346 | This is a magic value that "marks" the beginning of the | ||
347 | device-tree block header. It contains the value 0xd00dfeed and is | ||
348 | defined by the constant OF_DT_HEADER | ||
349 | |||
350 | - totalsize | ||
351 | |||
352 | This is the total size of the DT block including the header. The | ||
353 | "DT" block should enclose all data structures defined in this | ||
354 | chapter (who are pointed to by offsets in this header). That is, | ||
355 | the device-tree structure, strings, and the memory reserve map. | ||
356 | |||
357 | - off_dt_struct | ||
358 | |||
359 | This is an offset from the beginning of the header to the start | ||
360 | of the "structure" part the device tree. (see 2) device tree) | ||
361 | |||
362 | - off_dt_strings | ||
363 | |||
364 | This is an offset from the beginning of the header to the start | ||
365 | of the "strings" part of the device-tree | ||
366 | |||
367 | - off_mem_rsvmap | ||
368 | |||
369 | This is an offset from the beginning of the header to the start | ||
370 | of the reserved memory map. This map is a list of pairs of 64- | ||
371 | bit integers. Each pair is a physical address and a size. The | ||
372 | list is terminated by an entry of size 0. This map provides the | ||
373 | kernel with a list of physical memory areas that are "reserved" | ||
374 | and thus not to be used for memory allocations, especially during | ||
375 | early initialization. The kernel needs to allocate memory during | ||
376 | boot for things like un-flattening the device-tree, allocating an | ||
377 | MMU hash table, etc... Those allocations must be done in such a | ||
378 | way to avoid overriding critical things like, on Open Firmware | ||
379 | capable machines, the RTAS instance, or on some pSeries, the TCE | ||
380 | tables used for the iommu. Typically, the reserve map should | ||
381 | contain _at least_ this DT block itself (header,total_size). If | ||
382 | you are passing an initrd to the kernel, you should reserve it as | ||
383 | well. You do not need to reserve the kernel image itself. The map | ||
384 | should be 64-bit aligned. | ||
385 | |||
386 | - version | ||
387 | |||
388 | This is the version of this structure. Version 1 stops | ||
389 | here. Version 2 adds an additional field boot_cpuid_phys. | ||
390 | Version 3 adds the size of the strings block, allowing the kernel | ||
391 | to reallocate it easily at boot and free up the unused flattened | ||
392 | structure after expansion. Version 16 introduces a new more | ||
393 | "compact" format for the tree itself that is however not backward | ||
394 | compatible. Version 17 adds an additional field, size_dt_struct, | ||
395 | allowing it to be reallocated or moved more easily (this is | ||
396 | particularly useful for bootloaders which need to make | ||
397 | adjustments to a device tree based on probed information). You | ||
398 | should always generate a structure of the highest version defined | ||
399 | at the time of your implementation. Currently that is version 17, | ||
400 | unless you explicitly aim at being backward compatible. | ||
401 | |||
402 | - last_comp_version | ||
403 | |||
404 | Last compatible version. This indicates down to what version of | ||
405 | the DT block you are backward compatible. For example, version 2 | ||
406 | is backward compatible with version 1 (that is, a kernel build | ||
407 | for version 1 will be able to boot with a version 2 format). You | ||
408 | should put a 1 in this field if you generate a device tree of | ||
409 | version 1 to 3, or 16 if you generate a tree of version 16 or 17 | ||
410 | using the new unit name format. | ||
411 | |||
412 | - boot_cpuid_phys | ||
413 | |||
414 | This field only exist on version 2 headers. It indicate which | ||
415 | physical CPU ID is calling the kernel entry point. This is used, | ||
416 | among others, by kexec. If you are on an SMP system, this value | ||
417 | should match the content of the "reg" property of the CPU node in | ||
418 | the device-tree corresponding to the CPU calling the kernel entry | ||
419 | point (see further chapters for more informations on the required | ||
420 | device-tree contents) | ||
421 | |||
422 | - size_dt_strings | ||
423 | |||
424 | This field only exists on version 3 and later headers. It | ||
425 | gives the size of the "strings" section of the device tree (which | ||
426 | starts at the offset given by off_dt_strings). | ||
427 | |||
428 | - size_dt_struct | ||
429 | |||
430 | This field only exists on version 17 and later headers. It gives | ||
431 | the size of the "structure" section of the device tree (which | ||
432 | starts at the offset given by off_dt_struct). | ||
433 | |||
434 | So the typical layout of a DT block (though the various parts don't | ||
435 | need to be in that order) looks like this (addresses go from top to | ||
436 | bottom): | ||
437 | |||
438 | |||
439 | ------------------------------ | ||
440 | r3 -> | struct boot_param_header | | ||
441 | ------------------------------ | ||
442 | | (alignment gap) (*) | | ||
443 | ------------------------------ | ||
444 | | memory reserve map | | ||
445 | ------------------------------ | ||
446 | | (alignment gap) | | ||
447 | ------------------------------ | ||
448 | | | | ||
449 | | device-tree structure | | ||
450 | | | | ||
451 | ------------------------------ | ||
452 | | (alignment gap) | | ||
453 | ------------------------------ | ||
454 | | | | ||
455 | | device-tree strings | | ||
456 | | | | ||
457 | -----> ------------------------------ | ||
458 | | | ||
459 | | | ||
460 | --- (r3 + totalsize) | ||
461 | |||
462 | (*) The alignment gaps are not necessarily present; their presence | ||
463 | and size are dependent on the various alignment requirements of | ||
464 | the individual data blocks. | ||
465 | |||
466 | |||
467 | 2) Device tree generalities | ||
468 | --------------------------- | ||
469 | |||
470 | This device-tree itself is separated in two different blocks, a | ||
471 | structure block and a strings block. Both need to be aligned to a 4 | ||
472 | byte boundary. | ||
473 | |||
474 | First, let's quickly describe the device-tree concept before detailing | ||
475 | the storage format. This chapter does _not_ describe the detail of the | ||
476 | required types of nodes & properties for the kernel, this is done | ||
477 | later in chapter III. | ||
478 | |||
479 | The device-tree layout is strongly inherited from the definition of | ||
480 | the Open Firmware IEEE 1275 device-tree. It's basically a tree of | ||
481 | nodes, each node having two or more named properties. A property can | ||
482 | have a value or not. | ||
483 | |||
484 | It is a tree, so each node has one and only one parent except for the | ||
485 | root node who has no parent. | ||
486 | |||
487 | A node has 2 names. The actual node name is generally contained in a | ||
488 | property of type "name" in the node property list whose value is a | ||
489 | zero terminated string and is mandatory for version 1 to 3 of the | ||
490 | format definition (as it is in Open Firmware). Version 16 makes it | ||
491 | optional as it can generate it from the unit name defined below. | ||
492 | |||
493 | There is also a "unit name" that is used to differentiate nodes with | ||
494 | the same name at the same level, it is usually made of the node | ||
495 | names, the "@" sign, and a "unit address", which definition is | ||
496 | specific to the bus type the node sits on. | ||
497 | |||
498 | The unit name doesn't exist as a property per-se but is included in | ||
499 | the device-tree structure. It is typically used to represent "path" in | ||
500 | the device-tree. More details about the actual format of these will be | ||
501 | below. | ||
502 | |||
503 | The kernel powerpc generic code does not make any formal use of the | ||
504 | unit address (though some board support code may do) so the only real | ||
505 | requirement here for the unit address is to ensure uniqueness of | ||
506 | the node unit name at a given level of the tree. Nodes with no notion | ||
507 | of address and no possible sibling of the same name (like /memory or | ||
508 | /cpus) may omit the unit address in the context of this specification, | ||
509 | or use the "@0" default unit address. The unit name is used to define | ||
510 | a node "full path", which is the concatenation of all parent node | ||
511 | unit names separated with "/". | ||
512 | |||
513 | The root node doesn't have a defined name, and isn't required to have | ||
514 | a name property either if you are using version 3 or earlier of the | ||
515 | format. It also has no unit address (no @ symbol followed by a unit | ||
516 | address). The root node unit name is thus an empty string. The full | ||
517 | path to the root node is "/". | ||
518 | |||
519 | Every node which actually represents an actual device (that is, a node | ||
520 | which isn't only a virtual "container" for more nodes, like "/cpus" | ||
521 | is) is also required to have a "device_type" property indicating the | ||
522 | type of node . | ||
523 | |||
524 | Finally, every node that can be referenced from a property in another | ||
525 | node is required to have a "linux,phandle" property. Real open | ||
526 | firmware implementations provide a unique "phandle" value for every | ||
527 | node that the "prom_init()" trampoline code turns into | ||
528 | "linux,phandle" properties. However, this is made optional if the | ||
529 | flattened device tree is used directly. An example of a node | ||
530 | referencing another node via "phandle" is when laying out the | ||
531 | interrupt tree which will be described in a further version of this | ||
532 | document. | ||
533 | |||
534 | This "linux, phandle" property is a 32-bit value that uniquely | ||
535 | identifies a node. You are free to use whatever values or system of | ||
536 | values, internal pointers, or whatever to generate these, the only | ||
537 | requirement is that every node for which you provide that property has | ||
538 | a unique value for it. | ||
539 | |||
540 | Here is an example of a simple device-tree. In this example, an "o" | ||
541 | designates a node followed by the node unit name. Properties are | ||
542 | presented with their name followed by their content. "content" | ||
543 | represents an ASCII string (zero terminated) value, while <content> | ||
544 | represents a 32-bit hexadecimal value. The various nodes in this | ||
545 | example will be discussed in a later chapter. At this point, it is | ||
546 | only meant to give you a idea of what a device-tree looks like. I have | ||
547 | purposefully kept the "name" and "linux,phandle" properties which | ||
548 | aren't necessary in order to give you a better idea of what the tree | ||
549 | looks like in practice. | ||
550 | |||
551 | / o device-tree | ||
552 | |- name = "device-tree" | ||
553 | |- model = "MyBoardName" | ||
554 | |- compatible = "MyBoardFamilyName" | ||
555 | |- #address-cells = <2> | ||
556 | |- #size-cells = <2> | ||
557 | |- linux,phandle = <0> | ||
558 | | | ||
559 | o cpus | ||
560 | | | - name = "cpus" | ||
561 | | | - linux,phandle = <1> | ||
562 | | | - #address-cells = <1> | ||
563 | | | - #size-cells = <0> | ||
564 | | | | ||
565 | | o PowerPC,970@0 | ||
566 | | |- name = "PowerPC,970" | ||
567 | | |- device_type = "cpu" | ||
568 | | |- reg = <0> | ||
569 | | |- clock-frequency = <5f5e1000> | ||
570 | | |- 64-bit | ||
571 | | |- linux,phandle = <2> | ||
572 | | | ||
573 | o memory@0 | ||
574 | | |- name = "memory" | ||
575 | | |- device_type = "memory" | ||
576 | | |- reg = <00000000 00000000 00000000 20000000> | ||
577 | | |- linux,phandle = <3> | ||
578 | | | ||
579 | o chosen | ||
580 | |- name = "chosen" | ||
581 | |- bootargs = "root=/dev/sda2" | ||
582 | |- linux,phandle = <4> | ||
583 | |||
584 | This tree is almost a minimal tree. It pretty much contains the | ||
585 | minimal set of required nodes and properties to boot a linux kernel; | ||
586 | that is, some basic model informations at the root, the CPUs, and the | ||
587 | physical memory layout. It also includes misc information passed | ||
588 | through /chosen, like in this example, the platform type (mandatory) | ||
589 | and the kernel command line arguments (optional). | ||
590 | |||
591 | The /cpus/PowerPC,970@0/64-bit property is an example of a | ||
592 | property without a value. All other properties have a value. The | ||
593 | significance of the #address-cells and #size-cells properties will be | ||
594 | explained in chapter IV which defines precisely the required nodes and | ||
595 | properties and their content. | ||
596 | |||
597 | |||
598 | 3) Device tree "structure" block | ||
599 | |||
600 | The structure of the device tree is a linearized tree structure. The | ||
601 | "OF_DT_BEGIN_NODE" token starts a new node, and the "OF_DT_END_NODE" | ||
602 | ends that node definition. Child nodes are simply defined before | ||
603 | "OF_DT_END_NODE" (that is nodes within the node). A 'token' is a 32 | ||
604 | bit value. The tree has to be "finished" with a OF_DT_END token | ||
605 | |||
606 | Here's the basic structure of a single node: | ||
607 | |||
608 | * token OF_DT_BEGIN_NODE (that is 0x00000001) | ||
609 | * for version 1 to 3, this is the node full path as a zero | ||
610 | terminated string, starting with "/". For version 16 and later, | ||
611 | this is the node unit name only (or an empty string for the | ||
612 | root node) | ||
613 | * [align gap to next 4 bytes boundary] | ||
614 | * for each property: | ||
615 | * token OF_DT_PROP (that is 0x00000003) | ||
616 | * 32-bit value of property value size in bytes (or 0 if no | ||
617 | value) | ||
618 | * 32-bit value of offset in string block of property name | ||
619 | * property value data if any | ||
620 | * [align gap to next 4 bytes boundary] | ||
621 | * [child nodes if any] | ||
622 | * token OF_DT_END_NODE (that is 0x00000002) | ||
623 | |||
624 | So the node content can be summarized as a start token, a full path, | ||
625 | a list of properties, a list of child nodes, and an end token. Every | ||
626 | child node is a full node structure itself as defined above. | ||
627 | |||
628 | NOTE: The above definition requires that all property definitions for | ||
629 | a particular node MUST precede any subnode definitions for that node. | ||
630 | Although the structure would not be ambiguous if properties and | ||
631 | subnodes were intermingled, the kernel parser requires that the | ||
632 | properties come first (up until at least 2.6.22). Any tools | ||
633 | manipulating a flattened tree must take care to preserve this | ||
634 | constraint. | ||
635 | |||
636 | 4) Device tree "strings" block | ||
637 | |||
638 | In order to save space, property names, which are generally redundant, | ||
639 | are stored separately in the "strings" block. This block is simply the | ||
640 | whole bunch of zero terminated strings for all property names | ||
641 | concatenated together. The device-tree property definitions in the | ||
642 | structure block will contain offset values from the beginning of the | ||
643 | strings block. | ||
644 | |||
645 | |||
646 | III - Required content of the device tree | ||
647 | ========================================= | ||
648 | |||
649 | WARNING: All "linux,*" properties defined in this document apply only | ||
650 | to a flattened device-tree. If your platform uses a real | ||
651 | implementation of Open Firmware or an implementation compatible with | ||
652 | the Open Firmware client interface, those properties will be created | ||
653 | by the trampoline code in the kernel's prom_init() file. For example, | ||
654 | that's where you'll have to add code to detect your board model and | ||
655 | set the platform number. However, when using the flattened device-tree | ||
656 | entry point, there is no prom_init() pass, and thus you have to | ||
657 | provide those properties yourself. | ||
658 | |||
659 | |||
660 | 1) Note about cells and address representation | ||
661 | ---------------------------------------------- | ||
662 | |||
663 | The general rule is documented in the various Open Firmware | ||
664 | documentations. If you choose to describe a bus with the device-tree | ||
665 | and there exist an OF bus binding, then you should follow the | ||
666 | specification. However, the kernel does not require every single | ||
667 | device or bus to be described by the device tree. | ||
668 | |||
669 | In general, the format of an address for a device is defined by the | ||
670 | parent bus type, based on the #address-cells and #size-cells | ||
671 | properties. Note that the parent's parent definitions of #address-cells | ||
672 | and #size-cells are not inherited so every node with children must specify | ||
673 | them. The kernel requires the root node to have those properties defining | ||
674 | addresses format for devices directly mapped on the processor bus. | ||
675 | |||
676 | Those 2 properties define 'cells' for representing an address and a | ||
677 | size. A "cell" is a 32-bit number. For example, if both contain 2 | ||
678 | like the example tree given above, then an address and a size are both | ||
679 | composed of 2 cells, and each is a 64-bit number (cells are | ||
680 | concatenated and expected to be in big endian format). Another example | ||
681 | is the way Apple firmware defines them, with 2 cells for an address | ||
682 | and one cell for a size. Most 32-bit implementations should define | ||
683 | #address-cells and #size-cells to 1, which represents a 32-bit value. | ||
684 | Some 32-bit processors allow for physical addresses greater than 32 | ||
685 | bits; these processors should define #address-cells as 2. | ||
686 | |||
687 | "reg" properties are always a tuple of the type "address size" where | ||
688 | the number of cells of address and size is specified by the bus | ||
689 | #address-cells and #size-cells. When a bus supports various address | ||
690 | spaces and other flags relative to a given address allocation (like | ||
691 | prefetchable, etc...) those flags are usually added to the top level | ||
692 | bits of the physical address. For example, a PCI physical address is | ||
693 | made of 3 cells, the bottom two containing the actual address itself | ||
694 | while the top cell contains address space indication, flags, and pci | ||
695 | bus & device numbers. | ||
696 | |||
697 | For busses that support dynamic allocation, it's the accepted practice | ||
698 | to then not provide the address in "reg" (keep it 0) though while | ||
699 | providing a flag indicating the address is dynamically allocated, and | ||
700 | then, to provide a separate "assigned-addresses" property that | ||
701 | contains the fully allocated addresses. See the PCI OF bindings for | ||
702 | details. | ||
703 | |||
704 | In general, a simple bus with no address space bits and no dynamic | ||
705 | allocation is preferred if it reflects your hardware, as the existing | ||
706 | kernel address parsing functions will work out of the box. If you | ||
707 | define a bus type with a more complex address format, including things | ||
708 | like address space bits, you'll have to add a bus translator to the | ||
709 | prom_parse.c file of the recent kernels for your bus type. | ||
710 | |||
711 | The "reg" property only defines addresses and sizes (if #size-cells is | ||
712 | non-0) within a given bus. In order to translate addresses upward | ||
713 | (that is into parent bus addresses, and possibly into CPU physical | ||
714 | addresses), all busses must contain a "ranges" property. If the | ||
715 | "ranges" property is missing at a given level, it's assumed that | ||
716 | translation isn't possible, i.e., the registers are not visible on the | ||
717 | parent bus. The format of the "ranges" property for a bus is a list | ||
718 | of: | ||
719 | |||
720 | bus address, parent bus address, size | ||
721 | |||
722 | "bus address" is in the format of the bus this bus node is defining, | ||
723 | that is, for a PCI bridge, it would be a PCI address. Thus, (bus | ||
724 | address, size) defines a range of addresses for child devices. "parent | ||
725 | bus address" is in the format of the parent bus of this bus. For | ||
726 | example, for a PCI host controller, that would be a CPU address. For a | ||
727 | PCI<->ISA bridge, that would be a PCI address. It defines the base | ||
728 | address in the parent bus where the beginning of that range is mapped. | ||
729 | |||
730 | For a new 64-bit powerpc board, I recommend either the 2/2 format or | ||
731 | Apple's 2/1 format which is slightly more compact since sizes usually | ||
732 | fit in a single 32-bit word. New 32-bit powerpc boards should use a | ||
733 | 1/1 format, unless the processor supports physical addresses greater | ||
734 | than 32-bits, in which case a 2/1 format is recommended. | ||
735 | |||
736 | Alternatively, the "ranges" property may be empty, indicating that the | ||
737 | registers are visible on the parent bus using an identity mapping | ||
738 | translation. In other words, the parent bus address space is the same | ||
739 | as the child bus address space. | ||
740 | |||
741 | 2) Note about "compatible" properties | ||
742 | ------------------------------------- | ||
743 | |||
744 | These properties are optional, but recommended in devices and the root | ||
745 | node. The format of a "compatible" property is a list of concatenated | ||
746 | zero terminated strings. They allow a device to express its | ||
747 | compatibility with a family of similar devices, in some cases, | ||
748 | allowing a single driver to match against several devices regardless | ||
749 | of their actual names. | ||
750 | |||
751 | 3) Note about "name" properties | ||
752 | ------------------------------- | ||
753 | |||
754 | While earlier users of Open Firmware like OldWorld macintoshes tended | ||
755 | to use the actual device name for the "name" property, it's nowadays | ||
756 | considered a good practice to use a name that is closer to the device | ||
757 | class (often equal to device_type). For example, nowadays, ethernet | ||
758 | controllers are named "ethernet", an additional "model" property | ||
759 | defining precisely the chip type/model, and "compatible" property | ||
760 | defining the family in case a single driver can driver more than one | ||
761 | of these chips. However, the kernel doesn't generally put any | ||
762 | restriction on the "name" property; it is simply considered good | ||
763 | practice to follow the standard and its evolutions as closely as | ||
764 | possible. | ||
765 | |||
766 | Note also that the new format version 16 makes the "name" property | ||
767 | optional. If it's absent for a node, then the node's unit name is then | ||
768 | used to reconstruct the name. That is, the part of the unit name | ||
769 | before the "@" sign is used (or the entire unit name if no "@" sign | ||
770 | is present). | ||
771 | |||
772 | 4) Note about node and property names and character set | ||
773 | ------------------------------------------------------- | ||
774 | |||
775 | While open firmware provides more flexible usage of 8859-1, this | ||
776 | specification enforces more strict rules. Nodes and properties should | ||
777 | be comprised only of ASCII characters 'a' to 'z', '0' to | ||
778 | '9', ',', '.', '_', '+', '#', '?', and '-'. Node names additionally | ||
779 | allow uppercase characters 'A' to 'Z' (property names should be | ||
780 | lowercase. The fact that vendors like Apple don't respect this rule is | ||
781 | irrelevant here). Additionally, node and property names should always | ||
782 | begin with a character in the range 'a' to 'z' (or 'A' to 'Z' for node | ||
783 | names). | ||
784 | |||
785 | The maximum number of characters for both nodes and property names | ||
786 | is 31. In the case of node names, this is only the leftmost part of | ||
787 | a unit name (the pure "name" property), it doesn't include the unit | ||
788 | address which can extend beyond that limit. | ||
789 | |||
790 | |||
791 | 5) Required nodes and properties | ||
792 | -------------------------------- | ||
793 | These are all that are currently required. However, it is strongly | ||
794 | recommended that you expose PCI host bridges as documented in the | ||
795 | PCI binding to open firmware, and your interrupt tree as documented | ||
796 | in OF interrupt tree specification. | ||
797 | |||
798 | a) The root node | ||
799 | |||
800 | The root node requires some properties to be present: | ||
801 | |||
802 | - model : this is your board name/model | ||
803 | - #address-cells : address representation for "root" devices | ||
804 | - #size-cells: the size representation for "root" devices | ||
805 | - device_type : This property shouldn't be necessary. However, if | ||
806 | you decide to create a device_type for your root node, make sure it | ||
807 | is _not_ "chrp" unless your platform is a pSeries or PAPR compliant | ||
808 | one for 64-bit, or a CHRP-type machine for 32-bit as this will | ||
809 | matched by the kernel this way. | ||
810 | |||
811 | Additionally, some recommended properties are: | ||
812 | |||
813 | - compatible : the board "family" generally finds its way here, | ||
814 | for example, if you have 2 board models with a similar layout, | ||
815 | that typically get driven by the same platform code in the | ||
816 | kernel, you would use a different "model" property but put a | ||
817 | value in "compatible". The kernel doesn't directly use that | ||
818 | value but it is generally useful. | ||
819 | |||
820 | The root node is also generally where you add additional properties | ||
821 | specific to your board like the serial number if any, that sort of | ||
822 | thing. It is recommended that if you add any "custom" property whose | ||
823 | name may clash with standard defined ones, you prefix them with your | ||
824 | vendor name and a comma. | ||
825 | |||
826 | b) The /cpus node | ||
827 | |||
828 | This node is the parent of all individual CPU nodes. It doesn't | ||
829 | have any specific requirements, though it's generally good practice | ||
830 | to have at least: | ||
831 | |||
832 | #address-cells = <00000001> | ||
833 | #size-cells = <00000000> | ||
834 | |||
835 | This defines that the "address" for a CPU is a single cell, and has | ||
836 | no meaningful size. This is not necessary but the kernel will assume | ||
837 | that format when reading the "reg" properties of a CPU node, see | ||
838 | below | ||
839 | |||
840 | c) The /cpus/* nodes | ||
841 | |||
842 | So under /cpus, you are supposed to create a node for every CPU on | ||
843 | the machine. There is no specific restriction on the name of the | ||
844 | CPU, though It's common practice to call it PowerPC,<name>. For | ||
845 | example, Apple uses PowerPC,G5 while IBM uses PowerPC,970FX. | ||
846 | |||
847 | Required properties: | ||
848 | |||
849 | - device_type : has to be "cpu" | ||
850 | - reg : This is the physical CPU number, it's a single 32-bit cell | ||
851 | and is also used as-is as the unit number for constructing the | ||
852 | unit name in the full path. For example, with 2 CPUs, you would | ||
853 | have the full path: | ||
854 | /cpus/PowerPC,970FX@0 | ||
855 | /cpus/PowerPC,970FX@1 | ||
856 | (unit addresses do not require leading zeroes) | ||
857 | - d-cache-block-size : one cell, L1 data cache block size in bytes (*) | ||
858 | - i-cache-block-size : one cell, L1 instruction cache block size in | ||
859 | bytes | ||
860 | - d-cache-size : one cell, size of L1 data cache in bytes | ||
861 | - i-cache-size : one cell, size of L1 instruction cache in bytes | ||
862 | |||
863 | (*) The cache "block" size is the size on which the cache management | ||
864 | instructions operate. Historically, this document used the cache | ||
865 | "line" size here which is incorrect. The kernel will prefer the cache | ||
866 | block size and will fallback to cache line size for backward | ||
867 | compatibility. | ||
868 | |||
869 | Recommended properties: | ||
870 | |||
871 | - timebase-frequency : a cell indicating the frequency of the | ||
872 | timebase in Hz. This is not directly used by the generic code, | ||
873 | but you are welcome to copy/paste the pSeries code for setting | ||
874 | the kernel timebase/decrementer calibration based on this | ||
875 | value. | ||
876 | - clock-frequency : a cell indicating the CPU core clock frequency | ||
877 | in Hz. A new property will be defined for 64-bit values, but if | ||
878 | your frequency is < 4Ghz, one cell is enough. Here as well as | ||
879 | for the above, the common code doesn't use that property, but | ||
880 | you are welcome to re-use the pSeries or Maple one. A future | ||
881 | kernel version might provide a common function for this. | ||
882 | - d-cache-line-size : one cell, L1 data cache line size in bytes | ||
883 | if different from the block size | ||
884 | - i-cache-line-size : one cell, L1 instruction cache line size in | ||
885 | bytes if different from the block size | ||
886 | |||
887 | You are welcome to add any property you find relevant to your board, | ||
888 | like some information about the mechanism used to soft-reset the | ||
889 | CPUs. For example, Apple puts the GPIO number for CPU soft reset | ||
890 | lines in there as a "soft-reset" property since they start secondary | ||
891 | CPUs by soft-resetting them. | ||
892 | |||
893 | |||
894 | d) the /memory node(s) | ||
895 | |||
896 | To define the physical memory layout of your board, you should | ||
897 | create one or more memory node(s). You can either create a single | ||
898 | node with all memory ranges in its reg property, or you can create | ||
899 | several nodes, as you wish. The unit address (@ part) used for the | ||
900 | full path is the address of the first range of memory defined by a | ||
901 | given node. If you use a single memory node, this will typically be | ||
902 | @0. | ||
903 | |||
904 | Required properties: | ||
905 | |||
906 | - device_type : has to be "memory" | ||
907 | - reg : This property contains all the physical memory ranges of | ||
908 | your board. It's a list of addresses/sizes concatenated | ||
909 | together, with the number of cells of each defined by the | ||
910 | #address-cells and #size-cells of the root node. For example, | ||
911 | with both of these properties being 2 like in the example given | ||
912 | earlier, a 970 based machine with 6Gb of RAM could typically | ||
913 | have a "reg" property here that looks like: | ||
914 | |||
915 | 00000000 00000000 00000000 80000000 | ||
916 | 00000001 00000000 00000001 00000000 | ||
917 | |||
918 | That is a range starting at 0 of 0x80000000 bytes and a range | ||
919 | starting at 0x100000000 and of 0x100000000 bytes. You can see | ||
920 | that there is no memory covering the IO hole between 2Gb and | ||
921 | 4Gb. Some vendors prefer splitting those ranges into smaller | ||
922 | segments, but the kernel doesn't care. | ||
923 | |||
924 | e) The /chosen node | ||
925 | |||
926 | This node is a bit "special". Normally, that's where open firmware | ||
927 | puts some variable environment information, like the arguments, or | ||
928 | the default input/output devices. | ||
929 | |||
930 | This specification makes a few of these mandatory, but also defines | ||
931 | some linux-specific properties that would be normally constructed by | ||
932 | the prom_init() trampoline when booting with an OF client interface, | ||
933 | but that you have to provide yourself when using the flattened format. | ||
934 | |||
935 | Recommended properties: | ||
936 | |||
937 | - bootargs : This zero-terminated string is passed as the kernel | ||
938 | command line | ||
939 | - linux,stdout-path : This is the full path to your standard | ||
940 | console device if any. Typically, if you have serial devices on | ||
941 | your board, you may want to put the full path to the one set as | ||
942 | the default console in the firmware here, for the kernel to pick | ||
943 | it up as its own default console. If you look at the function | ||
944 | set_preferred_console() in arch/ppc64/kernel/setup.c, you'll see | ||
945 | that the kernel tries to find out the default console and has | ||
946 | knowledge of various types like 8250 serial ports. You may want | ||
947 | to extend this function to add your own. | ||
948 | |||
949 | Note that u-boot creates and fills in the chosen node for platforms | ||
950 | that use it. | ||
951 | |||
952 | (Note: a practice that is now obsolete was to include a property | ||
953 | under /chosen called interrupt-controller which had a phandle value | ||
954 | that pointed to the main interrupt controller) | ||
955 | |||
956 | f) the /soc<SOCname> node | ||
957 | |||
958 | This node is used to represent a system-on-a-chip (SOC) and must be | ||
959 | present if the processor is a SOC. The top-level soc node contains | ||
960 | information that is global to all devices on the SOC. The node name | ||
961 | should contain a unit address for the SOC, which is the base address | ||
962 | of the memory-mapped register set for the SOC. The name of an soc | ||
963 | node should start with "soc", and the remainder of the name should | ||
964 | represent the part number for the soc. For example, the MPC8540's | ||
965 | soc node would be called "soc8540". | ||
966 | |||
967 | Required properties: | ||
968 | |||
969 | - device_type : Should be "soc" | ||
970 | - ranges : Should be defined as specified in 1) to describe the | ||
971 | translation of SOC addresses for memory mapped SOC registers. | ||
972 | - bus-frequency: Contains the bus frequency for the SOC node. | ||
973 | Typically, the value of this field is filled in by the boot | ||
974 | loader. | ||
975 | |||
976 | |||
977 | Recommended properties: | ||
978 | |||
979 | - reg : This property defines the address and size of the | ||
980 | memory-mapped registers that are used for the SOC node itself. | ||
981 | It does not include the child device registers - these will be | ||
982 | defined inside each child node. The address specified in the | ||
983 | "reg" property should match the unit address of the SOC node. | ||
984 | - #address-cells : Address representation for "soc" devices. The | ||
985 | format of this field may vary depending on whether or not the | ||
986 | device registers are memory mapped. For memory mapped | ||
987 | registers, this field represents the number of cells needed to | ||
988 | represent the address of the registers. For SOCs that do not | ||
989 | use MMIO, a special address format should be defined that | ||
990 | contains enough cells to represent the required information. | ||
991 | See 1) above for more details on defining #address-cells. | ||
992 | - #size-cells : Size representation for "soc" devices | ||
993 | - #interrupt-cells : Defines the width of cells used to represent | ||
994 | interrupts. Typically this value is <2>, which includes a | ||
995 | 32-bit number that represents the interrupt number, and a | ||
996 | 32-bit number that represents the interrupt sense and level. | ||
997 | This field is only needed if the SOC contains an interrupt | ||
998 | controller. | ||
999 | |||
1000 | The SOC node may contain child nodes for each SOC device that the | ||
1001 | platform uses. Nodes should not be created for devices which exist | ||
1002 | on the SOC but are not used by a particular platform. See chapter VI | ||
1003 | for more information on how to specify devices that are part of a SOC. | ||
1004 | |||
1005 | Example SOC node for the MPC8540: | ||
1006 | |||
1007 | soc8540@e0000000 { | ||
1008 | #address-cells = <1>; | ||
1009 | #size-cells = <1>; | ||
1010 | #interrupt-cells = <2>; | ||
1011 | device_type = "soc"; | ||
1012 | ranges = <00000000 e0000000 00100000> | ||
1013 | reg = <e0000000 00003000>; | ||
1014 | bus-frequency = <0>; | ||
1015 | } | ||
1016 | |||
1017 | |||
1018 | |||
1019 | IV - "dtc", the device tree compiler | ||
1020 | ==================================== | ||
1021 | |||
1022 | |||
1023 | dtc source code can be found at | ||
1024 | <http://git.jdl.com/gitweb/?p=dtc.git> | ||
1025 | |||
1026 | WARNING: This version is still in early development stage; the | ||
1027 | resulting device-tree "blobs" have not yet been validated with the | ||
1028 | kernel. The current generated block lacks a useful reserve map (it will | ||
1029 | be fixed to generate an empty one, it's up to the bootloader to fill | ||
1030 | it up) among others. The error handling needs work, bugs are lurking, | ||
1031 | etc... | ||
1032 | |||
1033 | dtc basically takes a device-tree in a given format and outputs a | ||
1034 | device-tree in another format. The currently supported formats are: | ||
1035 | |||
1036 | Input formats: | ||
1037 | ------------- | ||
1038 | |||
1039 | - "dtb": "blob" format, that is a flattened device-tree block | ||
1040 | with | ||
1041 | header all in a binary blob. | ||
1042 | - "dts": "source" format. This is a text file containing a | ||
1043 | "source" for a device-tree. The format is defined later in this | ||
1044 | chapter. | ||
1045 | - "fs" format. This is a representation equivalent to the | ||
1046 | output of /proc/device-tree, that is nodes are directories and | ||
1047 | properties are files | ||
1048 | |||
1049 | Output formats: | ||
1050 | --------------- | ||
1051 | |||
1052 | - "dtb": "blob" format | ||
1053 | - "dts": "source" format | ||
1054 | - "asm": assembly language file. This is a file that can be | ||
1055 | sourced by gas to generate a device-tree "blob". That file can | ||
1056 | then simply be added to your Makefile. Additionally, the | ||
1057 | assembly file exports some symbols that can be used. | ||
1058 | |||
1059 | |||
1060 | The syntax of the dtc tool is | ||
1061 | |||
1062 | dtc [-I <input-format>] [-O <output-format>] | ||
1063 | [-o output-filename] [-V output_version] input_filename | ||
1064 | |||
1065 | |||
1066 | The "output_version" defines what version of the "blob" format will be | ||
1067 | generated. Supported versions are 1,2,3 and 16. The default is | ||
1068 | currently version 3 but that may change in the future to version 16. | ||
1069 | |||
1070 | Additionally, dtc performs various sanity checks on the tree, like the | ||
1071 | uniqueness of linux, phandle properties, validity of strings, etc... | ||
1072 | |||
1073 | The format of the .dts "source" file is "C" like, supports C and C++ | ||
1074 | style comments. | ||
1075 | |||
1076 | / { | ||
1077 | } | ||
1078 | |||
1079 | The above is the "device-tree" definition. It's the only statement | ||
1080 | supported currently at the toplevel. | ||
1081 | |||
1082 | / { | ||
1083 | property1 = "string_value"; /* define a property containing a 0 | ||
1084 | * terminated string | ||
1085 | */ | ||
1086 | |||
1087 | property2 = <1234abcd>; /* define a property containing a | ||
1088 | * numerical 32-bit value (hexadecimal) | ||
1089 | */ | ||
1090 | |||
1091 | property3 = <12345678 12345678 deadbeef>; | ||
1092 | /* define a property containing 3 | ||
1093 | * numerical 32-bit values (cells) in | ||
1094 | * hexadecimal | ||
1095 | */ | ||
1096 | property4 = [0a 0b 0c 0d de ea ad be ef]; | ||
1097 | /* define a property whose content is | ||
1098 | * an arbitrary array of bytes | ||
1099 | */ | ||
1100 | |||
1101 | childnode@address { /* define a child node named "childnode" | ||
1102 | * whose unit name is "childnode at | ||
1103 | * address" | ||
1104 | */ | ||
1105 | |||
1106 | childprop = "hello\n"; /* define a property "childprop" of | ||
1107 | * childnode (in this case, a string) | ||
1108 | */ | ||
1109 | }; | ||
1110 | }; | ||
1111 | |||
1112 | Nodes can contain other nodes etc... thus defining the hierarchical | ||
1113 | structure of the tree. | ||
1114 | |||
1115 | Strings support common escape sequences from C: "\n", "\t", "\r", | ||
1116 | "\(octal value)", "\x(hex value)". | ||
1117 | |||
1118 | It is also suggested that you pipe your source file through cpp (gcc | ||
1119 | preprocessor) so you can use #include's, #define for constants, etc... | ||
1120 | |||
1121 | Finally, various options are planned but not yet implemented, like | ||
1122 | automatic generation of phandles, labels (exported to the asm file so | ||
1123 | you can point to a property content and change it easily from whatever | ||
1124 | you link the device-tree with), label or path instead of numeric value | ||
1125 | in some cells to "point" to a node (replaced by a phandle at compile | ||
1126 | time), export of reserve map address to the asm file, ability to | ||
1127 | specify reserve map content at compile time, etc... | ||
1128 | |||
1129 | We may provide a .h include file with common definitions of that | ||
1130 | proves useful for some properties (like building PCI properties or | ||
1131 | interrupt maps) though it may be better to add a notion of struct | ||
1132 | definitions to the compiler... | ||
1133 | |||
1134 | |||
1135 | V - Recommendations for a bootloader | ||
1136 | ==================================== | ||
1137 | |||
1138 | |||
1139 | Here are some various ideas/recommendations that have been proposed | ||
1140 | while all this has been defined and implemented. | ||
1141 | |||
1142 | - The bootloader may want to be able to use the device-tree itself | ||
1143 | and may want to manipulate it (to add/edit some properties, | ||
1144 | like physical memory size or kernel arguments). At this point, 2 | ||
1145 | choices can be made. Either the bootloader works directly on the | ||
1146 | flattened format, or the bootloader has its own internal tree | ||
1147 | representation with pointers (similar to the kernel one) and | ||
1148 | re-flattens the tree when booting the kernel. The former is a bit | ||
1149 | more difficult to edit/modify, the later requires probably a bit | ||
1150 | more code to handle the tree structure. Note that the structure | ||
1151 | format has been designed so it's relatively easy to "insert" | ||
1152 | properties or nodes or delete them by just memmoving things | ||
1153 | around. It contains no internal offsets or pointers for this | ||
1154 | purpose. | ||
1155 | |||
1156 | - An example of code for iterating nodes & retrieving properties | ||
1157 | directly from the flattened tree format can be found in the kernel | ||
1158 | file arch/ppc64/kernel/prom.c, look at scan_flat_dt() function, | ||
1159 | its usage in early_init_devtree(), and the corresponding various | ||
1160 | early_init_dt_scan_*() callbacks. That code can be re-used in a | ||
1161 | GPL bootloader, and as the author of that code, I would be happy | ||
1162 | to discuss possible free licensing to any vendor who wishes to | ||
1163 | integrate all or part of this code into a non-GPL bootloader. | ||
1164 | |||
1165 | |||
1166 | |||
1167 | VI - System-on-a-chip devices and nodes | ||
1168 | ======================================= | ||
1169 | |||
1170 | Many companies are now starting to develop system-on-a-chip | ||
1171 | processors, where the processor core (CPU) and many peripheral devices | ||
1172 | exist on a single piece of silicon. For these SOCs, an SOC node | ||
1173 | should be used that defines child nodes for the devices that make | ||
1174 | up the SOC. While platforms are not required to use this model in | ||
1175 | order to boot the kernel, it is highly encouraged that all SOC | ||
1176 | implementations define as complete a flat-device-tree as possible to | ||
1177 | describe the devices on the SOC. This will allow for the | ||
1178 | genericization of much of the kernel code. | ||
1179 | |||
1180 | |||
1181 | 1) Defining child nodes of an SOC | ||
1182 | --------------------------------- | ||
1183 | |||
1184 | Each device that is part of an SOC may have its own node entry inside | ||
1185 | the SOC node. For each device that is included in the SOC, the unit | ||
1186 | address property represents the address offset for this device's | ||
1187 | memory-mapped registers in the parent's address space. The parent's | ||
1188 | address space is defined by the "ranges" property in the top-level soc | ||
1189 | node. The "reg" property for each node that exists directly under the | ||
1190 | SOC node should contain the address mapping from the child address space | ||
1191 | to the parent SOC address space and the size of the device's | ||
1192 | memory-mapped register file. | ||
1193 | |||
1194 | For many devices that may exist inside an SOC, there are predefined | ||
1195 | specifications for the format of the device tree node. All SOC child | ||
1196 | nodes should follow these specifications, except where noted in this | ||
1197 | document. | ||
1198 | |||
1199 | See appendix A for an example partial SOC node definition for the | ||
1200 | MPC8540. | ||
1201 | |||
1202 | |||
1203 | 2) Representing devices without a current OF specification | ||
1204 | ---------------------------------------------------------- | ||
1205 | |||
1206 | Currently, there are many devices on SOCs that do not have a standard | ||
1207 | representation pre-defined as part of the open firmware | ||
1208 | specifications, mainly because the boards that contain these SOCs are | ||
1209 | not currently booted using open firmware. This section contains | ||
1210 | descriptions for the SOC devices for which new nodes have been | ||
1211 | defined; this list will expand as more and more SOC-containing | ||
1212 | platforms are moved over to use the flattened-device-tree model. | ||
1213 | |||
1214 | VII - Specifying interrupt information for devices | ||
1215 | =================================================== | ||
1216 | |||
1217 | The device tree represents the busses and devices of a hardware | ||
1218 | system in a form similar to the physical bus topology of the | ||
1219 | hardware. | ||
1220 | |||
1221 | In addition, a logical 'interrupt tree' exists which represents the | ||
1222 | hierarchy and routing of interrupts in the hardware. | ||
1223 | |||
1224 | The interrupt tree model is fully described in the | ||
1225 | document "Open Firmware Recommended Practice: Interrupt | ||
1226 | Mapping Version 0.9". The document is available at: | ||
1227 | <http://playground.sun.com/1275/practice>. | ||
1228 | |||
1229 | 1) interrupts property | ||
1230 | ---------------------- | ||
1231 | |||
1232 | Devices that generate interrupts to a single interrupt controller | ||
1233 | should use the conventional OF representation described in the | ||
1234 | OF interrupt mapping documentation. | ||
1235 | |||
1236 | Each device which generates interrupts must have an 'interrupt' | ||
1237 | property. The interrupt property value is an arbitrary number of | ||
1238 | of 'interrupt specifier' values which describe the interrupt or | ||
1239 | interrupts for the device. | ||
1240 | |||
1241 | The encoding of an interrupt specifier is determined by the | ||
1242 | interrupt domain in which the device is located in the | ||
1243 | interrupt tree. The root of an interrupt domain specifies in | ||
1244 | its #interrupt-cells property the number of 32-bit cells | ||
1245 | required to encode an interrupt specifier. See the OF interrupt | ||
1246 | mapping documentation for a detailed description of domains. | ||
1247 | |||
1248 | For example, the binding for the OpenPIC interrupt controller | ||
1249 | specifies an #interrupt-cells value of 2 to encode the interrupt | ||
1250 | number and level/sense information. All interrupt children in an | ||
1251 | OpenPIC interrupt domain use 2 cells per interrupt in their interrupts | ||
1252 | property. | ||
1253 | |||
1254 | The PCI bus binding specifies a #interrupt-cell value of 1 to encode | ||
1255 | which interrupt pin (INTA,INTB,INTC,INTD) is used. | ||
1256 | |||
1257 | 2) interrupt-parent property | ||
1258 | ---------------------------- | ||
1259 | |||
1260 | The interrupt-parent property is specified to define an explicit | ||
1261 | link between a device node and its interrupt parent in | ||
1262 | the interrupt tree. The value of interrupt-parent is the | ||
1263 | phandle of the parent node. | ||
1264 | |||
1265 | If the interrupt-parent property is not defined for a node, its | ||
1266 | interrupt parent is assumed to be an ancestor in the node's | ||
1267 | _device tree_ hierarchy. | ||
1268 | |||
1269 | 3) OpenPIC Interrupt Controllers | ||
1270 | -------------------------------- | ||
1271 | |||
1272 | OpenPIC interrupt controllers require 2 cells to encode | ||
1273 | interrupt information. The first cell defines the interrupt | ||
1274 | number. The second cell defines the sense and level | ||
1275 | information. | ||
1276 | |||
1277 | Sense and level information should be encoded as follows: | ||
1278 | |||
1279 | 0 = low to high edge sensitive type enabled | ||
1280 | 1 = active low level sensitive type enabled | ||
1281 | 2 = active high level sensitive type enabled | ||
1282 | 3 = high to low edge sensitive type enabled | ||
1283 | |||
1284 | 4) ISA Interrupt Controllers | ||
1285 | ---------------------------- | ||
1286 | |||
1287 | ISA PIC interrupt controllers require 2 cells to encode | ||
1288 | interrupt information. The first cell defines the interrupt | ||
1289 | number. The second cell defines the sense and level | ||
1290 | information. | ||
1291 | |||
1292 | ISA PIC interrupt controllers should adhere to the ISA PIC | ||
1293 | encodings listed below: | ||
1294 | |||
1295 | 0 = active low level sensitive type enabled | ||
1296 | 1 = active high level sensitive type enabled | ||
1297 | 2 = high to low edge sensitive type enabled | ||
1298 | 3 = low to high edge sensitive type enabled | ||
1299 | |||
1300 | VIII - Specifying Device Power Management Information (sleep property) | ||
1301 | =================================================================== | ||
1302 | |||
1303 | Devices on SOCs often have mechanisms for placing devices into low-power | ||
1304 | states that are decoupled from the devices' own register blocks. Sometimes, | ||
1305 | this information is more complicated than a cell-index property can | ||
1306 | reasonably describe. Thus, each device controlled in such a manner | ||
1307 | may contain a "sleep" property which describes these connections. | ||
1308 | |||
1309 | The sleep property consists of one or more sleep resources, each of | ||
1310 | which consists of a phandle to a sleep controller, followed by a | ||
1311 | controller-specific sleep specifier of zero or more cells. | ||
1312 | |||
1313 | The semantics of what type of low power modes are possible are defined | ||
1314 | by the sleep controller. Some examples of the types of low power modes | ||
1315 | that may be supported are: | ||
1316 | |||
1317 | - Dynamic: The device may be disabled or enabled at any time. | ||
1318 | - System Suspend: The device may request to be disabled or remain | ||
1319 | awake during system suspend, but will not be disabled until then. | ||
1320 | - Permanent: The device is disabled permanently (until the next hard | ||
1321 | reset). | ||
1322 | |||
1323 | Some devices may share a clock domain with each other, such that they should | ||
1324 | only be suspended when none of the devices are in use. Where reasonable, | ||
1325 | such nodes should be placed on a virtual bus, where the bus has the sleep | ||
1326 | property. If the clock domain is shared among devices that cannot be | ||
1327 | reasonably grouped in this manner, then create a virtual sleep controller | ||
1328 | (similar to an interrupt nexus, except that defining a standardized | ||
1329 | sleep-map should wait until its necessity is demonstrated). | ||
1330 | |||
1331 | Appendix A - Sample SOC node for MPC8540 | ||
1332 | ======================================== | ||
1333 | |||
1334 | soc@e0000000 { | ||
1335 | #address-cells = <1>; | ||
1336 | #size-cells = <1>; | ||
1337 | compatible = "fsl,mpc8540-ccsr", "simple-bus"; | ||
1338 | device_type = "soc"; | ||
1339 | ranges = <0x00000000 0xe0000000 0x00100000> | ||
1340 | bus-frequency = <0>; | ||
1341 | interrupt-parent = <&pic>; | ||
1342 | |||
1343 | ethernet@24000 { | ||
1344 | #address-cells = <1>; | ||
1345 | #size-cells = <1>; | ||
1346 | device_type = "network"; | ||
1347 | model = "TSEC"; | ||
1348 | compatible = "gianfar", "simple-bus"; | ||
1349 | reg = <0x24000 0x1000>; | ||
1350 | local-mac-address = [ 00 E0 0C 00 73 00 ]; | ||
1351 | interrupts = <29 2 30 2 34 2>; | ||
1352 | phy-handle = <&phy0>; | ||
1353 | sleep = <&pmc 00000080>; | ||
1354 | ranges; | ||
1355 | |||
1356 | mdio@24520 { | ||
1357 | reg = <0x24520 0x20>; | ||
1358 | compatible = "fsl,gianfar-mdio"; | ||
1359 | |||
1360 | phy0: ethernet-phy@0 { | ||
1361 | interrupts = <5 1>; | ||
1362 | reg = <0>; | ||
1363 | device_type = "ethernet-phy"; | ||
1364 | }; | ||
1365 | |||
1366 | phy1: ethernet-phy@1 { | ||
1367 | interrupts = <5 1>; | ||
1368 | reg = <1>; | ||
1369 | device_type = "ethernet-phy"; | ||
1370 | }; | ||
1371 | |||
1372 | phy3: ethernet-phy@3 { | ||
1373 | interrupts = <7 1>; | ||
1374 | reg = <3>; | ||
1375 | device_type = "ethernet-phy"; | ||
1376 | }; | ||
1377 | }; | ||
1378 | }; | ||
1379 | |||
1380 | ethernet@25000 { | ||
1381 | device_type = "network"; | ||
1382 | model = "TSEC"; | ||
1383 | compatible = "gianfar"; | ||
1384 | reg = <0x25000 0x1000>; | ||
1385 | local-mac-address = [ 00 E0 0C 00 73 01 ]; | ||
1386 | interrupts = <13 2 14 2 18 2>; | ||
1387 | phy-handle = <&phy1>; | ||
1388 | sleep = <&pmc 00000040>; | ||
1389 | }; | ||
1390 | |||
1391 | ethernet@26000 { | ||
1392 | device_type = "network"; | ||
1393 | model = "FEC"; | ||
1394 | compatible = "gianfar"; | ||
1395 | reg = <0x26000 0x1000>; | ||
1396 | local-mac-address = [ 00 E0 0C 00 73 02 ]; | ||
1397 | interrupts = <41 2>; | ||
1398 | phy-handle = <&phy3>; | ||
1399 | sleep = <&pmc 00000020>; | ||
1400 | }; | ||
1401 | |||
1402 | serial@4500 { | ||
1403 | #address-cells = <1>; | ||
1404 | #size-cells = <1>; | ||
1405 | compatible = "fsl,mpc8540-duart", "simple-bus"; | ||
1406 | sleep = <&pmc 00000002>; | ||
1407 | ranges; | ||
1408 | |||
1409 | serial@4500 { | ||
1410 | device_type = "serial"; | ||
1411 | compatible = "ns16550"; | ||
1412 | reg = <0x4500 0x100>; | ||
1413 | clock-frequency = <0>; | ||
1414 | interrupts = <42 2>; | ||
1415 | }; | ||
1416 | |||
1417 | serial@4600 { | ||
1418 | device_type = "serial"; | ||
1419 | compatible = "ns16550"; | ||
1420 | reg = <0x4600 0x100>; | ||
1421 | clock-frequency = <0>; | ||
1422 | interrupts = <42 2>; | ||
1423 | }; | ||
1424 | }; | ||
1425 | |||
1426 | pic: pic@40000 { | ||
1427 | interrupt-controller; | ||
1428 | #address-cells = <0>; | ||
1429 | #interrupt-cells = <2>; | ||
1430 | reg = <0x40000 0x40000>; | ||
1431 | compatible = "chrp,open-pic"; | ||
1432 | device_type = "open-pic"; | ||
1433 | }; | ||
1434 | |||
1435 | i2c@3000 { | ||
1436 | interrupts = <43 2>; | ||
1437 | reg = <0x3000 0x100>; | ||
1438 | compatible = "fsl-i2c"; | ||
1439 | dfsrr; | ||
1440 | sleep = <&pmc 00000004>; | ||
1441 | }; | ||
1442 | |||
1443 | pmc: power@e0070 { | ||
1444 | compatible = "fsl,mpc8540-pmc", "fsl,mpc8548-pmc"; | ||
1445 | reg = <0xe0070 0x20>; | ||
1446 | }; | ||
1447 | }; | ||