diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-06 16:30:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-06 16:30:06 -0400 |
commit | b4b50fd78b1e31989940dfc647e64453d0f7176a (patch) | |
tree | 1a55f110e021c02963b63759f3f18ea7ba3aa228 /Documentation | |
parent | dccfd1e439c11422d7aca0d834b0430d24650e85 (diff) | |
parent | f97c43bbdf8a1ea42477b1a804a48e7e368cb13c (diff) |
Merge tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC platform changes from Olof Johansson:
"This branch contains mostly additions and changes to platform
enablement and SoC-level drivers. Since there's sometimes a
dependency on device-tree changes, there's also a fair amount of
those in this branch.
Pieces worth mentioning are:
- Mbus driver for Marvell platforms, allowing kernel configuration
and resource allocation of on-chip peripherals.
- Enablement of the mbus infrastructure from Marvell PCI-e drivers.
- Preparation of MSI support for Marvell platforms.
- Addition of new PCI-e host controller driver for Tegra platforms
- Some churn caused by sharing of macro names between i.MX 6Q and 6DL
platforms in the device tree sources and header files.
- Various suspend/PM updates for Tegra, including LP1 support.
- Versatile Express support for MCPM, part of big little support.
- Allwinner platform support for A20 and A31 SoCs (dual and quad
Cortex-A7)
- OMAP2+ support for DRA7, a new Cortex-A15-based SoC.
The code that touches other architectures are patches moving MSI
arch-specific functions over to weak symbols and removal of
ARCH_SUPPORTS_MSI, acked by PCI maintainers"
* tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (266 commits)
tegra-cpuidle: provide stub when !CONFIG_CPU_IDLE
PCI: tegra: replace devm_request_and_ioremap by devm_ioremap_resource
ARM: tegra: Drop ARCH_SUPPORTS_MSI and sort list
ARM: dts: vf610-twr: enable i2c0 device
ARM: dts: i.MX51: Add one more I2C2 pinmux entry
ARM: dts: i.MX51: Move pins configuration under "iomuxc" label
ARM: dtsi: imx6qdl-sabresd: Add USB OTG vbus pin to pinctrl_hog
ARM: dtsi: imx6qdl-sabresd: Add USB host 1 VBUS regulator
ARM: dts: imx27-phytec-phycore-som: Enable AUDMUX
ARM: dts: i.MX27: Disable AUDMUX in the template
ARM: dts: wandboard: Add support for SDIO bcm4329
ARM: i.MX5 clocks: Remove optional clock setup (CKIH1) from i.MX51 template
ARM: dts: imx53-qsb: Make USBH1 functional
ARM i.MX6Q: dts: Enable I2C1 with EEPROM and PMIC on Phytec phyFLEX-i.MX6 Ouad module
ARM i.MX6Q: dts: Enable SPI NOR flash on Phytec phyFLEX-i.MX6 Ouad module
ARM: dts: imx6qdl-sabresd: Add touchscreen support
ARM: imx: add ocram clock for imx53
ARM: dts: imx: ocram size is different between imx6q and imx6dl
ARM: dts: imx27-phytec-phycore-som: Fix regulator settings
ARM: dts: i.MX27: Remove clock name from CPU node
...
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/devicetree/bindings/arm/omap/omap.txt | 3 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/arm/vexpress-scc.txt | 33 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/bus/imx-weim.txt | 17 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/bus/mvebu-mbus.txt | 276 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/clock/imx5-clock.txt | 1 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/clock/imx6q-clock.txt | 6 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/pci/mvebu-pci.txt | 145 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt | 163 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/watchdog/sunxi-wdt.txt (renamed from Documentation/devicetree/bindings/watchdog/sun4i-wdt.txt) | 5 |
9 files changed, 606 insertions, 43 deletions
diff --git a/Documentation/devicetree/bindings/arm/omap/omap.txt b/Documentation/devicetree/bindings/arm/omap/omap.txt index 6d498c758b45..91b7049affa1 100644 --- a/Documentation/devicetree/bindings/arm/omap/omap.txt +++ b/Documentation/devicetree/bindings/arm/omap/omap.txt | |||
@@ -59,3 +59,6 @@ Boards: | |||
59 | 59 | ||
60 | - AM43x EPOS EVM | 60 | - AM43x EPOS EVM |
61 | compatible = "ti,am43x-epos-evm", "ti,am4372", "ti,am43" | 61 | compatible = "ti,am43x-epos-evm", "ti,am4372", "ti,am43" |
62 | |||
63 | - DRA7 EVM: Software Developement Board for DRA7XX | ||
64 | compatible = "ti,dra7-evm", "ti,dra7" | ||
diff --git a/Documentation/devicetree/bindings/arm/vexpress-scc.txt b/Documentation/devicetree/bindings/arm/vexpress-scc.txt new file mode 100644 index 000000000000..ae5043e42e5d --- /dev/null +++ b/Documentation/devicetree/bindings/arm/vexpress-scc.txt | |||
@@ -0,0 +1,33 @@ | |||
1 | ARM Versatile Express Serial Configuration Controller | ||
2 | ----------------------------------------------------- | ||
3 | |||
4 | Test chips for ARM Versatile Express platform implement SCC (Serial | ||
5 | Configuration Controller) interface, used to set initial conditions | ||
6 | for the test chip. | ||
7 | |||
8 | In some cases its registers are also mapped in normal address space | ||
9 | and can be used to obtain runtime information about the chip internals | ||
10 | (like silicon temperature sensors) and as interface to other subsystems | ||
11 | like platform configuration control and power management. | ||
12 | |||
13 | Required properties: | ||
14 | |||
15 | - compatible value: "arm,vexpress-scc,<model>", "arm,vexpress-scc"; | ||
16 | where <model> is the full tile model name (as used | ||
17 | in the tile's Technical Reference Manual), | ||
18 | eg. for Coretile Express A15x2 A7x3 (V2P-CA15_A7): | ||
19 | compatible = "arm,vexpress-scc,v2p-ca15_a7", "arm,vexpress-scc"; | ||
20 | |||
21 | Optional properties: | ||
22 | |||
23 | - reg: when the SCC is memory mapped, physical address and size of the | ||
24 | registers window | ||
25 | - interrupts: when the SCC can generate a system-level interrupt | ||
26 | |||
27 | Example: | ||
28 | |||
29 | scc@7fff0000 { | ||
30 | compatible = "arm,vexpress-scc,v2p-ca15_a7", "arm,vexpress-scc"; | ||
31 | reg = <0 0x7fff0000 0 0x1000>; | ||
32 | interrupts = <0 95 4>; | ||
33 | }; | ||
diff --git a/Documentation/devicetree/bindings/bus/imx-weim.txt b/Documentation/devicetree/bindings/bus/imx-weim.txt index cedc2a9c4785..0fd76c405208 100644 --- a/Documentation/devicetree/bindings/bus/imx-weim.txt +++ b/Documentation/devicetree/bindings/bus/imx-weim.txt | |||
@@ -8,7 +8,7 @@ The actual devices are instantiated from the child nodes of a WEIM node. | |||
8 | 8 | ||
9 | Required properties: | 9 | Required properties: |
10 | 10 | ||
11 | - compatible: Should be set to "fsl,imx6q-weim" | 11 | - compatible: Should be set to "fsl,<soc>-weim" |
12 | - reg: A resource specifier for the register space | 12 | - reg: A resource specifier for the register space |
13 | (see the example below) | 13 | (see the example below) |
14 | - clocks: the clock, see the example below. | 14 | - clocks: the clock, see the example below. |
@@ -21,11 +21,18 @@ Required properties: | |||
21 | 21 | ||
22 | Timing property for child nodes. It is mandatory, not optional. | 22 | Timing property for child nodes. It is mandatory, not optional. |
23 | 23 | ||
24 | - fsl,weim-cs-timing: The timing array, contains 6 timing values for the | 24 | - fsl,weim-cs-timing: The timing array, contains timing values for the |
25 | child node. We can get the CS index from the child | 25 | child node. We can get the CS index from the child |
26 | node's "reg" property. This property contains the values | 26 | node's "reg" property. The number of registers depends |
27 | for the registers EIM_CSnGCR1, EIM_CSnGCR2, EIM_CSnRCR1, | 27 | on the selected chip. |
28 | EIM_CSnRCR2, EIM_CSnWCR1, EIM_CSnWCR2 in this order. | 28 | For i.MX1, i.MX21 ("fsl,imx1-weim") there are two |
29 | registers: CSxU, CSxL. | ||
30 | For i.MX25, i.MX27, i.MX31 and i.MX35 ("fsl,imx27-weim") | ||
31 | there are three registers: CSCRxU, CSCRxL, CSCRxA. | ||
32 | For i.MX50, i.MX53 ("fsl,imx50-weim"), | ||
33 | i.MX51 ("fsl,imx51-weim") and i.MX6Q ("fsl,imx6q-weim") | ||
34 | there are six registers: CSxGCR1, CSxGCR2, CSxRCR1, | ||
35 | CSxRCR2, CSxWCR1, CSxWCR2. | ||
29 | 36 | ||
30 | Example for an imx6q-sabreauto board, the NOR flash connected to the WEIM: | 37 | Example for an imx6q-sabreauto board, the NOR flash connected to the WEIM: |
31 | 38 | ||
diff --git a/Documentation/devicetree/bindings/bus/mvebu-mbus.txt b/Documentation/devicetree/bindings/bus/mvebu-mbus.txt new file mode 100644 index 000000000000..7586fb68c072 --- /dev/null +++ b/Documentation/devicetree/bindings/bus/mvebu-mbus.txt | |||
@@ -0,0 +1,276 @@ | |||
1 | |||
2 | * Marvell MBus | ||
3 | |||
4 | Required properties: | ||
5 | |||
6 | - compatible: Should be set to one of the following: | ||
7 | marvell,armada370-mbus | ||
8 | marvell,armadaxp-mbus | ||
9 | marvell,armada370-mbus | ||
10 | marvell,armadaxp-mbus | ||
11 | marvell,kirkwood-mbus | ||
12 | marvell,dove-mbus | ||
13 | marvell,orion5x-88f5281-mbus | ||
14 | marvell,orion5x-88f5182-mbus | ||
15 | marvell,orion5x-88f5181-mbus | ||
16 | marvell,orion5x-88f6183-mbus | ||
17 | marvell,mv78xx0-mbus | ||
18 | |||
19 | - address-cells: Must be '2'. The first cell for the MBus ID encoding, | ||
20 | the second cell for the address offset within the window. | ||
21 | |||
22 | - size-cells: Must be '1'. | ||
23 | |||
24 | - ranges: Must be set up to provide a proper translation for each child. | ||
25 | See the examples below. | ||
26 | |||
27 | - controller: Contains a single phandle referring to the MBus controller | ||
28 | node. This allows to specify the node that contains the | ||
29 | registers that control the MBus, which is typically contained | ||
30 | within the internal register window (see below). | ||
31 | |||
32 | Optional properties: | ||
33 | |||
34 | - pcie-mem-aperture: This optional property contains the aperture for | ||
35 | the memory region of the PCIe driver. | ||
36 | If it's defined, it must encode the base address and | ||
37 | size for the address decoding windows allocated for | ||
38 | the PCIe memory region. | ||
39 | |||
40 | - pcie-io-aperture: Just as explained for the above property, this | ||
41 | optional property contains the aperture for the | ||
42 | I/O region of the PCIe driver. | ||
43 | |||
44 | * Marvell MBus controller | ||
45 | |||
46 | Required properties: | ||
47 | |||
48 | - compatible: Should be set to "marvell,mbus-controller". | ||
49 | |||
50 | - reg: Device's register space. | ||
51 | Two entries are expected (see the examples below): | ||
52 | the first one controls the devices decoding window and | ||
53 | the second one controls the SDRAM decoding window. | ||
54 | |||
55 | Example: | ||
56 | |||
57 | soc { | ||
58 | compatible = "marvell,armada370-mbus", "simple-bus"; | ||
59 | #address-cells = <2>; | ||
60 | #size-cells = <1>; | ||
61 | controller = <&mbusc>; | ||
62 | pcie-mem-aperture = <0xe0000000 0x8000000>; | ||
63 | pcie-io-aperture = <0xe8000000 0x100000>; | ||
64 | |||
65 | internal-regs { | ||
66 | compatible = "simple-bus"; | ||
67 | |||
68 | mbusc: mbus-controller@20000 { | ||
69 | compatible = "marvell,mbus-controller"; | ||
70 | reg = <0x20000 0x100>, <0x20180 0x20>; | ||
71 | }; | ||
72 | |||
73 | /* more children ...*/ | ||
74 | }; | ||
75 | }; | ||
76 | |||
77 | ** MBus address decoding window specification | ||
78 | |||
79 | The MBus children address space is comprised of two cells: the first one for | ||
80 | the window ID and the second one for the offset within the window. | ||
81 | In order to allow to describe valid and non-valid window entries, the | ||
82 | following encoding is used: | ||
83 | |||
84 | 0xSIAA0000 0x00oooooo | ||
85 | |||
86 | Where: | ||
87 | |||
88 | S = 0x0 for a MBus valid window | ||
89 | S = 0xf for a non-valid window (see below) | ||
90 | |||
91 | If S = 0x0, then: | ||
92 | |||
93 | I = 4-bit window target ID | ||
94 | AA = windpw attribute | ||
95 | |||
96 | If S = 0xf, then: | ||
97 | |||
98 | I = don't care | ||
99 | AA = 1 for internal register | ||
100 | |||
101 | Following the above encoding, for each ranges entry for a MBus valid window | ||
102 | (S = 0x0), an address decoding window is allocated. On the other side, | ||
103 | entries for translation that do not correspond to valid windows (S = 0xf) | ||
104 | are skipped. | ||
105 | |||
106 | soc { | ||
107 | compatible = "marvell,armada370-mbus", "simple-bus"; | ||
108 | #address-cells = <2>; | ||
109 | #size-cells = <1>; | ||
110 | controller = <&mbusc>; | ||
111 | |||
112 | ranges = <0xf0010000 0 0 0xd0000000 0x100000 | ||
113 | 0x01e00000 0 0 0xfff00000 0x100000>; | ||
114 | |||
115 | bootrom { | ||
116 | compatible = "marvell,bootrom"; | ||
117 | reg = <0x01e00000 0 0x100000>; | ||
118 | }; | ||
119 | |||
120 | /* other children */ | ||
121 | ... | ||
122 | |||
123 | internal-regs { | ||
124 | compatible = "simple-bus"; | ||
125 | ranges = <0 0xf0010000 0 0x100000>; | ||
126 | |||
127 | mbusc: mbus-controller@20000 { | ||
128 | compatible = "marvell,mbus-controller"; | ||
129 | reg = <0x20000 0x100>, <0x20180 0x20>; | ||
130 | }; | ||
131 | |||
132 | /* more children ...*/ | ||
133 | }; | ||
134 | }; | ||
135 | |||
136 | In the shown example, the translation entry in the 'ranges' property is what | ||
137 | makes the MBus driver create a static decoding window for the corresponding | ||
138 | given child device. Note that the binding does not require child nodes to be | ||
139 | present. Of course, child nodes are needed to probe the devices. | ||
140 | |||
141 | Since each window is identified by its target ID and attribute ID there's | ||
142 | a special macro that can be use to simplify the translation entries: | ||
143 | |||
144 | #define MBUS_ID(target,attributes) (((target) << 24) | ((attributes) << 16)) | ||
145 | |||
146 | Using this macro, the above example would be: | ||
147 | |||
148 | soc { | ||
149 | compatible = "marvell,armada370-mbus", "simple-bus"; | ||
150 | #address-cells = <2>; | ||
151 | #size-cells = <1>; | ||
152 | controller = <&mbusc>; | ||
153 | |||
154 | ranges = < MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000 | ||
155 | MBUS_ID(0x01, 0xe0) 0 0 0xfff00000 0x100000>; | ||
156 | |||
157 | bootrom { | ||
158 | compatible = "marvell,bootrom"; | ||
159 | reg = <MBUS_ID(0x01, 0xe0) 0 0x100000>; | ||
160 | }; | ||
161 | |||
162 | /* other children */ | ||
163 | ... | ||
164 | |||
165 | internal-regs { | ||
166 | compatible = "simple-bus"; | ||
167 | #address-cells = <1>; | ||
168 | #size-cells = <1>; | ||
169 | ranges = <0 MBUS_ID(0xf0, 0x01) 0 0x100000>; | ||
170 | |||
171 | mbusc: mbus-controller@20000 { | ||
172 | compatible = "marvell,mbus-controller"; | ||
173 | reg = <0x20000 0x100>, <0x20180 0x20>; | ||
174 | }; | ||
175 | |||
176 | /* other children */ | ||
177 | ... | ||
178 | }; | ||
179 | }; | ||
180 | |||
181 | |||
182 | ** About the window base address | ||
183 | |||
184 | Remember the MBus controller allows a great deal of flexibility for choosing | ||
185 | the decoding window base address. When planning the device tree layout it's | ||
186 | possible to choose any address as the base address, provided of course there's | ||
187 | a region large enough available, and with the required alignment. | ||
188 | |||
189 | Yet in other words: there's nothing preventing us from setting a base address | ||
190 | of 0xf0000000, or 0xd0000000 for the NOR device shown above, if such region is | ||
191 | unused. | ||
192 | |||
193 | ** Window allocation policy | ||
194 | |||
195 | The mbus-node ranges property defines a set of mbus windows that are expected | ||
196 | to be set by the operating system and that are guaranteed to be free of overlaps | ||
197 | with one another or with the system memory ranges. | ||
198 | |||
199 | Each entry in the property refers to exactly one window. If the operating system | ||
200 | choses to use a different set of mbus windows, it must ensure that any address | ||
201 | translations performed from downstream devices are adapted accordingly. | ||
202 | |||
203 | The operating system may insert additional mbus windows that do not conflict | ||
204 | with the ones listed in the ranges, e.g. for mapping PCIe devices. | ||
205 | As a special case, the internal register window must be set up by the boot | ||
206 | loader at the address listed in the ranges property, since access to that region | ||
207 | is needed to set up the other windows. | ||
208 | |||
209 | ** Example | ||
210 | |||
211 | See the example below, where a more complete device tree is shown: | ||
212 | |||
213 | soc { | ||
214 | compatible = "marvell,armadaxp-mbus", "simple-bus"; | ||
215 | controller = <&mbusc>; | ||
216 | |||
217 | ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000 /* internal-regs */ | ||
218 | MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 | ||
219 | MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x8000000>; | ||
220 | |||
221 | bootrom { | ||
222 | compatible = "marvell,bootrom"; | ||
223 | reg = <MBUS_ID(0x01, 0x1d) 0 0x100000>; | ||
224 | }; | ||
225 | |||
226 | devbus-bootcs { | ||
227 | status = "okay"; | ||
228 | ranges = <0 MBUS_ID(0x01, 0x2f) 0 0x8000000>; | ||
229 | |||
230 | /* NOR */ | ||
231 | nor { | ||
232 | compatible = "cfi-flash"; | ||
233 | reg = <0 0x8000000>; | ||
234 | bank-width = <2>; | ||
235 | }; | ||
236 | }; | ||
237 | |||
238 | pcie-controller { | ||
239 | compatible = "marvell,armada-xp-pcie"; | ||
240 | status = "okay"; | ||
241 | device_type = "pci"; | ||
242 | |||
243 | #address-cells = <3>; | ||
244 | #size-cells = <2>; | ||
245 | |||
246 | ranges = | ||
247 | <0x82000000 0 0x40000 MBUS_ID(0xf0, 0x01) 0x40000 0 0x00002000 /* Port 0.0 registers */ | ||
248 | 0x82000000 0 0x42000 MBUS_ID(0xf0, 0x01) 0x42000 0 0x00002000 /* Port 2.0 registers */ | ||
249 | 0x82000000 0 0x44000 MBUS_ID(0xf0, 0x01) 0x44000 0 0x00002000 /* Port 0.1 registers */ | ||
250 | 0x82000000 0 0x48000 MBUS_ID(0xf0, 0x01) 0x48000 0 0x00002000 /* Port 0.2 registers */ | ||
251 | 0x82000000 0 0x4c000 MBUS_ID(0xf0, 0x01) 0x4c000 0 0x00002000 /* Port 0.3 registers */ | ||
252 | 0x82000800 0 0xe0000000 MBUS_ID(0x04, 0xe8) 0xe0000000 0 0x08000000 /* Port 0.0 MEM */ | ||
253 | 0x81000800 0 0 MBUS_ID(0x04, 0xe0) 0xe8000000 0 0x00100000 /* Port 0.0 IO */>; | ||
254 | |||
255 | |||
256 | pcie@1,0 { | ||
257 | /* Port 0, Lane 0 */ | ||
258 | status = "okay"; | ||
259 | }; | ||
260 | }; | ||
261 | |||
262 | internal-regs { | ||
263 | compatible = "simple-bus"; | ||
264 | #address-cells = <1>; | ||
265 | #size-cells = <1>; | ||
266 | ranges = <0 MBUS_ID(0xf0, 0x01) 0 0x100000>; | ||
267 | |||
268 | mbusc: mbus-controller@20000 { | ||
269 | reg = <0x20000 0x100>, <0x20180 0x20>; | ||
270 | }; | ||
271 | |||
272 | interrupt-controller@20000 { | ||
273 | reg = <0x20a00 0x2d0>, <0x21070 0x58>; | ||
274 | }; | ||
275 | }; | ||
276 | }; | ||
diff --git a/Documentation/devicetree/bindings/clock/imx5-clock.txt b/Documentation/devicetree/bindings/clock/imx5-clock.txt index f46f5625d8ad..4c029a8739d3 100644 --- a/Documentation/devicetree/bindings/clock/imx5-clock.txt +++ b/Documentation/devicetree/bindings/clock/imx5-clock.txt | |||
@@ -197,6 +197,7 @@ clocks and IDs. | |||
197 | spdif0_gate 183 | 197 | spdif0_gate 183 |
198 | spdif1_gate 184 | 198 | spdif1_gate 184 |
199 | spdif_ipg_gate 185 | 199 | spdif_ipg_gate 185 |
200 | ocram 186 | ||
200 | 201 | ||
201 | Examples (for mx53): | 202 | Examples (for mx53): |
202 | 203 | ||
diff --git a/Documentation/devicetree/bindings/clock/imx6q-clock.txt b/Documentation/devicetree/bindings/clock/imx6q-clock.txt index a0e104f0527e..5a90a724b520 100644 --- a/Documentation/devicetree/bindings/clock/imx6q-clock.txt +++ b/Documentation/devicetree/bindings/clock/imx6q-clock.txt | |||
@@ -209,6 +209,12 @@ clocks and IDs. | |||
209 | pll5_post_div 194 | 209 | pll5_post_div 194 |
210 | pll5_video_div 195 | 210 | pll5_video_div 195 |
211 | eim_slow 196 | 211 | eim_slow 196 |
212 | spdif 197 | ||
213 | cko2_sel 198 | ||
214 | cko2_podf 199 | ||
215 | cko2 200 | ||
216 | cko 201 | ||
217 | vdoa 202 | ||
212 | 218 | ||
213 | Examples: | 219 | Examples: |
214 | 220 | ||
diff --git a/Documentation/devicetree/bindings/pci/mvebu-pci.txt b/Documentation/devicetree/bindings/pci/mvebu-pci.txt index f8d405897a94..9556e2fedf6d 100644 --- a/Documentation/devicetree/bindings/pci/mvebu-pci.txt +++ b/Documentation/devicetree/bindings/pci/mvebu-pci.txt | |||
@@ -1,6 +1,7 @@ | |||
1 | * Marvell EBU PCIe interfaces | 1 | * Marvell EBU PCIe interfaces |
2 | 2 | ||
3 | Mandatory properties: | 3 | Mandatory properties: |
4 | |||
4 | - compatible: one of the following values: | 5 | - compatible: one of the following values: |
5 | marvell,armada-370-pcie | 6 | marvell,armada-370-pcie |
6 | marvell,armada-xp-pcie | 7 | marvell,armada-xp-pcie |
@@ -10,11 +11,49 @@ Mandatory properties: | |||
10 | - #interrupt-cells, set to <1> | 11 | - #interrupt-cells, set to <1> |
11 | - bus-range: PCI bus numbers covered | 12 | - bus-range: PCI bus numbers covered |
12 | - device_type, set to "pci" | 13 | - device_type, set to "pci" |
13 | - ranges: ranges for the PCI memory and I/O regions, as well as the | 14 | - ranges: ranges describing the MMIO registers to control the PCIe |
14 | MMIO registers to control the PCIe interfaces. | 15 | interfaces, and ranges describing the MBus windows needed to access |
16 | the memory and I/O regions of each PCIe interface. | ||
17 | |||
18 | The ranges describing the MMIO registers have the following layout: | ||
19 | |||
20 | 0x82000000 0 r MBUS_ID(0xf0, 0x01) r 0 s | ||
21 | |||
22 | where: | ||
23 | |||
24 | * r is a 32-bits value that gives the offset of the MMIO | ||
25 | registers of this PCIe interface, from the base of the internal | ||
26 | registers. | ||
27 | |||
28 | * s is a 32-bits value that give the size of this MMIO | ||
29 | registers area. This range entry translates the '0x82000000 0 r' PCI | ||
30 | address into the 'MBUS_ID(0xf0, 0x01) r' CPU address, which is part | ||
31 | of the internal register window (as identified by MBUS_ID(0xf0, | ||
32 | 0x01)). | ||
33 | |||
34 | The ranges describing the MBus windows have the following layout: | ||
35 | |||
36 | 0x8t000000 s 0 MBUS_ID(w, a) 0 1 0 | ||
37 | |||
38 | where: | ||
39 | |||
40 | * t is the type of the MBus window (as defined by the standard PCI DT | ||
41 | bindings), 1 for I/O and 2 for memory. | ||
15 | 42 | ||
16 | In addition, the Device Tree node must have sub-nodes describing each | 43 | * s is the PCI slot that corresponds to this PCIe interface |
44 | |||
45 | * w is the 'target ID' value for the MBus window | ||
46 | |||
47 | * a the 'attribute' value for the MBus window. | ||
48 | |||
49 | Since the location and size of the different MBus windows is not fixed in | ||
50 | hardware, and only determined in runtime, those ranges cover the full first | ||
51 | 4 GB of the physical address space, and do not translate into a valid CPU | ||
52 | address. | ||
53 | |||
54 | In addition, the device tree node must have sub-nodes describing each | ||
17 | PCIe interface, having the following mandatory properties: | 55 | PCIe interface, having the following mandatory properties: |
56 | |||
18 | - reg: used only for interrupt mapping, so only the first four bytes | 57 | - reg: used only for interrupt mapping, so only the first four bytes |
19 | are used to refer to the correct bus number and device number. | 58 | are used to refer to the correct bus number and device number. |
20 | - assigned-addresses: reference to the MMIO registers used to control | 59 | - assigned-addresses: reference to the MMIO registers used to control |
@@ -26,7 +65,8 @@ PCIe interface, having the following mandatory properties: | |||
26 | - #address-cells, set to <3> | 65 | - #address-cells, set to <3> |
27 | - #size-cells, set to <2> | 66 | - #size-cells, set to <2> |
28 | - #interrupt-cells, set to <1> | 67 | - #interrupt-cells, set to <1> |
29 | - ranges, empty property. | 68 | - ranges, translating the MBus windows ranges of the parent node into |
69 | standard PCI addresses. | ||
30 | - interrupt-map-mask and interrupt-map, standard PCI properties to | 70 | - interrupt-map-mask and interrupt-map, standard PCI properties to |
31 | define the mapping of the PCIe interface to interrupt numbers. | 71 | define the mapping of the PCIe interface to interrupt numbers. |
32 | 72 | ||
@@ -47,27 +87,50 @@ pcie-controller { | |||
47 | 87 | ||
48 | bus-range = <0x00 0xff>; | 88 | bus-range = <0x00 0xff>; |
49 | 89 | ||
50 | ranges = <0x82000000 0 0xd0040000 0xd0040000 0 0x00002000 /* Port 0.0 registers */ | 90 | ranges = |
51 | 0x82000000 0 0xd0042000 0xd0042000 0 0x00002000 /* Port 2.0 registers */ | 91 | <0x82000000 0 0x40000 MBUS_ID(0xf0, 0x01) 0x40000 0 0x00002000 /* Port 0.0 registers */ |
52 | 0x82000000 0 0xd0044000 0xd0044000 0 0x00002000 /* Port 0.1 registers */ | 92 | 0x82000000 0 0x42000 MBUS_ID(0xf0, 0x01) 0x42000 0 0x00002000 /* Port 2.0 registers */ |
53 | 0x82000000 0 0xd0048000 0xd0048000 0 0x00002000 /* Port 0.2 registers */ | 93 | 0x82000000 0 0x44000 MBUS_ID(0xf0, 0x01) 0x44000 0 0x00002000 /* Port 0.1 registers */ |
54 | 0x82000000 0 0xd004c000 0xd004c000 0 0x00002000 /* Port 0.3 registers */ | 94 | 0x82000000 0 0x48000 MBUS_ID(0xf0, 0x01) 0x48000 0 0x00002000 /* Port 0.2 registers */ |
55 | 0x82000000 0 0xd0080000 0xd0080000 0 0x00002000 /* Port 1.0 registers */ | 95 | 0x82000000 0 0x4c000 MBUS_ID(0xf0, 0x01) 0x4c000 0 0x00002000 /* Port 0.3 registers */ |
56 | 0x82000000 0 0xd0082000 0xd0082000 0 0x00002000 /* Port 3.0 registers */ | 96 | 0x82000000 0 0x80000 MBUS_ID(0xf0, 0x01) 0x80000 0 0x00002000 /* Port 1.0 registers */ |
57 | 0x82000000 0 0xd0084000 0xd0084000 0 0x00002000 /* Port 1.1 registers */ | 97 | 0x82000000 0 0x82000 MBUS_ID(0xf0, 0x01) 0x82000 0 0x00002000 /* Port 3.0 registers */ |
58 | 0x82000000 0 0xd0088000 0xd0088000 0 0x00002000 /* Port 1.2 registers */ | 98 | 0x82000000 0 0x84000 MBUS_ID(0xf0, 0x01) 0x84000 0 0x00002000 /* Port 1.1 registers */ |
59 | 0x82000000 0 0xd008c000 0xd008c000 0 0x00002000 /* Port 1.3 registers */ | 99 | 0x82000000 0 0x88000 MBUS_ID(0xf0, 0x01) 0x88000 0 0x00002000 /* Port 1.2 registers */ |
60 | 0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */ | 100 | 0x82000000 0 0x8c000 MBUS_ID(0xf0, 0x01) 0x8c000 0 0x00002000 /* Port 1.3 registers */ |
61 | 0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */ | 101 | 0x82000000 0x1 0 MBUS_ID(0x04, 0xe8) 0 1 0 /* Port 0.0 MEM */ |
102 | 0x81000000 0x1 0 MBUS_ID(0x04, 0xe0) 0 1 0 /* Port 0.0 IO */ | ||
103 | 0x82000000 0x2 0 MBUS_ID(0x04, 0xd8) 0 1 0 /* Port 0.1 MEM */ | ||
104 | 0x81000000 0x2 0 MBUS_ID(0x04, 0xd0) 0 1 0 /* Port 0.1 IO */ | ||
105 | 0x82000000 0x3 0 MBUS_ID(0x04, 0xb8) 0 1 0 /* Port 0.2 MEM */ | ||
106 | 0x81000000 0x3 0 MBUS_ID(0x04, 0xb0) 0 1 0 /* Port 0.2 IO */ | ||
107 | 0x82000000 0x4 0 MBUS_ID(0x04, 0x78) 0 1 0 /* Port 0.3 MEM */ | ||
108 | 0x81000000 0x4 0 MBUS_ID(0x04, 0x70) 0 1 0 /* Port 0.3 IO */ | ||
109 | |||
110 | 0x82000000 0x5 0 MBUS_ID(0x08, 0xe8) 0 1 0 /* Port 1.0 MEM */ | ||
111 | 0x81000000 0x5 0 MBUS_ID(0x08, 0xe0) 0 1 0 /* Port 1.0 IO */ | ||
112 | 0x82000000 0x6 0 MBUS_ID(0x08, 0xd8) 0 1 0 /* Port 1.1 MEM */ | ||
113 | 0x81000000 0x6 0 MBUS_ID(0x08, 0xd0) 0 1 0 /* Port 1.1 IO */ | ||
114 | 0x82000000 0x7 0 MBUS_ID(0x08, 0xb8) 0 1 0 /* Port 1.2 MEM */ | ||
115 | 0x81000000 0x7 0 MBUS_ID(0x08, 0xb0) 0 1 0 /* Port 1.2 IO */ | ||
116 | 0x82000000 0x8 0 MBUS_ID(0x08, 0x78) 0 1 0 /* Port 1.3 MEM */ | ||
117 | 0x81000000 0x8 0 MBUS_ID(0x08, 0x70) 0 1 0 /* Port 1.3 IO */ | ||
118 | |||
119 | 0x82000000 0x9 0 MBUS_ID(0x04, 0xf8) 0 1 0 /* Port 2.0 MEM */ | ||
120 | 0x81000000 0x9 0 MBUS_ID(0x04, 0xf0) 0 1 0 /* Port 2.0 IO */ | ||
121 | |||
122 | 0x82000000 0xa 0 MBUS_ID(0x08, 0xf8) 0 1 0 /* Port 3.0 MEM */ | ||
123 | 0x81000000 0xa 0 MBUS_ID(0x08, 0xf0) 0 1 0 /* Port 3.0 IO */>; | ||
62 | 124 | ||
63 | pcie@1,0 { | 125 | pcie@1,0 { |
64 | device_type = "pci"; | 126 | device_type = "pci"; |
65 | assigned-addresses = <0x82000800 0 0xd0040000 0 0x2000>; | 127 | assigned-addresses = <0x82000800 0 0x40000 0 0x2000>; |
66 | reg = <0x0800 0 0 0 0>; | 128 | reg = <0x0800 0 0 0 0>; |
67 | #address-cells = <3>; | 129 | #address-cells = <3>; |
68 | #size-cells = <2>; | 130 | #size-cells = <2>; |
69 | #interrupt-cells = <1>; | 131 | #interrupt-cells = <1>; |
70 | ranges; | 132 | ranges = <0x82000000 0 0 0x82000000 0x1 0 1 0 |
133 | 0x81000000 0 0 0x81000000 0x1 0 1 0>; | ||
71 | interrupt-map-mask = <0 0 0 0>; | 134 | interrupt-map-mask = <0 0 0 0>; |
72 | interrupt-map = <0 0 0 0 &mpic 58>; | 135 | interrupt-map = <0 0 0 0 &mpic 58>; |
73 | marvell,pcie-port = <0>; | 136 | marvell,pcie-port = <0>; |
@@ -78,12 +141,13 @@ pcie-controller { | |||
78 | 141 | ||
79 | pcie@2,0 { | 142 | pcie@2,0 { |
80 | device_type = "pci"; | 143 | device_type = "pci"; |
81 | assigned-addresses = <0x82001000 0 0xd0044000 0 0x2000>; | 144 | assigned-addresses = <0x82001000 0 0x44000 0 0x2000>; |
82 | reg = <0x1000 0 0 0 0>; | 145 | reg = <0x1000 0 0 0 0>; |
83 | #address-cells = <3>; | 146 | #address-cells = <3>; |
84 | #size-cells = <2>; | 147 | #size-cells = <2>; |
85 | #interrupt-cells = <1>; | 148 | #interrupt-cells = <1>; |
86 | ranges; | 149 | ranges = <0x82000000 0 0 0x82000000 0x2 0 1 0 |
150 | 0x81000000 0 0 0x81000000 0x2 0 1 0>; | ||
87 | interrupt-map-mask = <0 0 0 0>; | 151 | interrupt-map-mask = <0 0 0 0>; |
88 | interrupt-map = <0 0 0 0 &mpic 59>; | 152 | interrupt-map = <0 0 0 0 &mpic 59>; |
89 | marvell,pcie-port = <0>; | 153 | marvell,pcie-port = <0>; |
@@ -94,12 +158,13 @@ pcie-controller { | |||
94 | 158 | ||
95 | pcie@3,0 { | 159 | pcie@3,0 { |
96 | device_type = "pci"; | 160 | device_type = "pci"; |
97 | assigned-addresses = <0x82001800 0 0xd0048000 0 0x2000>; | 161 | assigned-addresses = <0x82001800 0 0x48000 0 0x2000>; |
98 | reg = <0x1800 0 0 0 0>; | 162 | reg = <0x1800 0 0 0 0>; |
99 | #address-cells = <3>; | 163 | #address-cells = <3>; |
100 | #size-cells = <2>; | 164 | #size-cells = <2>; |
101 | #interrupt-cells = <1>; | 165 | #interrupt-cells = <1>; |
102 | ranges; | 166 | ranges = <0x82000000 0 0 0x82000000 0x3 0 1 0 |
167 | 0x81000000 0 0 0x81000000 0x3 0 1 0>; | ||
103 | interrupt-map-mask = <0 0 0 0>; | 168 | interrupt-map-mask = <0 0 0 0>; |
104 | interrupt-map = <0 0 0 0 &mpic 60>; | 169 | interrupt-map = <0 0 0 0 &mpic 60>; |
105 | marvell,pcie-port = <0>; | 170 | marvell,pcie-port = <0>; |
@@ -110,12 +175,13 @@ pcie-controller { | |||
110 | 175 | ||
111 | pcie@4,0 { | 176 | pcie@4,0 { |
112 | device_type = "pci"; | 177 | device_type = "pci"; |
113 | assigned-addresses = <0x82002000 0 0xd004c000 0 0x2000>; | 178 | assigned-addresses = <0x82002000 0 0x4c000 0 0x2000>; |
114 | reg = <0x2000 0 0 0 0>; | 179 | reg = <0x2000 0 0 0 0>; |
115 | #address-cells = <3>; | 180 | #address-cells = <3>; |
116 | #size-cells = <2>; | 181 | #size-cells = <2>; |
117 | #interrupt-cells = <1>; | 182 | #interrupt-cells = <1>; |
118 | ranges; | 183 | ranges = <0x82000000 0 0 0x82000000 0x4 0 1 0 |
184 | 0x81000000 0 0 0x81000000 0x4 0 1 0>; | ||
119 | interrupt-map-mask = <0 0 0 0>; | 185 | interrupt-map-mask = <0 0 0 0>; |
120 | interrupt-map = <0 0 0 0 &mpic 61>; | 186 | interrupt-map = <0 0 0 0 &mpic 61>; |
121 | marvell,pcie-port = <0>; | 187 | marvell,pcie-port = <0>; |
@@ -126,12 +192,13 @@ pcie-controller { | |||
126 | 192 | ||
127 | pcie@5,0 { | 193 | pcie@5,0 { |
128 | device_type = "pci"; | 194 | device_type = "pci"; |
129 | assigned-addresses = <0x82002800 0 0xd0080000 0 0x2000>; | 195 | assigned-addresses = <0x82002800 0 0x80000 0 0x2000>; |
130 | reg = <0x2800 0 0 0 0>; | 196 | reg = <0x2800 0 0 0 0>; |
131 | #address-cells = <3>; | 197 | #address-cells = <3>; |
132 | #size-cells = <2>; | 198 | #size-cells = <2>; |
133 | #interrupt-cells = <1>; | 199 | #interrupt-cells = <1>; |
134 | ranges; | 200 | ranges = <0x82000000 0 0 0x82000000 0x5 0 1 0 |
201 | 0x81000000 0 0 0x81000000 0x5 0 1 0>; | ||
135 | interrupt-map-mask = <0 0 0 0>; | 202 | interrupt-map-mask = <0 0 0 0>; |
136 | interrupt-map = <0 0 0 0 &mpic 62>; | 203 | interrupt-map = <0 0 0 0 &mpic 62>; |
137 | marvell,pcie-port = <1>; | 204 | marvell,pcie-port = <1>; |
@@ -142,12 +209,13 @@ pcie-controller { | |||
142 | 209 | ||
143 | pcie@6,0 { | 210 | pcie@6,0 { |
144 | device_type = "pci"; | 211 | device_type = "pci"; |
145 | assigned-addresses = <0x82003000 0 0xd0084000 0 0x2000>; | 212 | assigned-addresses = <0x82003000 0 0x84000 0 0x2000>; |
146 | reg = <0x3000 0 0 0 0>; | 213 | reg = <0x3000 0 0 0 0>; |
147 | #address-cells = <3>; | 214 | #address-cells = <3>; |
148 | #size-cells = <2>; | 215 | #size-cells = <2>; |
149 | #interrupt-cells = <1>; | 216 | #interrupt-cells = <1>; |
150 | ranges; | 217 | ranges = <0x82000000 0 0 0x82000000 0x6 0 1 0 |
218 | 0x81000000 0 0 0x81000000 0x6 0 1 0>; | ||
151 | interrupt-map-mask = <0 0 0 0>; | 219 | interrupt-map-mask = <0 0 0 0>; |
152 | interrupt-map = <0 0 0 0 &mpic 63>; | 220 | interrupt-map = <0 0 0 0 &mpic 63>; |
153 | marvell,pcie-port = <1>; | 221 | marvell,pcie-port = <1>; |
@@ -158,12 +226,13 @@ pcie-controller { | |||
158 | 226 | ||
159 | pcie@7,0 { | 227 | pcie@7,0 { |
160 | device_type = "pci"; | 228 | device_type = "pci"; |
161 | assigned-addresses = <0x82003800 0 0xd0088000 0 0x2000>; | 229 | assigned-addresses = <0x82003800 0 0x88000 0 0x2000>; |
162 | reg = <0x3800 0 0 0 0>; | 230 | reg = <0x3800 0 0 0 0>; |
163 | #address-cells = <3>; | 231 | #address-cells = <3>; |
164 | #size-cells = <2>; | 232 | #size-cells = <2>; |
165 | #interrupt-cells = <1>; | 233 | #interrupt-cells = <1>; |
166 | ranges; | 234 | ranges = <0x82000000 0 0 0x82000000 0x7 0 1 0 |
235 | 0x81000000 0 0 0x81000000 0x7 0 1 0>; | ||
167 | interrupt-map-mask = <0 0 0 0>; | 236 | interrupt-map-mask = <0 0 0 0>; |
168 | interrupt-map = <0 0 0 0 &mpic 64>; | 237 | interrupt-map = <0 0 0 0 &mpic 64>; |
169 | marvell,pcie-port = <1>; | 238 | marvell,pcie-port = <1>; |
@@ -174,12 +243,13 @@ pcie-controller { | |||
174 | 243 | ||
175 | pcie@8,0 { | 244 | pcie@8,0 { |
176 | device_type = "pci"; | 245 | device_type = "pci"; |
177 | assigned-addresses = <0x82004000 0 0xd008c000 0 0x2000>; | 246 | assigned-addresses = <0x82004000 0 0x8c000 0 0x2000>; |
178 | reg = <0x4000 0 0 0 0>; | 247 | reg = <0x4000 0 0 0 0>; |
179 | #address-cells = <3>; | 248 | #address-cells = <3>; |
180 | #size-cells = <2>; | 249 | #size-cells = <2>; |
181 | #interrupt-cells = <1>; | 250 | #interrupt-cells = <1>; |
182 | ranges; | 251 | ranges = <0x82000000 0 0 0x82000000 0x8 0 1 0 |
252 | 0x81000000 0 0 0x81000000 0x8 0 1 0>; | ||
183 | interrupt-map-mask = <0 0 0 0>; | 253 | interrupt-map-mask = <0 0 0 0>; |
184 | interrupt-map = <0 0 0 0 &mpic 65>; | 254 | interrupt-map = <0 0 0 0 &mpic 65>; |
185 | marvell,pcie-port = <1>; | 255 | marvell,pcie-port = <1>; |
@@ -187,14 +257,16 @@ pcie-controller { | |||
187 | clocks = <&gateclk 12>; | 257 | clocks = <&gateclk 12>; |
188 | status = "disabled"; | 258 | status = "disabled"; |
189 | }; | 259 | }; |
260 | |||
190 | pcie@9,0 { | 261 | pcie@9,0 { |
191 | device_type = "pci"; | 262 | device_type = "pci"; |
192 | assigned-addresses = <0x82004800 0 0xd0042000 0 0x2000>; | 263 | assigned-addresses = <0x82004800 0 0x42000 0 0x2000>; |
193 | reg = <0x4800 0 0 0 0>; | 264 | reg = <0x4800 0 0 0 0>; |
194 | #address-cells = <3>; | 265 | #address-cells = <3>; |
195 | #size-cells = <2>; | 266 | #size-cells = <2>; |
196 | #interrupt-cells = <1>; | 267 | #interrupt-cells = <1>; |
197 | ranges; | 268 | ranges = <0x82000000 0 0 0x82000000 0x9 0 1 0 |
269 | 0x81000000 0 0 0x81000000 0x9 0 1 0>; | ||
198 | interrupt-map-mask = <0 0 0 0>; | 270 | interrupt-map-mask = <0 0 0 0>; |
199 | interrupt-map = <0 0 0 0 &mpic 99>; | 271 | interrupt-map = <0 0 0 0 &mpic 99>; |
200 | marvell,pcie-port = <2>; | 272 | marvell,pcie-port = <2>; |
@@ -205,12 +277,13 @@ pcie-controller { | |||
205 | 277 | ||
206 | pcie@10,0 { | 278 | pcie@10,0 { |
207 | device_type = "pci"; | 279 | device_type = "pci"; |
208 | assigned-addresses = <0x82005000 0 0xd0082000 0 0x2000>; | 280 | assigned-addresses = <0x82005000 0 0x82000 0 0x2000>; |
209 | reg = <0x5000 0 0 0 0>; | 281 | reg = <0x5000 0 0 0 0>; |
210 | #address-cells = <3>; | 282 | #address-cells = <3>; |
211 | #size-cells = <2>; | 283 | #size-cells = <2>; |
212 | #interrupt-cells = <1>; | 284 | #interrupt-cells = <1>; |
213 | ranges; | 285 | ranges = <0x82000000 0 0 0x82000000 0xa 0 1 0 |
286 | 0x81000000 0 0 0x81000000 0xa 0 1 0>; | ||
214 | interrupt-map-mask = <0 0 0 0>; | 287 | interrupt-map-mask = <0 0 0 0>; |
215 | interrupt-map = <0 0 0 0 &mpic 103>; | 288 | interrupt-map = <0 0 0 0 &mpic 103>; |
216 | marvell,pcie-port = <3>; | 289 | marvell,pcie-port = <3>; |
diff --git a/Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt b/Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt new file mode 100644 index 000000000000..6b7510775c50 --- /dev/null +++ b/Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt | |||
@@ -0,0 +1,163 @@ | |||
1 | NVIDIA Tegra PCIe controller | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: "nvidia,tegra20-pcie" or "nvidia,tegra30-pcie" | ||
5 | - device_type: Must be "pci" | ||
6 | - reg: A list of physical base address and length for each set of controller | ||
7 | registers. Must contain an entry for each entry in the reg-names property. | ||
8 | - reg-names: Must include the following entries: | ||
9 | "pads": PADS registers | ||
10 | "afi": AFI registers | ||
11 | "cs": configuration space region | ||
12 | - interrupts: A list of interrupt outputs of the controller. Must contain an | ||
13 | entry for each entry in the interrupt-names property. | ||
14 | - interrupt-names: Must include the following entries: | ||
15 | "intr": The Tegra interrupt that is asserted for controller interrupts | ||
16 | "msi": The Tegra interrupt that is asserted when an MSI is received | ||
17 | - pex-clk-supply: Supply voltage for internal reference clock | ||
18 | - vdd-supply: Power supply for controller (1.05V) | ||
19 | - avdd-supply: Power supply for controller (1.05V) (not required for Tegra20) | ||
20 | - bus-range: Range of bus numbers associated with this controller | ||
21 | - #address-cells: Address representation for root ports (must be 3) | ||
22 | - cell 0 specifies the bus and device numbers of the root port: | ||
23 | [23:16]: bus number | ||
24 | [15:11]: device number | ||
25 | - cell 1 denotes the upper 32 address bits and should be 0 | ||
26 | - cell 2 contains the lower 32 address bits and is used to translate to the | ||
27 | CPU address space | ||
28 | - #size-cells: Size representation for root ports (must be 2) | ||
29 | - ranges: Describes the translation of addresses for root ports and standard | ||
30 | PCI regions. The entries must be 6 cells each, where the first three cells | ||
31 | correspond to the address as described for the #address-cells property | ||
32 | above, the fourth cell is the physical CPU address to translate to and the | ||
33 | fifth and six cells are as described for the #size-cells property above. | ||
34 | - The first two entries are expected to translate the addresses for the root | ||
35 | port registers, which are referenced by the assigned-addresses property of | ||
36 | the root port nodes (see below). | ||
37 | - The remaining entries setup the mapping for the standard I/O, memory and | ||
38 | prefetchable PCI regions. The first cell determines the type of region | ||
39 | that is setup: | ||
40 | - 0x81000000: I/O memory region | ||
41 | - 0x82000000: non-prefetchable memory region | ||
42 | - 0xc2000000: prefetchable memory region | ||
43 | Please refer to the standard PCI bus binding document for a more detailed | ||
44 | explanation. | ||
45 | - clocks: List of clock inputs of the controller. Must contain an entry for | ||
46 | each entry in the clock-names property. | ||
47 | - clock-names: Must include the following entries: | ||
48 | "pex": The Tegra clock of that name | ||
49 | "afi": The Tegra clock of that name | ||
50 | "pcie_xclk": The Tegra clock of that name | ||
51 | "pll_e": The Tegra clock of that name | ||
52 | "cml": The Tegra clock of that name (not required for Tegra20) | ||
53 | |||
54 | Root ports are defined as subnodes of the PCIe controller node. | ||
55 | |||
56 | Required properties: | ||
57 | - device_type: Must be "pci" | ||
58 | - assigned-addresses: Address and size of the port configuration registers | ||
59 | - reg: PCI bus address of the root port | ||
60 | - #address-cells: Must be 3 | ||
61 | - #size-cells: Must be 2 | ||
62 | - ranges: Sub-ranges distributed from the PCIe controller node. An empty | ||
63 | property is sufficient. | ||
64 | - nvidia,num-lanes: Number of lanes to use for this port. Valid combinations | ||
65 | are: | ||
66 | - Root port 0 uses 4 lanes, root port 1 is unused. | ||
67 | - Both root ports use 2 lanes. | ||
68 | |||
69 | Example: | ||
70 | |||
71 | SoC DTSI: | ||
72 | |||
73 | pcie-controller { | ||
74 | compatible = "nvidia,tegra20-pcie"; | ||
75 | device_type = "pci"; | ||
76 | reg = <0x80003000 0x00000800 /* PADS registers */ | ||
77 | 0x80003800 0x00000200 /* AFI registers */ | ||
78 | 0x90000000 0x10000000>; /* configuration space */ | ||
79 | reg-names = "pads", "afi", "cs"; | ||
80 | interrupts = <0 98 0x04 /* controller interrupt */ | ||
81 | 0 99 0x04>; /* MSI interrupt */ | ||
82 | interrupt-names = "intr", "msi"; | ||
83 | |||
84 | bus-range = <0x00 0xff>; | ||
85 | #address-cells = <3>; | ||
86 | #size-cells = <2>; | ||
87 | |||
88 | ranges = <0x82000000 0 0x80000000 0x80000000 0 0x00001000 /* port 0 registers */ | ||
89 | 0x82000000 0 0x80001000 0x80001000 0 0x00001000 /* port 1 registers */ | ||
90 | 0x81000000 0 0 0x82000000 0 0x00010000 /* downstream I/O */ | ||
91 | 0x82000000 0 0xa0000000 0xa0000000 0 0x10000000 /* non-prefetchable memory */ | ||
92 | 0xc2000000 0 0xb0000000 0xb0000000 0 0x10000000>; /* prefetchable memory */ | ||
93 | |||
94 | clocks = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 74>, | ||
95 | <&tegra_car 118>; | ||
96 | clock-names = "pex", "afi", "pcie_xclk", "pll_e"; | ||
97 | status = "disabled"; | ||
98 | |||
99 | pci@1,0 { | ||
100 | device_type = "pci"; | ||
101 | assigned-addresses = <0x82000800 0 0x80000000 0 0x1000>; | ||
102 | reg = <0x000800 0 0 0 0>; | ||
103 | status = "disabled"; | ||
104 | |||
105 | #address-cells = <3>; | ||
106 | #size-cells = <2>; | ||
107 | |||
108 | ranges; | ||
109 | |||
110 | nvidia,num-lanes = <2>; | ||
111 | }; | ||
112 | |||
113 | pci@2,0 { | ||
114 | device_type = "pci"; | ||
115 | assigned-addresses = <0x82001000 0 0x80001000 0 0x1000>; | ||
116 | reg = <0x001000 0 0 0 0>; | ||
117 | status = "disabled"; | ||
118 | |||
119 | #address-cells = <3>; | ||
120 | #size-cells = <2>; | ||
121 | |||
122 | ranges; | ||
123 | |||
124 | nvidia,num-lanes = <2>; | ||
125 | }; | ||
126 | }; | ||
127 | |||
128 | |||
129 | Board DTS: | ||
130 | |||
131 | pcie-controller { | ||
132 | status = "okay"; | ||
133 | |||
134 | vdd-supply = <&pci_vdd_reg>; | ||
135 | pex-clk-supply = <&pci_clk_reg>; | ||
136 | |||
137 | /* root port 00:01.0 */ | ||
138 | pci@1,0 { | ||
139 | status = "okay"; | ||
140 | |||
141 | /* bridge 01:00.0 (optional) */ | ||
142 | pci@0,0 { | ||
143 | reg = <0x010000 0 0 0 0>; | ||
144 | |||
145 | #address-cells = <3>; | ||
146 | #size-cells = <2>; | ||
147 | |||
148 | device_type = "pci"; | ||
149 | |||
150 | /* endpoint 02:00.0 */ | ||
151 | pci@0,0 { | ||
152 | reg = <0x020000 0 0 0 0>; | ||
153 | }; | ||
154 | }; | ||
155 | }; | ||
156 | }; | ||
157 | |||
158 | Note that devices on the PCI bus are dynamically discovered using PCI's bus | ||
159 | enumeration and therefore don't need corresponding device nodes in DT. However | ||
160 | if a device on the PCI bus provides a non-probeable bus such as I2C or SPI, | ||
161 | device nodes need to be added in order to allow the bus' children to be | ||
162 | instantiated at the proper location in the operating system's device tree (as | ||
163 | illustrated by the optional nodes in the example above). | ||
diff --git a/Documentation/devicetree/bindings/watchdog/sun4i-wdt.txt b/Documentation/devicetree/bindings/watchdog/sunxi-wdt.txt index ecd650adff31..e39cb266c8f4 100644 --- a/Documentation/devicetree/bindings/watchdog/sun4i-wdt.txt +++ b/Documentation/devicetree/bindings/watchdog/sunxi-wdt.txt | |||
@@ -1,8 +1,9 @@ | |||
1 | Allwinner sun4i Watchdog timer | 1 | Allwinner SoCs Watchdog timer |
2 | 2 | ||
3 | Required properties: | 3 | Required properties: |
4 | 4 | ||
5 | - compatible : should be "allwinner,sun4i-wdt" | 5 | - compatible : should be "allwinner,<soc-family>-wdt", the currently supported |
6 | SoC families being sun4i and sun6i | ||
6 | - reg : Specifies base physical address and size of the registers. | 7 | - reg : Specifies base physical address and size of the registers. |
7 | 8 | ||
8 | Example: | 9 | Example: |