df83c320e61bebd0621840efa48c56cab02fdf8a
[platform/kernel/linux-starfive.git] / Documentation / devicetree / bindings / net / ti,k3-am654-cpts.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/net/ti,k3-am654-cpts.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: The TI AM654x/J721E Common Platform Time Sync (CPTS) module Device Tree Bindings
8
9 maintainers:
10   - Grygorii Strashko <grygorii.strashko@ti.com>
11   - Sekhar Nori <nsekhar@ti.com>
12
13 description: |+
14   The TI AM654x/J721E CPTS module is used to facilitate host control of time
15   sync operations.
16   Main features of CPTS module are
17   - selection of multiple external clock sources
18   - Software control of time sync events via interrupt or polling
19   - 64-bit timestamp mode in ns with PPM and nudge adjustment.
20   - hardware timestamp push inputs (HWx_TS_PUSH)
21   - timestamp counter compare output (TS_COMP)
22   - timestamp counter bit output (TS_SYNC)
23   - periodic Generator function outputs (TS_GENFx)
24   - Ethernet Enhanced Scheduled Traffic Operations (CPTS_ESTFn) (TSN)
25   - external hardware timestamp push inputs (HWx_TS_PUSH) timestamping
26
27    Depending on integration it enables compliance with the IEEE 1588-2008
28    standard for a precision clock synchronization protocol, Ethernet Enhanced
29    Scheduled Traffic Operations (CPTS_ESTFn) and PCIe Subsystem Precision Time
30    Measurement (PTM).
31
32   TI AM654x/J721E SoCs has several similar CPTS modules integrated into the
33   different parts of the system which could be synchronized with each other
34   - Main CPTS
35   - MCU CPSW CPTS with IEEE 1588-2008 support
36   - PCIe subsystem CPTS for PTM support
37
38   Depending on CPTS module integration and when CPTS is integral part of
39   another module (MCU CPSW for example) "compatible" and "reg" can
40   be omitted - parent module is fully responsible for CPTS enabling and
41   configuration.
42
43 properties:
44   $nodename:
45     pattern: "^cpts(@.*|-[0-9a-f])*$"
46
47   compatible:
48     oneOf:
49       - const: ti,am65-cpts
50       - const: ti,j721e-cpts
51
52   reg:
53     maxItems: 1
54     description:
55        The physical base address and size of CPTS IO range
56
57   reg-names:
58     items:
59       - const: cpts
60
61   clocks:
62     description: CPTS reference clock
63
64   clock-names:
65     items:
66       - const: cpts
67
68   interrupts-extended:
69     items:
70       - description: CPTS events interrupt
71
72   interrupt-names:
73     items:
74       - const: "cpts"
75
76   ti,cpts-ext-ts-inputs:
77     allOf:
78       - $ref: /schemas/types.yaml#/definitions/uint32
79     maximum: 8
80     description:
81         Number of hardware timestamp push inputs (HWx_TS_PUSH)
82
83   ti,cpts-periodic-outputs:
84     allOf:
85       - $ref: /schemas/types.yaml#/definitions/uint32
86     maximum: 8
87     description:
88          Number of timestamp Generator function outputs (TS_GENFx)
89
90   refclk-mux:
91     type: object
92     description: CPTS reference clock multiplexer clock
93     properties:
94       '#clock-cells':
95         const: 0
96
97       clocks:
98         maxItems: 8
99
100       assigned-clocks:
101         maxItems: 1
102
103       assigned-clocks-parents:
104         maxItems: 1
105
106     required:
107       - clocks
108
109 required:
110   - clocks
111   - clock-names
112   - interrupts-extended
113   - interrupt-names
114
115 additionalProperties: false
116
117 examples:
118   - |
119     #include <dt-bindings/interrupt-controller/irq.h>
120     #include <dt-bindings/interrupt-controller/arm-gic.h>
121
122     cpts@310d0000 {
123          compatible = "ti,am65-cpts";
124          reg = <0x0 0x310d0000 0x0 0x400>;
125          reg-names = "cpts";
126          clocks = <&main_cpts_mux>;
127          clock-names = "cpts";
128          interrupts-extended = <&k3_irq 163 0 IRQ_TYPE_LEVEL_HIGH>;
129          interrupt-names = "cpts";
130          ti,cpts-periodic-outputs = <6>;
131          ti,cpts-ext-ts-inputs = <8>;
132
133          main_cpts_mux: refclk-mux {
134                #clock-cells = <0>;
135                clocks = <&k3_clks 118 5>, <&k3_clks 118 11>,
136                         <&k3_clks 157 91>, <&k3_clks 157 77>,
137                         <&k3_clks 157 102>, <&k3_clks 157 80>,
138                         <&k3_clks 120 3>, <&k3_clks 121 3>;
139                assigned-clocks = <&main_cpts_mux>;
140                assigned-clock-parents = <&k3_clks 118 11>;
141          };
142     };
143   - |
144
145     cpts {
146              clocks = <&k3_clks 18 2>;
147              clock-names = "cpts";
148              interrupts-extended = <&gic500 GIC_SPI 858 IRQ_TYPE_LEVEL_HIGH>;
149              interrupt-names = "cpts";
150              ti,cpts-ext-ts-inputs = <4>;
151              ti,cpts-periodic-outputs = <2>;
152     };