xref: /OK3568_Linux_fs/kernel/arch/arm/boot/dts/ox820.dtsi (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0-or-later
2*4882a593Smuzhiyun/*
3*4882a593Smuzhiyun * ox820.dtsi - Device tree file for Oxford Semiconductor OX820 SoC
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2016 Neil Armstrong <narmstrong@baylibre.com>
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun#include <dt-bindings/interrupt-controller/arm-gic.h>
9*4882a593Smuzhiyun#include <dt-bindings/clock/oxsemi,ox820.h>
10*4882a593Smuzhiyun#include <dt-bindings/reset/oxsemi,ox820.h>
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun/ {
13*4882a593Smuzhiyun	#address-cells = <1>;
14*4882a593Smuzhiyun	#size-cells = <1>;
15*4882a593Smuzhiyun	compatible = "oxsemi,ox820";
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun	cpus {
18*4882a593Smuzhiyun		#address-cells = <1>;
19*4882a593Smuzhiyun		#size-cells = <0>;
20*4882a593Smuzhiyun		enable-method = "oxsemi,ox820-smp";
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun		cpu@0 {
23*4882a593Smuzhiyun			device_type = "cpu";
24*4882a593Smuzhiyun			compatible = "arm,arm11mpcore";
25*4882a593Smuzhiyun			clocks = <&armclk>;
26*4882a593Smuzhiyun			reg = <0>;
27*4882a593Smuzhiyun		};
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun		cpu@1 {
30*4882a593Smuzhiyun			device_type = "cpu";
31*4882a593Smuzhiyun			compatible = "arm,arm11mpcore";
32*4882a593Smuzhiyun			clocks = <&armclk>;
33*4882a593Smuzhiyun			reg = <1>;
34*4882a593Smuzhiyun		};
35*4882a593Smuzhiyun	};
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun	memory {
38*4882a593Smuzhiyun		device_type = "memory";
39*4882a593Smuzhiyun		/* Max 512MB @ 0x60000000 */
40*4882a593Smuzhiyun		reg = <0x60000000 0x20000000>;
41*4882a593Smuzhiyun	};
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun	clocks {
44*4882a593Smuzhiyun		osc: oscillator {
45*4882a593Smuzhiyun			compatible = "fixed-clock";
46*4882a593Smuzhiyun			#clock-cells = <0>;
47*4882a593Smuzhiyun			clock-frequency = <25000000>;
48*4882a593Smuzhiyun		};
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun		gmacclk: gmacclk {
51*4882a593Smuzhiyun			compatible = "fixed-clock";
52*4882a593Smuzhiyun			#clock-cells = <0>;
53*4882a593Smuzhiyun			clock-frequency = <125000000>;
54*4882a593Smuzhiyun		};
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun		sysclk: sysclk {
57*4882a593Smuzhiyun			compatible = "fixed-factor-clock";
58*4882a593Smuzhiyun			#clock-cells = <0>;
59*4882a593Smuzhiyun			clock-div = <4>;
60*4882a593Smuzhiyun			clock-mult = <1>;
61*4882a593Smuzhiyun			clocks = <&osc>;
62*4882a593Smuzhiyun		};
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun		plla: plla {
65*4882a593Smuzhiyun			compatible = "fixed-clock";
66*4882a593Smuzhiyun			#clock-cells = <0>;
67*4882a593Smuzhiyun			clock-frequency = <850000000>;
68*4882a593Smuzhiyun		};
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun		armclk: armclk {
71*4882a593Smuzhiyun			compatible = "fixed-factor-clock";
72*4882a593Smuzhiyun			#clock-cells = <0>;
73*4882a593Smuzhiyun			clock-div = <2>;
74*4882a593Smuzhiyun			clock-mult = <1>;
75*4882a593Smuzhiyun			clocks = <&plla>;
76*4882a593Smuzhiyun		};
77*4882a593Smuzhiyun	};
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun	soc {
80*4882a593Smuzhiyun		#address-cells = <1>;
81*4882a593Smuzhiyun		#size-cells = <1>;
82*4882a593Smuzhiyun		compatible = "simple-bus";
83*4882a593Smuzhiyun		ranges;
84*4882a593Smuzhiyun		interrupt-parent = <&gic>;
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun		nandc: nand-controller@41000000 {
87*4882a593Smuzhiyun			compatible = "oxsemi,ox820-nand";
88*4882a593Smuzhiyun			reg = <0x41000000 0x100000>;
89*4882a593Smuzhiyun			clocks = <&stdclk CLK_820_NAND>;
90*4882a593Smuzhiyun			resets = <&reset RESET_NAND>;
91*4882a593Smuzhiyun			#address-cells = <1>;
92*4882a593Smuzhiyun			#size-cells = <0>;
93*4882a593Smuzhiyun			status = "disabled";
94*4882a593Smuzhiyun		};
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun		etha: ethernet@40400000 {
97*4882a593Smuzhiyun			compatible = "oxsemi,ox820-dwmac", "snps,dwmac";
98*4882a593Smuzhiyun			reg = <0x40400000 0x2000>;
99*4882a593Smuzhiyun			interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
100*4882a593Smuzhiyun				     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
101*4882a593Smuzhiyun			interrupt-names = "macirq", "eth_wake_irq";
102*4882a593Smuzhiyun			mac-address = [000000000000]; /* Filled in by U-Boot */
103*4882a593Smuzhiyun			phy-mode = "rgmii";
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun			clocks = <&stdclk CLK_820_ETHA>, <&gmacclk>;
106*4882a593Smuzhiyun			clock-names = "gmac", "stmmaceth";
107*4882a593Smuzhiyun			resets = <&reset RESET_MAC>;
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun			/* Regmap for sys registers */
110*4882a593Smuzhiyun			oxsemi,sys-ctrl = <&sys>;
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun			status = "disabled";
113*4882a593Smuzhiyun		};
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun		apb-bridge@44000000 {
116*4882a593Smuzhiyun			#address-cells = <1>;
117*4882a593Smuzhiyun			#size-cells = <1>;
118*4882a593Smuzhiyun			compatible = "simple-bus";
119*4882a593Smuzhiyun			ranges = <0 0x44000000 0x1000000>;
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun			pinctrl: pinctrl {
122*4882a593Smuzhiyun				compatible = "oxsemi,ox820-pinctrl";
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun				/* Regmap for sys registers */
125*4882a593Smuzhiyun				oxsemi,sys-ctrl = <&sys>;
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun				pinctrl_uart0: uart0 {
128*4882a593Smuzhiyun					uart0 {
129*4882a593Smuzhiyun						pins = "gpio30", "gpio31";
130*4882a593Smuzhiyun						function = "fct5";
131*4882a593Smuzhiyun					};
132*4882a593Smuzhiyun				};
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun				pinctrl_uart0_modem: uart0_modem {
135*4882a593Smuzhiyun					uart0_modem_a {
136*4882a593Smuzhiyun						pins = "gpio24", "gpio24", "gpio26", "gpio27";
137*4882a593Smuzhiyun						function = "fct4";
138*4882a593Smuzhiyun					};
139*4882a593Smuzhiyun					uart0_modem_b {
140*4882a593Smuzhiyun						pins = "gpio28", "gpio29";
141*4882a593Smuzhiyun						function = "fct5";
142*4882a593Smuzhiyun					};
143*4882a593Smuzhiyun				};
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun				pinctrl_uart1: uart1 {
146*4882a593Smuzhiyun					uart1 {
147*4882a593Smuzhiyun						pins = "gpio7", "gpio8";
148*4882a593Smuzhiyun						function = "fct4";
149*4882a593Smuzhiyun					};
150*4882a593Smuzhiyun				};
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun				pinctrl_uart1_modem: uart1_modem {
153*4882a593Smuzhiyun					uart1_modem {
154*4882a593Smuzhiyun						pins = "gpio5", "gpio6", "gpio40", "gpio41", "gpio42", "gpio43";
155*4882a593Smuzhiyun						function = "fct4";
156*4882a593Smuzhiyun					};
157*4882a593Smuzhiyun				};
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun				pinctrl_etha_mdio: etha_mdio {
160*4882a593Smuzhiyun					etha_mdio {
161*4882a593Smuzhiyun						pins = "gpio3", "gpio4";
162*4882a593Smuzhiyun						function = "fct1";
163*4882a593Smuzhiyun					};
164*4882a593Smuzhiyun				};
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun				pinctrl_nand: nand {
167*4882a593Smuzhiyun					nand {
168*4882a593Smuzhiyun						pins = "gpio12", "gpio13", "gpio14", "gpio15",
169*4882a593Smuzhiyun						     "gpio16", "gpio17", "gpio18", "gpio19",
170*4882a593Smuzhiyun						     "gpio20", "gpio21", "gpio22", "gpio23",
171*4882a593Smuzhiyun						     "gpio24";
172*4882a593Smuzhiyun						function = "fct1";
173*4882a593Smuzhiyun					};
174*4882a593Smuzhiyun				};
175*4882a593Smuzhiyun			};
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun			gpio0: gpio@0 {
178*4882a593Smuzhiyun				compatible = "oxsemi,ox820-gpio";
179*4882a593Smuzhiyun				reg = <0x000000 0x100000>;
180*4882a593Smuzhiyun				interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
181*4882a593Smuzhiyun				#gpio-cells = <2>;
182*4882a593Smuzhiyun				gpio-controller;
183*4882a593Smuzhiyun				interrupt-controller;
184*4882a593Smuzhiyun				#interrupt-cells = <2>;
185*4882a593Smuzhiyun				ngpios = <32>;
186*4882a593Smuzhiyun				oxsemi,gpio-bank = <0>;
187*4882a593Smuzhiyun				gpio-ranges = <&pinctrl 0 0 32>;
188*4882a593Smuzhiyun			};
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun			gpio1: gpio@100000 {
191*4882a593Smuzhiyun				compatible = "oxsemi,ox820-gpio";
192*4882a593Smuzhiyun				reg = <0x100000 0x100000>;
193*4882a593Smuzhiyun				interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
194*4882a593Smuzhiyun				#gpio-cells = <2>;
195*4882a593Smuzhiyun				gpio-controller;
196*4882a593Smuzhiyun				interrupt-controller;
197*4882a593Smuzhiyun				#interrupt-cells = <2>;
198*4882a593Smuzhiyun				ngpios = <18>;
199*4882a593Smuzhiyun				oxsemi,gpio-bank = <1>;
200*4882a593Smuzhiyun				gpio-ranges = <&pinctrl 0 32 18>;
201*4882a593Smuzhiyun			};
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun			uart0: serial@200000 {
204*4882a593Smuzhiyun			       compatible = "ns16550a";
205*4882a593Smuzhiyun			       reg = <0x200000 0x100000>;
206*4882a593Smuzhiyun			       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
207*4882a593Smuzhiyun			       reg-shift = <0>;
208*4882a593Smuzhiyun			       fifo-size = <16>;
209*4882a593Smuzhiyun			       reg-io-width = <1>;
210*4882a593Smuzhiyun			       current-speed = <115200>;
211*4882a593Smuzhiyun			       no-loopback-test;
212*4882a593Smuzhiyun			       status = "disabled";
213*4882a593Smuzhiyun			       clocks = <&sysclk>;
214*4882a593Smuzhiyun			       resets = <&reset RESET_UART1>;
215*4882a593Smuzhiyun			};
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun			uart1: serial@300000 {
218*4882a593Smuzhiyun			       compatible = "ns16550a";
219*4882a593Smuzhiyun			       reg = <0x200000 0x100000>;
220*4882a593Smuzhiyun			       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
221*4882a593Smuzhiyun			       reg-shift = <0>;
222*4882a593Smuzhiyun			       fifo-size = <16>;
223*4882a593Smuzhiyun			       reg-io-width = <1>;
224*4882a593Smuzhiyun			       current-speed = <115200>;
225*4882a593Smuzhiyun			       no-loopback-test;
226*4882a593Smuzhiyun			       status = "disabled";
227*4882a593Smuzhiyun			       clocks = <&sysclk>;
228*4882a593Smuzhiyun			       resets = <&reset RESET_UART2>;
229*4882a593Smuzhiyun			};
230*4882a593Smuzhiyun
231*4882a593Smuzhiyun			rps@400000 {
232*4882a593Smuzhiyun				#address-cells = <1>;
233*4882a593Smuzhiyun				#size-cells = <1>;
234*4882a593Smuzhiyun				compatible = "simple-bus";
235*4882a593Smuzhiyun				ranges = <0 0x400000 0x100000>;
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun				intc: interrupt-controller@0 {
238*4882a593Smuzhiyun					compatible = "oxsemi,ox820-rps-irq", "oxsemi,ox810se-rps-irq";
239*4882a593Smuzhiyun					interrupt-controller;
240*4882a593Smuzhiyun					reg = <0 0x200>;
241*4882a593Smuzhiyun					interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
242*4882a593Smuzhiyun					#interrupt-cells = <1>;
243*4882a593Smuzhiyun					valid-mask = <0xffffffff>;
244*4882a593Smuzhiyun					clear-mask = <0xffffffff>;
245*4882a593Smuzhiyun				};
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun				timer0: timer@200 {
248*4882a593Smuzhiyun					compatible = "oxsemi,ox820-rps-timer";
249*4882a593Smuzhiyun					reg = <0x200 0x40>;
250*4882a593Smuzhiyun					clocks = <&sysclk>;
251*4882a593Smuzhiyun					interrupt-parent = <&intc>;
252*4882a593Smuzhiyun					interrupts = <4>;
253*4882a593Smuzhiyun				};
254*4882a593Smuzhiyun			};
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun			sys: sys-ctrl@e00000 {
257*4882a593Smuzhiyun				compatible = "oxsemi,ox820-sys-ctrl", "syscon", "simple-mfd";
258*4882a593Smuzhiyun				reg = <0xe00000 0x200000>;
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun				reset: reset-controller {
261*4882a593Smuzhiyun					compatible = "oxsemi,ox820-reset", "oxsemi,ox810se-reset";
262*4882a593Smuzhiyun					#reset-cells = <1>;
263*4882a593Smuzhiyun				};
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun				stdclk: stdclk {
266*4882a593Smuzhiyun					compatible = "oxsemi,ox820-stdclk", "oxsemi,ox810se-stdclk";
267*4882a593Smuzhiyun					#clock-cells = <1>;
268*4882a593Smuzhiyun				};
269*4882a593Smuzhiyun			};
270*4882a593Smuzhiyun		};
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun		apb-bridge@47000000 {
273*4882a593Smuzhiyun			#address-cells = <1>;
274*4882a593Smuzhiyun			#size-cells = <1>;
275*4882a593Smuzhiyun			compatible = "simple-bus";
276*4882a593Smuzhiyun			ranges = <0 0x47000000 0x1000000>;
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun			scu: scu@0 {
279*4882a593Smuzhiyun				compatible = "arm,arm11mp-scu";
280*4882a593Smuzhiyun				reg = <0x0 0x100>;
281*4882a593Smuzhiyun			};
282*4882a593Smuzhiyun
283*4882a593Smuzhiyun			local-timer@600 {
284*4882a593Smuzhiyun				compatible = "arm,arm11mp-twd-timer";
285*4882a593Smuzhiyun				reg = <0x600 0x20>;
286*4882a593Smuzhiyun				interrupts = <GIC_PPI 13 (GIC_CPU_MASK_RAW(3)|IRQ_TYPE_LEVEL_HIGH)>;
287*4882a593Smuzhiyun				clocks = <&armclk>;
288*4882a593Smuzhiyun			};
289*4882a593Smuzhiyun
290*4882a593Smuzhiyun			gic: interrupt-controller@1000 {
291*4882a593Smuzhiyun				compatible = "arm,arm11mp-gic";
292*4882a593Smuzhiyun				interrupt-controller;
293*4882a593Smuzhiyun				#interrupt-cells = <3>;
294*4882a593Smuzhiyun				reg = <0x1000 0x1000>,
295*4882a593Smuzhiyun				      <0x100 0x500>;
296*4882a593Smuzhiyun			};
297*4882a593Smuzhiyun		};
298*4882a593Smuzhiyun	};
299*4882a593Smuzhiyun};
300