Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/timer/samsung,exynos4210-mct.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Samsung Exynos SoC Multi Core Timer (MCT)
8
9maintainers:
10 - Krzysztof Kozlowski <krzk@kernel.org>
11
12description: |+
13 The Samsung's Multi Core Timer (MCT) module includes two main blocks, the
14 global timer and CPU local timers. The global timer is a 64-bit free running
15 up-counter and can generate 4 interrupts when the counter reaches one of the
16 four preset counter values. The CPU local timers are 32-bit free running
17 down-counters and generate an interrupt when the counter expires. There is
18 one CPU local timer instantiated in MCT for every CPU in the system.
19
20properties:
21 compatible:
22 oneOf:
23 - enum:
24 - samsung,exynos4210-mct
25 - samsung,exynos4412-mct
26 - items:
27 - enum:
28 - axis,artpec8-mct
29 - google,gs101-mct
30 - samsung,exynos2200-mct-peris
31 - samsung,exynos3250-mct
32 - samsung,exynos5250-mct
33 - samsung,exynos5260-mct
34 - samsung,exynos5420-mct
35 - samsung,exynos5433-mct
36 - samsung,exynos850-mct
37 - samsung,exynos8895-mct
38 - samsung,exynos990-mct
39 - tesla,fsd-mct
40 - const: samsung,exynos4210-mct
41
42 clocks:
43 maxItems: 2
44
45 clock-names:
46 items:
47 - const: fin_pll
48 - const: mct
49
50 reg:
51 maxItems: 1
52
53 samsung,frc-shared:
54 type: boolean
55 description: |
56 Indicates that the hardware requires that this processor share the
57 free-running counter with a different (main) processor.
58
59 samsung,local-timers:
60 $ref: /schemas/types.yaml#/definitions/uint32-array
61 minItems: 1
62 maxItems: 16
63 description: |
64 List of indices of local timers usable from this processor.
65
66 interrupts:
67 description: |
68 Interrupts should be put in specific order. This is, the local timer
69 interrupts should be specified after the four global timer interrupts
70 have been specified:
71 0: Global Timer Interrupt 0
72 1: Global Timer Interrupt 1
73 2: Global Timer Interrupt 2
74 3: Global Timer Interrupt 3
75 4: Local Timer Interrupt 0
76 5: Local Timer Interrupt 1
77 6: ..
78 7: ..
79 i: Local Timer Interrupt n
80 For MCT block that uses a per-processor interrupt for local timers, such
81 as ones compatible with "samsung,exynos4412-mct", only one local timer
82 interrupt might be specified, meaning that all local timers use the same
83 per processor interrupt.
84 minItems: 5 # 4 Global + 1 local
85 maxItems: 20 # 4 Global + 16 local
86
87required:
88 - compatible
89 - clock-names
90 - clocks
91 - interrupts
92 - reg
93
94allOf:
95 - if:
96 not:
97 properties:
98 compatible:
99 contains:
100 enum:
101 - axis,artpec8-mct
102 then:
103 properties:
104 samsung,local-timers: false
105 samsung,frc-shared: false
106 - if:
107 properties:
108 compatible:
109 contains:
110 const: samsung,exynos3250-mct
111 then:
112 properties:
113 interrupts:
114 minItems: 8
115 maxItems: 8
116
117 - if:
118 properties:
119 compatible:
120 contains:
121 const: samsung,exynos5250-mct
122 then:
123 properties:
124 interrupts:
125 minItems: 6
126 maxItems: 6
127
128 - if:
129 properties:
130 compatible:
131 contains:
132 enum:
133 - axis,artpec8-mct
134 - google,gs101-mct
135 - samsung,exynos2200-mct-peris
136 - samsung,exynos5260-mct
137 - samsung,exynos5420-mct
138 - samsung,exynos5433-mct
139 - samsung,exynos850-mct
140 - samsung,exynos8895-mct
141 - samsung,exynos990-mct
142 then:
143 properties:
144 interrupts:
145 minItems: 12
146 maxItems: 12
147
148 - if:
149 properties:
150 compatible:
151 contains:
152 enum:
153 - tesla,fsd-mct
154 then:
155 properties:
156 interrupts:
157 minItems: 16
158 maxItems: 16
159
160additionalProperties: false
161
162examples:
163 - |
164 // In this example, the IP contains two local timers, using separate
165 // interrupts, so two local timer interrupts have been specified,
166 // in addition to four global timer interrupts.
167 #include <dt-bindings/clock/exynos4.h>
168 #include <dt-bindings/interrupt-controller/arm-gic.h>
169
170 timer@10050000 {
171 compatible = "samsung,exynos4210-mct";
172 reg = <0x10050000 0x800>;
173 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
174 clock-names = "fin_pll", "mct";
175
176 interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
177 <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
178 <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
179 <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
180 <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
181 <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
182 };
183
184 - |
185 // In this example, the timer interrupts are connected to two separate
186 // interrupt controllers. Hence, an interrupts-extended is needed.
187 #include <dt-bindings/clock/exynos4.h>
188 #include <dt-bindings/interrupt-controller/arm-gic.h>
189
190 timer@101c0000 {
191 compatible = "samsung,exynos4210-mct";
192 reg = <0x101C0000 0x800>;
193 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
194 clock-names = "fin_pll", "mct";
195
196 interrupts-extended = <&gic GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
197 <&gic GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
198 <&combiner 12 6>,
199 <&combiner 12 7>,
200 <&gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
201 <&gic GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
202 };
203
204 - |
205 // In this example, the IP contains four local timers, but using
206 // a per-processor interrupt to handle them. Only one first local
207 // interrupt is specified.
208 #include <dt-bindings/clock/exynos4.h>
209 #include <dt-bindings/interrupt-controller/arm-gic.h>
210
211 timer@10050000 {
212 compatible = "samsung,exynos4412-mct";
213 reg = <0x10050000 0x800>;
214 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
215 clock-names = "fin_pll", "mct";
216
217 interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
218 <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
219 <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
220 <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
221 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>;
222 };
223
224 - |
225 // In this example, the IP contains four local timers, but using
226 // a per-processor interrupt to handle them. All the local timer
227 // interrupts are specified.
228 #include <dt-bindings/clock/exynos4.h>
229 #include <dt-bindings/interrupt-controller/arm-gic.h>
230
231 timer@10050000 {
232 compatible = "samsung,exynos4412-mct";
233 reg = <0x10050000 0x800>;
234 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
235 clock-names = "fin_pll", "mct";
236
237 interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
238 <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
239 <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
240 <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
241 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
242 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
243 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
244 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>;
245 };