xref: /linux/Documentation/netlink/specs/dpll.yaml (revision 4b132aacb0768ac1e652cf517097ea6f237214b9)
1# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
2
3name: dpll
4
5doc: DPLL subsystem.
6
7definitions:
8  -
9    type: enum
10    name: mode
11    doc: |
12      working modes a dpll can support, differentiates if and how dpll selects
13      one of its inputs to syntonize with it, valid values for DPLL_A_MODE
14      attribute
15    entries:
16      -
17        name: manual
18        doc: input can be only selected by sending a request to dpll
19        value: 1
20      -
21        name: automatic
22        doc: highest prio input pin auto selected by dpll
23    render-max: true
24  -
25    type: enum
26    name: lock-status
27    doc: |
28      provides information of dpll device lock status, valid values for
29      DPLL_A_LOCK_STATUS attribute
30    entries:
31      -
32        name: unlocked
33        doc: |
34          dpll was not yet locked to any valid input (or forced by setting
35          DPLL_A_MODE to DPLL_MODE_DETACHED)
36        value: 1
37      -
38        name: locked
39        doc: |
40          dpll is locked to a valid signal, but no holdover available
41      -
42        name: locked-ho-acq
43        doc: |
44          dpll is locked and holdover acquired
45      -
46        name: holdover
47        doc: |
48          dpll is in holdover state - lost a valid lock or was forced
49          by disconnecting all the pins (latter possible only
50          when dpll lock-state was already DPLL_LOCK_STATUS_LOCKED_HO_ACQ,
51          if dpll lock-state was not DPLL_LOCK_STATUS_LOCKED_HO_ACQ, the
52          dpll's lock-state shall remain DPLL_LOCK_STATUS_UNLOCKED)
53    render-max: true
54  -
55    type: enum
56    name: lock-status-error
57    doc: |
58      if previous status change was done due to a failure, this provides
59      information of dpll device lock status error.
60      Valid values for DPLL_A_LOCK_STATUS_ERROR attribute
61    entries:
62      -
63        name: none
64        doc: |
65          dpll device lock status was changed without any error
66        value: 1
67      -
68        name: undefined
69        doc: |
70          dpll device lock status was changed due to undefined error.
71          Driver fills this value up in case it is not able
72          to obtain suitable exact error type.
73      -
74        name: media-down
75        doc: |
76          dpll device lock status was changed because of associated
77          media got down.
78          This may happen for example if dpll device was previously
79          locked on an input pin of type PIN_TYPE_SYNCE_ETH_PORT.
80      -
81        name: fractional-frequency-offset-too-high
82        doc: |
83          the FFO (Fractional Frequency Offset) between the RX and TX
84          symbol rate on the media got too high.
85          This may happen for example if dpll device was previously
86          locked on an input pin of type PIN_TYPE_SYNCE_ETH_PORT.
87    render-max: true
88  -
89    type: const
90    name: temp-divider
91    value: 1000
92    doc: |
93      temperature divider allowing userspace to calculate the
94      temperature as float with three digit decimal precision.
95      Value of (DPLL_A_TEMP / DPLL_TEMP_DIVIDER) is integer part of
96      temperature value.
97      Value of (DPLL_A_TEMP % DPLL_TEMP_DIVIDER) is fractional part of
98      temperature value.
99  -
100    type: enum
101    name: type
102    doc: type of dpll, valid values for DPLL_A_TYPE attribute
103    entries:
104      -
105        name: pps
106        doc: dpll produces Pulse-Per-Second signal
107        value: 1
108      -
109        name: eec
110        doc: dpll drives the Ethernet Equipment Clock
111    render-max: true
112  -
113    type: enum
114    name: pin-type
115    doc: |
116      defines possible types of a pin, valid values for DPLL_A_PIN_TYPE
117      attribute
118    entries:
119      -
120        name: mux
121        doc: aggregates another layer of selectable pins
122        value: 1
123      -
124        name: ext
125        doc: external input
126      -
127        name: synce-eth-port
128        doc: ethernet port PHY's recovered clock
129      -
130        name: int-oscillator
131        doc: device internal oscillator
132      -
133        name: gnss
134        doc: GNSS recovered clock
135    render-max: true
136  -
137    type: enum
138    name: pin-direction
139    doc: |
140      defines possible direction of a pin, valid values for
141      DPLL_A_PIN_DIRECTION attribute
142    entries:
143      -
144        name: input
145        doc: pin used as a input of a signal
146        value: 1
147      -
148        name: output
149        doc: pin used to output the signal
150    render-max: true
151  -
152    type: const
153    name: pin-frequency-1-hz
154    value: 1
155  -
156    type: const
157    name: pin-frequency-10-khz
158    value: 10000
159  -
160    type: const
161    name: pin-frequency-77_5-khz
162    value: 77500
163  -
164    type: const
165    name: pin-frequency-10-mhz
166    value: 10000000
167  -
168    type: enum
169    name: pin-state
170    doc: |
171      defines possible states of a pin, valid values for
172      DPLL_A_PIN_STATE attribute
173    entries:
174      -
175        name: connected
176        doc: pin connected, active input of phase locked loop
177        value: 1
178      -
179        name: disconnected
180        doc: pin disconnected, not considered as a valid input
181      -
182        name: selectable
183        doc: pin enabled for automatic input selection
184    render-max: true
185  -
186    type: flags
187    name: pin-capabilities
188    doc: |
189      defines possible capabilities of a pin, valid flags on
190      DPLL_A_PIN_CAPABILITIES attribute
191    entries:
192      -
193        name: direction-can-change
194        doc: pin direction can be changed
195      -
196        name: priority-can-change
197        doc: pin priority can be changed
198      -
199        name: state-can-change
200        doc: pin state can be changed
201  -
202    type: const
203    name: phase-offset-divider
204    value: 1000
205    doc: |
206      phase offset divider allows userspace to calculate a value of
207      measured signal phase difference between a pin and dpll device
208      as a fractional value with three digit decimal precision.
209      Value of (DPLL_A_PHASE_OFFSET / DPLL_PHASE_OFFSET_DIVIDER) is an
210      integer part of a measured phase offset value.
211      Value of (DPLL_A_PHASE_OFFSET % DPLL_PHASE_OFFSET_DIVIDER) is a
212      fractional part of a measured phase offset value.
213
214attribute-sets:
215  -
216    name: dpll
217    enum-name: dpll_a
218    attributes:
219      -
220        name: id
221        type: u32
222      -
223        name: module-name
224        type: string
225      -
226        name: pad
227        type: pad
228      -
229        name: clock-id
230        type: u64
231      -
232        name: mode
233        type: u32
234        enum: mode
235      -
236        name: mode-supported
237        type: u32
238        enum: mode
239        multi-attr: true
240      -
241        name: lock-status
242        type: u32
243        enum: lock-status
244      -
245        name: temp
246        type: s32
247      -
248        name: type
249        type: u32
250        enum: type
251      -
252        name: lock-status-error
253        type: u32
254        enum: lock-status-error
255  -
256    name: pin
257    enum-name: dpll_a_pin
258    attributes:
259      -
260        name: id
261        type: u32
262      -
263        name: parent-id
264        type: u32
265      -
266        name: module-name
267        type: string
268      -
269        name: pad
270        type: pad
271      -
272        name: clock-id
273        type: u64
274      -
275        name: board-label
276        type: string
277      -
278        name: panel-label
279        type: string
280      -
281        name: package-label
282        type: string
283      -
284        name: type
285        type: u32
286        enum: pin-type
287      -
288        name: direction
289        type: u32
290        enum: pin-direction
291      -
292        name: frequency
293        type: u64
294      -
295        name: frequency-supported
296        type: nest
297        multi-attr: true
298        nested-attributes: frequency-range
299      -
300        name: frequency-min
301        type: u64
302      -
303        name: frequency-max
304        type: u64
305      -
306        name: prio
307        type: u32
308      -
309        name: state
310        type: u32
311        enum: pin-state
312      -
313        name: capabilities
314        type: u32
315        enum: pin-capabilities
316      -
317        name: parent-device
318        type: nest
319        multi-attr: true
320        nested-attributes: pin-parent-device
321      -
322        name: parent-pin
323        type: nest
324        multi-attr: true
325        nested-attributes: pin-parent-pin
326      -
327        name: phase-adjust-min
328        type: s32
329      -
330        name: phase-adjust-max
331        type: s32
332      -
333        name: phase-adjust
334        type: s32
335      -
336        name: phase-offset
337        type: s64
338      -
339        name: fractional-frequency-offset
340        type: sint
341        doc: |
342          The FFO (Fractional Frequency Offset) between the RX and TX
343          symbol rate on the media associated with the pin:
344          (rx_frequency-tx_frequency)/rx_frequency
345          Value is in PPM (parts per million).
346          This may be implemented for example for pin of type
347          PIN_TYPE_SYNCE_ETH_PORT.
348  -
349    name: pin-parent-device
350    subset-of: pin
351    attributes:
352      -
353        name: parent-id
354      -
355        name: direction
356      -
357        name: prio
358      -
359        name: state
360      -
361        name: phase-offset
362  -
363    name: pin-parent-pin
364    subset-of: pin
365    attributes:
366      -
367        name: parent-id
368      -
369        name: state
370  -
371    name: frequency-range
372    subset-of: pin
373    attributes:
374      -
375        name: frequency-min
376      -
377        name: frequency-max
378
379operations:
380  enum-name: dpll_cmd
381  list:
382    -
383      name: device-id-get
384      doc: |
385        Get id of dpll device that matches given attributes
386      attribute-set: dpll
387      flags: [ admin-perm ]
388
389      do:
390        pre: dpll-lock-doit
391        post: dpll-unlock-doit
392        request:
393          attributes:
394            - module-name
395            - clock-id
396            - type
397        reply:
398          attributes:
399            - id
400
401    -
402      name: device-get
403      doc: |
404        Get list of DPLL devices (dump) or attributes of a single dpll device
405      attribute-set: dpll
406      flags: [ admin-perm ]
407
408      do:
409        pre: dpll-pre-doit
410        post: dpll-post-doit
411        request:
412          attributes:
413            - id
414        reply: &dev-attrs
415          attributes:
416            - id
417            - module-name
418            - mode
419            - mode-supported
420            - lock-status
421            - lock-status-error
422            - temp
423            - clock-id
424            - type
425
426      dump:
427        reply: *dev-attrs
428
429    -
430      name: device-set
431      doc: Set attributes for a DPLL device
432      attribute-set: dpll
433      flags: [ admin-perm ]
434
435      do:
436        pre: dpll-pre-doit
437        post: dpll-post-doit
438        request:
439          attributes:
440            - id
441    -
442      name: device-create-ntf
443      doc: Notification about device appearing
444      notify: device-get
445      mcgrp: monitor
446    -
447      name: device-delete-ntf
448      doc: Notification about device disappearing
449      notify: device-get
450      mcgrp: monitor
451    -
452      name: device-change-ntf
453      doc: Notification about device configuration being changed
454      notify: device-get
455      mcgrp: monitor
456    -
457      name: pin-id-get
458      doc: |
459        Get id of a pin that matches given attributes
460      attribute-set: pin
461      flags: [ admin-perm ]
462
463      do:
464        pre: dpll-lock-doit
465        post: dpll-unlock-doit
466        request:
467          attributes:
468            - module-name
469            - clock-id
470            - board-label
471            - panel-label
472            - package-label
473            - type
474        reply:
475          attributes:
476            - id
477
478    -
479      name: pin-get
480      doc: |
481        Get list of pins and its attributes.
482
483        - dump request without any attributes given - list all the pins in the
484          system
485        - dump request with target dpll - list all the pins registered with
486          a given dpll device
487        - do request with target dpll and target pin - single pin attributes
488      attribute-set: pin
489      flags: [ admin-perm ]
490
491      do:
492        pre: dpll-pin-pre-doit
493        post: dpll-pin-post-doit
494        request:
495          attributes:
496            - id
497        reply: &pin-attrs
498          attributes:
499            - id
500            - board-label
501            - panel-label
502            - package-label
503            - type
504            - frequency
505            - frequency-supported
506            - capabilities
507            - parent-device
508            - parent-pin
509            - phase-adjust-min
510            - phase-adjust-max
511            - phase-adjust
512            - fractional-frequency-offset
513
514      dump:
515        request:
516          attributes:
517            - id
518        reply: *pin-attrs
519
520    -
521      name: pin-set
522      doc: Set attributes of a target pin
523      attribute-set: pin
524      flags: [ admin-perm ]
525
526      do:
527        pre: dpll-pin-pre-doit
528        post: dpll-pin-post-doit
529        request:
530          attributes:
531            - id
532            - frequency
533            - direction
534            - prio
535            - state
536            - parent-device
537            - parent-pin
538            - phase-adjust
539    -
540      name: pin-create-ntf
541      doc: Notification about pin appearing
542      notify: pin-get
543      mcgrp: monitor
544    -
545      name: pin-delete-ntf
546      doc: Notification about pin disappearing
547      notify: pin-get
548      mcgrp: monitor
549    -
550      name: pin-change-ntf
551      doc: Notification about pin configuration being changed
552      notify: pin-get
553      mcgrp: monitor
554
555mcast-groups:
556  list:
557    -
558      name: monitor
559