xref: /OK3568_Linux_fs/kernel/arch/arc/boot/dts/axs10x_mb.dtsi (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun/*
3*4882a593Smuzhiyun * Support for peripherals on the AXS10x mainboard
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2013-15 Synopsys, Inc. (www.synopsys.com)
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun/ {
9*4882a593Smuzhiyun	aliases {
10*4882a593Smuzhiyun		ethernet = &gmac;
11*4882a593Smuzhiyun	};
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun	axs10x_mb {
14*4882a593Smuzhiyun		compatible = "simple-bus";
15*4882a593Smuzhiyun		#address-cells = <1>;
16*4882a593Smuzhiyun		#size-cells = <1>;
17*4882a593Smuzhiyun		ranges = <0x00000000 0x0 0xe0000000 0x10000000>;
18*4882a593Smuzhiyun		interrupt-parent = <&mb_intc>;
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun		creg_rst: reset-controller@11220 {
21*4882a593Smuzhiyun			compatible = "snps,axs10x-reset";
22*4882a593Smuzhiyun			#reset-cells = <1>;
23*4882a593Smuzhiyun			reg = <0x11220 0x4>;
24*4882a593Smuzhiyun		};
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun		i2sclk: i2sclk@100a0 {
27*4882a593Smuzhiyun			compatible = "snps,axs10x-i2s-pll-clock";
28*4882a593Smuzhiyun			reg = <0x100a0 0x10>;
29*4882a593Smuzhiyun			clocks = <&i2spll_clk>;
30*4882a593Smuzhiyun			#clock-cells = <0>;
31*4882a593Smuzhiyun		};
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun		clocks {
34*4882a593Smuzhiyun			i2spll_clk: i2spll_clk {
35*4882a593Smuzhiyun				compatible = "fixed-clock";
36*4882a593Smuzhiyun				clock-frequency = <27000000>;
37*4882a593Smuzhiyun				#clock-cells = <0>;
38*4882a593Smuzhiyun			};
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun			i2cclk: i2cclk {
41*4882a593Smuzhiyun				compatible = "fixed-clock";
42*4882a593Smuzhiyun				clock-frequency = <50000000>;
43*4882a593Smuzhiyun				#clock-cells = <0>;
44*4882a593Smuzhiyun			};
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun			apbclk: apbclk {
47*4882a593Smuzhiyun				compatible = "fixed-clock";
48*4882a593Smuzhiyun				clock-frequency = <50000000>;
49*4882a593Smuzhiyun				#clock-cells = <0>;
50*4882a593Smuzhiyun			};
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun			mmcclk: mmcclk {
53*4882a593Smuzhiyun				compatible = "fixed-clock";
54*4882a593Smuzhiyun				/*
55*4882a593Smuzhiyun				 * DW sdio controller has external ciu clock divider
56*4882a593Smuzhiyun				 * controlled via register in SDIO IP. It divides
57*4882a593Smuzhiyun				 * sdio_ref_clk (which comes from CGU) by 16 for
58*4882a593Smuzhiyun				 * default. So default mmcclk clock (which comes
59*4882a593Smuzhiyun				 * to sdk_in) is 25000000 Hz.
60*4882a593Smuzhiyun				 */
61*4882a593Smuzhiyun				clock-frequency = <25000000>;
62*4882a593Smuzhiyun				#clock-cells = <0>;
63*4882a593Smuzhiyun			};
64*4882a593Smuzhiyun		};
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun		pguclk: pguclk@10080 {
67*4882a593Smuzhiyun			compatible = "snps,axs10x-pgu-pll-clock";
68*4882a593Smuzhiyun			reg = <0x10080 0x10>, <0x110 0x10>;
69*4882a593Smuzhiyun			#clock-cells = <0>;
70*4882a593Smuzhiyun			clocks = <&input_clk>;
71*4882a593Smuzhiyun		};
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun		gmac: ethernet@18000 {
74*4882a593Smuzhiyun			#interrupt-cells = <1>;
75*4882a593Smuzhiyun			compatible = "snps,dwmac";
76*4882a593Smuzhiyun			reg = < 0x18000 0x2000 >;
77*4882a593Smuzhiyun			interrupts = < 4 >;
78*4882a593Smuzhiyun			interrupt-names = "macirq";
79*4882a593Smuzhiyun			phy-mode = "rgmii";
80*4882a593Smuzhiyun			snps,pbl = < 32 >;
81*4882a593Smuzhiyun			snps,multicast-filter-bins = <256>;
82*4882a593Smuzhiyun			clocks = <&apbclk>;
83*4882a593Smuzhiyun			clock-names = "stmmaceth";
84*4882a593Smuzhiyun			max-speed = <100>;
85*4882a593Smuzhiyun			resets = <&creg_rst 5>;
86*4882a593Smuzhiyun			reset-names = "stmmaceth";
87*4882a593Smuzhiyun			mac-address = [00 00 00 00 00 00]; /* Filled in by U-Boot */
88*4882a593Smuzhiyun		};
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun		ehci@40000 {
91*4882a593Smuzhiyun			compatible = "generic-ehci";
92*4882a593Smuzhiyun			reg = < 0x40000 0x100 >;
93*4882a593Smuzhiyun			interrupts = < 8 >;
94*4882a593Smuzhiyun		};
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun		ohci@60000 {
97*4882a593Smuzhiyun			compatible = "generic-ohci";
98*4882a593Smuzhiyun			reg = < 0x60000 0x100 >;
99*4882a593Smuzhiyun			interrupts = < 8 >;
100*4882a593Smuzhiyun		};
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun		/*
103*4882a593Smuzhiyun		 * According to DW Mobile Storage databook it is required
104*4882a593Smuzhiyun		 * to use  "Hold Register" if card is enumerated in SDR12 or
105*4882a593Smuzhiyun		 * SDR25 modes.
106*4882a593Smuzhiyun		 *
107*4882a593Smuzhiyun		 * Utilization of "Hold Register" is already implemented via
108*4882a593Smuzhiyun		 * dw_mci_pltfm_prepare_command() which in its turn gets
109*4882a593Smuzhiyun		 * used through dw_mci_drv_data->prepare_command call-back.
110*4882a593Smuzhiyun		 * This call-back is used in Altera Socfpga platform and so
111*4882a593Smuzhiyun		 * we may reuse it saying that we're compatible with their
112*4882a593Smuzhiyun		 * "altr,socfpga-dw-mshc".
113*4882a593Smuzhiyun		 *
114*4882a593Smuzhiyun		 * Most probably "Hold Register" utilization is platform-
115*4882a593Smuzhiyun		 * independent requirement which means that single unified
116*4882a593Smuzhiyun		 * "snps,dw-mshc" should be enough for all users of DW MMC once
117*4882a593Smuzhiyun		 * dw_mci_pltfm_prepare_command() is used in generic platform
118*4882a593Smuzhiyun		 * code.
119*4882a593Smuzhiyun		 */
120*4882a593Smuzhiyun		mmc@15000 {
121*4882a593Smuzhiyun			compatible = "altr,socfpga-dw-mshc";
122*4882a593Smuzhiyun			reg = < 0x15000 0x400 >;
123*4882a593Smuzhiyun			fifo-depth = < 16 >;
124*4882a593Smuzhiyun			card-detect-delay = < 200 >;
125*4882a593Smuzhiyun			clocks = <&apbclk>, <&mmcclk>;
126*4882a593Smuzhiyun			clock-names = "biu", "ciu";
127*4882a593Smuzhiyun			interrupts = < 7 >;
128*4882a593Smuzhiyun			bus-width = < 4 >;
129*4882a593Smuzhiyun		};
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun		uart@20000 {
132*4882a593Smuzhiyun			compatible = "snps,dw-apb-uart";
133*4882a593Smuzhiyun			reg = <0x20000 0x100>;
134*4882a593Smuzhiyun			clock-frequency = <33333333>;
135*4882a593Smuzhiyun			interrupts = <17>;
136*4882a593Smuzhiyun			baud = <115200>;
137*4882a593Smuzhiyun			reg-shift = <2>;
138*4882a593Smuzhiyun			reg-io-width = <4>;
139*4882a593Smuzhiyun		};
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun		uart@21000 {
142*4882a593Smuzhiyun			compatible = "snps,dw-apb-uart";
143*4882a593Smuzhiyun			reg = <0x21000 0x100>;
144*4882a593Smuzhiyun			clock-frequency = <33333333>;
145*4882a593Smuzhiyun			interrupts = <18>;
146*4882a593Smuzhiyun			baud = <115200>;
147*4882a593Smuzhiyun			reg-shift = <2>;
148*4882a593Smuzhiyun			reg-io-width = <4>;
149*4882a593Smuzhiyun		};
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun		/* UART muxed with USB data port (ttyS3) */
152*4882a593Smuzhiyun		uart@22000 {
153*4882a593Smuzhiyun			compatible = "snps,dw-apb-uart";
154*4882a593Smuzhiyun			reg = <0x22000 0x100>;
155*4882a593Smuzhiyun			clock-frequency = <33333333>;
156*4882a593Smuzhiyun			interrupts = <19>;
157*4882a593Smuzhiyun			baud = <115200>;
158*4882a593Smuzhiyun			reg-shift = <2>;
159*4882a593Smuzhiyun			reg-io-width = <4>;
160*4882a593Smuzhiyun		};
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun		i2c@1d000 {
163*4882a593Smuzhiyun			compatible = "snps,designware-i2c";
164*4882a593Smuzhiyun			reg = <0x1d000 0x100>;
165*4882a593Smuzhiyun			clock-frequency = <400000>;
166*4882a593Smuzhiyun			clocks = <&i2cclk>;
167*4882a593Smuzhiyun			interrupts = <14>;
168*4882a593Smuzhiyun		};
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun		i2s: i2s@1e000 {
171*4882a593Smuzhiyun			compatible = "snps,designware-i2s";
172*4882a593Smuzhiyun			reg = <0x1e000 0x100>;
173*4882a593Smuzhiyun			clocks = <&i2sclk 0>;
174*4882a593Smuzhiyun			clock-names = "i2sclk";
175*4882a593Smuzhiyun			interrupts = <15>;
176*4882a593Smuzhiyun			#sound-dai-cells = <0>;
177*4882a593Smuzhiyun		};
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun		i2c@1f000 {
180*4882a593Smuzhiyun			compatible = "snps,designware-i2c";
181*4882a593Smuzhiyun			#address-cells = <1>;
182*4882a593Smuzhiyun			#size-cells = <0>;
183*4882a593Smuzhiyun			reg = <0x1f000 0x100>;
184*4882a593Smuzhiyun			clock-frequency = <400000>;
185*4882a593Smuzhiyun			clocks = <&i2cclk>;
186*4882a593Smuzhiyun			interrupts = <16>;
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun			adv7511:adv7511@39{
189*4882a593Smuzhiyun				compatible="adi,adv7511";
190*4882a593Smuzhiyun				reg = <0x39>;
191*4882a593Smuzhiyun				interrupts = <23>;
192*4882a593Smuzhiyun				adi,input-depth = <8>;
193*4882a593Smuzhiyun				adi,input-colorspace = "rgb";
194*4882a593Smuzhiyun				adi,input-clock = "1x";
195*4882a593Smuzhiyun				adi,clock-delay = <0x03>;
196*4882a593Smuzhiyun				#sound-dai-cells = <0>;
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun				ports {
199*4882a593Smuzhiyun					#address-cells = <1>;
200*4882a593Smuzhiyun					#size-cells = <0>;
201*4882a593Smuzhiyun
202*4882a593Smuzhiyun					/* RGB/YUV input */
203*4882a593Smuzhiyun					port@0 {
204*4882a593Smuzhiyun						reg = <0>;
205*4882a593Smuzhiyun						adv7511_input:endpoint {
206*4882a593Smuzhiyun						remote-endpoint = <&pgu_output>;
207*4882a593Smuzhiyun						};
208*4882a593Smuzhiyun					};
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun					/* HDMI output */
211*4882a593Smuzhiyun					port@1 {
212*4882a593Smuzhiyun						reg = <1>;
213*4882a593Smuzhiyun						adv7511_output: endpoint {
214*4882a593Smuzhiyun							remote-endpoint = <&hdmi_connector_in>;
215*4882a593Smuzhiyun						};
216*4882a593Smuzhiyun					};
217*4882a593Smuzhiyun				};
218*4882a593Smuzhiyun			};
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun			eeprom@54{
221*4882a593Smuzhiyun				compatible = "atmel,24c01";
222*4882a593Smuzhiyun				reg = <0x54>;
223*4882a593Smuzhiyun				pagesize = <0x8>;
224*4882a593Smuzhiyun			};
225*4882a593Smuzhiyun
226*4882a593Smuzhiyun			eeprom@57{
227*4882a593Smuzhiyun				compatible = "atmel,24c04";
228*4882a593Smuzhiyun				reg = <0x57>;
229*4882a593Smuzhiyun				pagesize = <0x8>;
230*4882a593Smuzhiyun			};
231*4882a593Smuzhiyun		};
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun		hdmi0: connector {
234*4882a593Smuzhiyun			compatible = "hdmi-connector";
235*4882a593Smuzhiyun			type = "a";
236*4882a593Smuzhiyun			port {
237*4882a593Smuzhiyun				hdmi_connector_in: endpoint {
238*4882a593Smuzhiyun					remote-endpoint = <&adv7511_output>;
239*4882a593Smuzhiyun				};
240*4882a593Smuzhiyun			};
241*4882a593Smuzhiyun		};
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun		gpio0:gpio@13000 {
244*4882a593Smuzhiyun			compatible = "snps,dw-apb-gpio";
245*4882a593Smuzhiyun			reg = <0x13000 0x1000>;
246*4882a593Smuzhiyun			#address-cells = <1>;
247*4882a593Smuzhiyun			#size-cells = <0>;
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun			gpio0_banka: gpio-controller@0 {
250*4882a593Smuzhiyun				compatible = "snps,dw-apb-gpio-port";
251*4882a593Smuzhiyun				gpio-controller;
252*4882a593Smuzhiyun				#gpio-cells = <2>;
253*4882a593Smuzhiyun				snps,nr-gpios = <32>;
254*4882a593Smuzhiyun				reg = <0>;
255*4882a593Smuzhiyun			};
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun			gpio0_bankb: gpio-controller@1 {
258*4882a593Smuzhiyun				compatible = "snps,dw-apb-gpio-port";
259*4882a593Smuzhiyun				gpio-controller;
260*4882a593Smuzhiyun				#gpio-cells = <2>;
261*4882a593Smuzhiyun				snps,nr-gpios = <8>;
262*4882a593Smuzhiyun				reg = <1>;
263*4882a593Smuzhiyun			};
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun			gpio0_bankc: gpio-controller@2 {
266*4882a593Smuzhiyun				compatible = "snps,dw-apb-gpio-port";
267*4882a593Smuzhiyun				gpio-controller;
268*4882a593Smuzhiyun				#gpio-cells = <2>;
269*4882a593Smuzhiyun				snps,nr-gpios = <8>;
270*4882a593Smuzhiyun				reg = <2>;
271*4882a593Smuzhiyun			};
272*4882a593Smuzhiyun		};
273*4882a593Smuzhiyun
274*4882a593Smuzhiyun		gpio1:gpio@14000 {
275*4882a593Smuzhiyun			compatible = "snps,dw-apb-gpio";
276*4882a593Smuzhiyun			reg = <0x14000 0x1000>;
277*4882a593Smuzhiyun			#address-cells = <1>;
278*4882a593Smuzhiyun			#size-cells = <0>;
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun			gpio1_banka: gpio-controller@0 {
281*4882a593Smuzhiyun				compatible = "snps,dw-apb-gpio-port";
282*4882a593Smuzhiyun				gpio-controller;
283*4882a593Smuzhiyun				#gpio-cells = <2>;
284*4882a593Smuzhiyun				snps,nr-gpios = <30>;
285*4882a593Smuzhiyun				reg = <0>;
286*4882a593Smuzhiyun			};
287*4882a593Smuzhiyun
288*4882a593Smuzhiyun			gpio1_bankb: gpio-controller@1 {
289*4882a593Smuzhiyun				compatible = "snps,dw-apb-gpio-port";
290*4882a593Smuzhiyun				gpio-controller;
291*4882a593Smuzhiyun				#gpio-cells = <2>;
292*4882a593Smuzhiyun				snps,nr-gpios = <10>;
293*4882a593Smuzhiyun				reg = <1>;
294*4882a593Smuzhiyun			};
295*4882a593Smuzhiyun
296*4882a593Smuzhiyun			gpio1_bankc: gpio-controller@2 {
297*4882a593Smuzhiyun				compatible = "snps,dw-apb-gpio-port";
298*4882a593Smuzhiyun				gpio-controller;
299*4882a593Smuzhiyun				#gpio-cells = <2>;
300*4882a593Smuzhiyun				snps,nr-gpios = <8>;
301*4882a593Smuzhiyun				reg = <2>;
302*4882a593Smuzhiyun			};
303*4882a593Smuzhiyun		};
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun		pgu@17000 {
306*4882a593Smuzhiyun			compatible = "snps,arcpgu";
307*4882a593Smuzhiyun			reg = <0x17000 0x400>;
308*4882a593Smuzhiyun			clocks = <&pguclk>;
309*4882a593Smuzhiyun			clock-names = "pxlclk";
310*4882a593Smuzhiyun			memory-region = <&frame_buffer>;
311*4882a593Smuzhiyun			port {
312*4882a593Smuzhiyun				pgu_output: endpoint {
313*4882a593Smuzhiyun					remote-endpoint = <&adv7511_input>;
314*4882a593Smuzhiyun				};
315*4882a593Smuzhiyun			};
316*4882a593Smuzhiyun		};
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun		sound_playback {
319*4882a593Smuzhiyun			compatible = "simple-audio-card";
320*4882a593Smuzhiyun			simple-audio-card,name = "AXS10x HDMI Audio";
321*4882a593Smuzhiyun			simple-audio-card,format = "i2s";
322*4882a593Smuzhiyun			simple-audio-card,cpu {
323*4882a593Smuzhiyun				sound-dai = <&i2s>;
324*4882a593Smuzhiyun			};
325*4882a593Smuzhiyun			simple-audio-card,codec {
326*4882a593Smuzhiyun				sound-dai = <&adv7511>;
327*4882a593Smuzhiyun			};
328*4882a593Smuzhiyun		};
329*4882a593Smuzhiyun	};
330*4882a593Smuzhiyun};
331