1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/soc/mobileye/mobileye,eyeq5-olb.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Mobileye EyeQ SoC system controller
8
9maintainers:
10  - Grégory Clement <gregory.clement@bootlin.com>
11  - Théo Lebrun <theo.lebrun@bootlin.com>
12  - Vladimir Kondratiev <vladimir.kondratiev@mobileye.com>
13
14description:
15  OLB ("Other Logic Block") is a hardware block grouping smaller blocks. Clocks,
16  resets, pinctrl are being handled from here. EyeQ5 and EyeQ6L host a single
17  instance. EyeQ6H hosts seven instances.
18
19properties:
20  compatible:
21    items:
22      - enum:
23          - mobileye,eyeq5-olb
24          - mobileye,eyeq6l-olb
25          - mobileye,eyeq6h-acc-olb
26          - mobileye,eyeq6h-central-olb
27          - mobileye,eyeq6h-east-olb
28          - mobileye,eyeq6h-west-olb
29          - mobileye,eyeq6h-south-olb
30          - mobileye,eyeq6h-ddr0-olb
31          - mobileye,eyeq6h-ddr1-olb
32      - const: syscon
33
34  reg:
35    maxItems: 1
36
37  '#reset-cells':
38    description:
39      First cell is domain and optional if compatible has a single reset domain.
40      Second cell is reset index inside that domain.
41    enum: [ 1, 2 ]
42
43  '#clock-cells':
44    description:
45      Cell is clock index. Optional if compatible has a single clock.
46    enum: [ 0, 1 ]
47
48  clocks:
49    maxItems: 1
50    description:
51      Input parent clock to all PLLs. Expected to be the main crystal.
52
53  clock-names:
54    const: ref
55
56patternProperties:
57  '-pins?$':
58    type: object
59    description: Pin muxing configuration.
60    $ref: /schemas/pinctrl/pinmux-node.yaml#
61    additionalProperties: false
62    properties:
63      pins: true
64      function:
65        enum: [gpio,
66               # Bank A
67               timer0, timer1, timer2, timer5, uart0, uart1, can0, can1, spi0,
68               spi1, refclk0,
69               # Bank B
70               timer3, timer4, timer6, uart2, can2, spi2, spi3, mclk0]
71      bias-disable: true
72      bias-pull-down: true
73      bias-pull-up: true
74      drive-strength: true
75    required:
76      - pins
77      - function
78    allOf:
79      - if:
80          properties:
81            function:
82              const: gpio
83        then:
84          properties:
85            pins:
86              items: # PA0 - PA28, PB0 - PB22
87                pattern: '^(P(A|B)1?[0-9]|PA2[0-8]|PB2[0-2])$'
88      - if:
89          properties:
90            function:
91              const: timer0
92        then:
93          properties:
94            pins:
95              items:
96                enum: [PA0, PA1]
97      - if:
98          properties:
99            function:
100              const: timer1
101        then:
102          properties:
103            pins:
104              items:
105                enum: [PA2, PA3]
106      - if:
107          properties:
108            function:
109              const: timer2
110        then:
111          properties:
112            pins:
113              items:
114                enum: [PA4, PA5]
115      - if:
116          properties:
117            function:
118              const: timer5
119        then:
120          properties:
121            pins:
122              items:
123                enum: [PA6, PA7, PA8, PA9]
124      - if:
125          properties:
126            function:
127              const: uart0
128        then:
129          properties:
130            pins:
131              items:
132                enum: [PA10, PA11]
133      - if:
134          properties:
135            function:
136              const: uart1
137        then:
138          properties:
139            pins:
140              items:
141                enum: [PA12, PA13]
142      - if:
143          properties:
144            function:
145              const: can0
146        then:
147          properties:
148            pins:
149              items:
150                enum: [PA14, PA15]
151      - if:
152          properties:
153            function:
154              const: can1
155        then:
156          properties:
157            pins:
158              items:
159                enum: [PA16, PA17]
160      - if:
161          properties:
162            function:
163              const: spi0
164        then:
165          properties:
166            pins:
167              items:
168                enum: [PA18, PA19, PA20, PA21, PA22]
169      - if:
170          properties:
171            function:
172              const: spi1
173        then:
174          properties:
175            pins:
176              items:
177                enum: [PA23, PA24, PA25, PA26, PA27]
178      - if:
179          properties:
180            function:
181              const: refclk0
182        then:
183          properties:
184            pins:
185              items:
186                enum: [PA28]
187      - if:
188          properties:
189            function:
190              const: timer3
191        then:
192          properties:
193            pins:
194              items:
195                enum: [PB0, PB1]
196      - if:
197          properties:
198            function:
199              const: timer4
200        then:
201          properties:
202            pins:
203              items:
204                enum: [PB2, PB3]
205      - if:
206          properties:
207            function:
208              const: timer6
209        then:
210          properties:
211            pins:
212              items:
213                enum: [PB4, PB5, PB6, PB7]
214      - if:
215          properties:
216            function:
217              const: uart2
218        then:
219          properties:
220            pins:
221              items:
222                enum: [PB8, PB9]
223      - if:
224          properties:
225            function:
226              const: can2
227        then:
228          properties:
229            pins:
230              items:
231                enum: [PB10, PB11]
232      - if:
233          properties:
234            function:
235              const: spi2
236        then:
237          properties:
238            pins:
239              items:
240                enum: [PB12, PB13, PB14, PB15, PB16]
241      - if:
242          properties:
243            function:
244              const: spi3
245        then:
246          properties:
247            pins:
248              items:
249                enum: [PB17, PB18, PB19, PB20, PB21]
250      - if:
251          properties:
252            function:
253              const: mclk0
254        then:
255          properties:
256            pins:
257              items:
258                enum: [PB22]
259
260required:
261  - compatible
262  - reg
263  - '#clock-cells'
264  - clocks
265  - clock-names
266
267additionalProperties: false
268
269allOf:
270    # Compatibles exposing a single reset domain.
271  - if:
272      properties:
273        compatible:
274          contains:
275            enum:
276              - mobileye,eyeq6h-acc-olb
277              - mobileye,eyeq6h-east-olb
278              - mobileye,eyeq6h-west-olb
279    then:
280      properties:
281        '#reset-cells':
282          const: 1
283      required:
284        - '#reset-cells'
285
286    # Compatibles exposing two reset domains.
287  - if:
288      properties:
289        compatible:
290          contains:
291            enum:
292              - mobileye,eyeq5-olb
293              - mobileye,eyeq6l-olb
294    then:
295      properties:
296        '#reset-cells':
297          const: 2
298      required:
299        - '#reset-cells'
300
301    # Compatibles not exposing resets.
302  - if:
303      properties:
304        compatible:
305          contains:
306            enum:
307              - mobileye,eyeq6h-central-olb
308              - mobileye,eyeq6h-south-olb
309              - mobileye,eyeq6h-ddr0-olb
310              - mobileye,eyeq6h-ddr1-olb
311    then:
312      properties:
313        '#reset-cells': false
314
315    # Compatibles exposing a single clock.
316  - if:
317      properties:
318        compatible:
319          contains:
320            enum:
321              - mobileye,eyeq6h-central-olb
322              - mobileye,eyeq6h-east-olb
323              - mobileye,eyeq6h-west-olb
324              - mobileye,eyeq6h-ddr0-olb
325              - mobileye,eyeq6h-ddr1-olb
326    then:
327      properties:
328        '#clock-cells':
329          const: 0
330    else:
331      properties:
332        '#clock-cells':
333          const: 1
334
335    # Only EyeQ5 has pinctrl in OLB.
336  - if:
337      not:
338        properties:
339          compatible:
340            contains:
341              const: mobileye,eyeq5-olb
342    then:
343      patternProperties:
344        '-pins?$': false
345
346examples:
347  - |
348    soc {
349      #address-cells = <2>;
350      #size-cells = <2>;
351
352      system-controller@e00000 {
353        compatible = "mobileye,eyeq5-olb", "syscon";
354        reg = <0 0xe00000 0x0 0x400>;
355        #reset-cells = <2>;
356        #clock-cells = <1>;
357        clocks = <&xtal>;
358        clock-names = "ref";
359      };
360    };
361  - |
362    soc {
363      #address-cells = <2>;
364      #size-cells = <2>;
365
366      system-controller@d2003000 {
367        compatible = "mobileye,eyeq6h-acc-olb", "syscon";
368        reg = <0x0 0xd2003000 0x0 0x1000>;
369        #reset-cells = <1>;
370        #clock-cells = <1>;
371        clocks = <&xtal>;
372        clock-names = "ref";
373      };
374    };
375