1/*
2 * Spreadtrum SC9836 SoC DTS file
3 *
4 * Copyright (C) 2014, Spreadtrum Communications Inc.
5 *
6 * This file is licensed under a dual GPLv2 or X11 license.
7 */
8
9#include "sharkl64.dtsi"
10#include <dt-bindings/interrupt-controller/arm-gic.h>
11
12/ {
13	compatible = "sprd,sc9836";
14
15	cpus {
16		#address-cells = <2>;
17		#size-cells = <0>;
18
19		cpu0: cpu@0 {
20			device_type = "cpu";
21			compatible = "arm,cortex-a53";
22			reg = <0x0 0x0>;
23			enable-method = "psci";
24		};
25
26		cpu1: cpu@1 {
27			device_type = "cpu";
28			compatible = "arm,cortex-a53";
29			reg = <0x0 0x1>;
30			enable-method = "psci";
31		};
32
33		cpu2: cpu@2 {
34			device_type = "cpu";
35			compatible = "arm,cortex-a53";
36			reg = <0x0 0x2>;
37			enable-method = "psci";
38		};
39
40		cpu3: cpu@3 {
41			device_type = "cpu";
42			compatible = "arm,cortex-a53";
43			reg = <0x0 0x3>;
44			enable-method = "psci";
45		};
46	};
47
48	etf@10003000 {
49		compatible = "arm,coresight-tmc", "arm,primecell";
50		reg = <0 0x10003000 0 0x1000>;
51		clocks = <&clk26mhz>;
52		clock-names = "apb_pclk";
53		in-ports {
54			port {
55				etf_in: endpoint {
56					remote-endpoint = <&funnel_out_port0>;
57				};
58			};
59		};
60	};
61
62	funnel@10001000 {
63		compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
64		reg = <0 0x10001000 0 0x1000>;
65		clocks = <&clk26mhz>;
66		clock-names = "apb_pclk";
67
68		out-ports {
69			port {
70				funnel_out_port0: endpoint {
71					remote-endpoint = <&etf_in>;
72				};
73			};
74		};
75
76		in-ports {
77			#address-cells = <1>;
78			#size-cells = <0>;
79
80			port@0 {
81				reg = <0>;
82				funnel_in_port0: endpoint {
83					remote-endpoint = <&etm0_out>;
84				};
85			};
86
87			port@1 {
88				reg = <1>;
89				funnel_in_port1: endpoint {
90					remote-endpoint = <&etm1_out>;
91				};
92			};
93
94			port@2 {
95				reg = <2>;
96				funnel_in_port2: endpoint {
97					remote-endpoint = <&etm2_out>;
98				};
99			};
100
101			port@3 {
102				reg = <3>;
103				funnel_in_port3: endpoint {
104					remote-endpoint = <&etm3_out>;
105				};
106			};
107
108			port@4 {
109				reg = <4>;
110				funnel_in_port4: endpoint {
111					remote-endpoint = <&stm_out>;
112				};
113			};
114			/* Other input ports aren't connected to anyone */
115		};
116	};
117
118	etm@10440000 {
119		compatible = "arm,coresight-etm4x", "arm,primecell";
120		reg = <0 0x10440000 0 0x1000>;
121
122		cpu = <&cpu0>;
123		clocks = <&clk26mhz>;
124		clock-names = "apb_pclk";
125		out-ports {
126			port {
127				etm0_out: endpoint {
128					remote-endpoint = <&funnel_in_port0>;
129				};
130			};
131		};
132	};
133
134	etm@10540000 {
135		compatible = "arm,coresight-etm4x", "arm,primecell";
136		reg = <0 0x10540000 0 0x1000>;
137
138		cpu = <&cpu1>;
139		clocks = <&clk26mhz>;
140		clock-names = "apb_pclk";
141		out-ports {
142			port {
143				etm1_out: endpoint {
144					remote-endpoint = <&funnel_in_port1>;
145				};
146			};
147		};
148	};
149
150	etm@10640000 {
151		compatible = "arm,coresight-etm4x", "arm,primecell";
152		reg = <0 0x10640000 0 0x1000>;
153
154		cpu = <&cpu2>;
155		clocks = <&clk26mhz>;
156		clock-names = "apb_pclk";
157		out-ports {
158			port {
159				etm2_out: endpoint {
160					remote-endpoint = <&funnel_in_port2>;
161				};
162			};
163		};
164	};
165
166	etm@10740000 {
167		compatible = "arm,coresight-etm4x", "arm,primecell";
168		reg = <0 0x10740000 0 0x1000>;
169
170		cpu = <&cpu3>;
171		clocks = <&clk26mhz>;
172		clock-names = "apb_pclk";
173		out-ports {
174			port {
175				etm3_out: endpoint {
176					remote-endpoint = <&funnel_in_port3>;
177				};
178			};
179		};
180	};
181
182	stm@10006000 {
183		compatible = "arm,coresight-stm", "arm,primecell";
184		reg = <0 0x10006000 0 0x1000>,
185		      <0 0x01000000 0 0x180000>;
186		reg-names = "stm-base", "stm-stimulus-base";
187		clocks = <&clk26mhz>;
188		clock-names = "apb_pclk";
189		out-ports {
190			port {
191				stm_out: endpoint {
192					remote-endpoint = <&funnel_in_port4>;
193				};
194			};
195		};
196	};
197
198	gic: interrupt-controller@12001000 {
199		compatible = "arm,gic-400";
200		reg = <0 0x12001000 0 0x1000>,
201		      <0 0x12002000 0 0x2000>,
202		      <0 0x12004000 0 0x2000>,
203		      <0 0x12006000 0 0x2000>;
204		#interrupt-cells = <3>;
205		interrupt-controller;
206		interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
207	};
208
209	psci {
210		compatible = "arm,psci";
211		method = "smc";
212		cpu_on = <0xc4000003>;
213		cpu_off = <0x84000002>;
214		cpu_suspend = <0xc4000001>;
215	};
216
217	timer {
218		compatible = "arm,armv8-timer";
219		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
220			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
221			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
222			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
223	};
224};
225