1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/soc/fsl/cpm_qe/fsl,cpm1-tsa.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: PowerQUICC CPM Time-slot assigner (TSA) controller
8
9maintainers:
10  - Herve Codina <herve.codina@bootlin.com>
11
12description:
13  The TSA is the time-slot assigner that can be found on some PowerQUICC SoC.
14  Its purpose is to route some TDM time-slots to other internal serial
15  controllers.
16
17properties:
18  compatible:
19    items:
20      - enum:
21          - fsl,mpc885-tsa
22          - fsl,mpc866-tsa
23      - const: fsl,cpm1-tsa
24
25  reg:
26    items:
27      - description: SI (Serial Interface) register base
28      - description: SI RAM base
29
30  reg-names:
31    items:
32      - const: si_regs
33      - const: si_ram
34
35  '#address-cells':
36    const: 1
37
38  '#size-cells':
39    const: 0
40
41patternProperties:
42  '^tdm@[0-1]$':
43    description:
44      The TDM managed by this controller
45    type: object
46
47    additionalProperties: false
48
49    properties:
50      reg:
51        minimum: 0
52        maximum: 1
53        description:
54          The TDM number for this TDM, 0 for TDMa and 1 for TDMb
55
56      fsl,common-rxtx-pins:
57        $ref: /schemas/types.yaml#/definitions/flag
58        description:
59          The hardware can use four dedicated pins for Tx clock, Tx sync, Rx
60          clock and Rx sync or use only two pins, Tx/Rx clock and Tx/Rx sync.
61          Without the 'fsl,common-rxtx-pins' property, the four pins are used.
62          With the 'fsl,common-rxtx-pins' property, two pins are used.
63
64      clocks:
65        minItems: 2
66        items:
67          - description: External clock connected to L1RSYNC pin
68          - description: External clock connected to L1RCLK pin
69          - description: External clock connected to L1TSYNC pin
70          - description: External clock connected to L1TCLK pin
71
72      clock-names:
73        minItems: 2
74        items:
75          - const: l1rsync
76          - const: l1rclk
77          - const: l1tsync
78          - const: l1tclk
79
80      fsl,rx-frame-sync-delay-bits:
81        enum: [0, 1, 2, 3]
82        default: 0
83        description: |
84          Receive frame sync delay in number of bits.
85          Indicates the delay between the Rx sync and the first bit of the Rx
86          frame. 0 for no bit delay. 1, 2 or 3 for 1, 2 or 3 bits delay.
87
88      fsl,tx-frame-sync-delay-bits:
89        enum: [0, 1, 2, 3]
90        default: 0
91        description: |
92          Transmit frame sync delay in number of bits.
93          Indicates the delay between the Tx sync and the first bit of the Tx
94          frame. 0 for no bit delay. 1, 2 or 3 for 1, 2 or 3 bits delay.
95
96      fsl,clock-falling-edge:
97        $ref: /schemas/types.yaml#/definitions/flag
98        description:
99          Data is sent on falling edge of the clock (and received on the rising
100          edge). If 'clock-falling-edge' is not present, data is sent on the
101          rising edge (and received on the falling edge).
102
103      fsl,fsync-rising-edge:
104        $ref: /schemas/types.yaml#/definitions/flag
105        description:
106          Frame sync pulses are sampled with the rising edge of the channel
107          clock. If 'fsync-rising-edge' is not present, pulses are sampled with
108          the falling edge.
109
110      fsl,double-speed-clock:
111        $ref: /schemas/types.yaml#/definitions/flag
112        description:
113          The channel clock is twice the data rate.
114
115    patternProperties:
116      '^fsl,[rt]x-ts-routes$':
117        $ref: /schemas/types.yaml#/definitions/uint32-matrix
118        description: |
119          A list of tuple that indicates the Tx or Rx time-slots routes.
120        items:
121          items:
122            - description:
123                The number of time-slots
124              minimum: 1
125              maximum: 64
126            - description: |
127                The source (Tx) or destination (Rx) serial interface
128                (dt-bindings/soc/cpm1-fsl,tsa.h defines these values)
129                 - 0: No destination
130                 - 1: SCC2
131                 - 2: SCC3
132                 - 3: SCC4
133                 - 4: SMC1
134                 - 5: SMC2
135              enum: [0, 1, 2, 3, 4, 5]
136        minItems: 1
137        maxItems: 64
138
139    allOf:
140      # If fsl,common-rxtx-pins is present, only 2 clocks are needed.
141      # Else, the 4 clocks must be present.
142      - if:
143          required:
144            - fsl,common-rxtx-pins
145        then:
146          properties:
147            clocks:
148              maxItems: 2
149            clock-names:
150              maxItems: 2
151        else:
152          properties:
153            clocks:
154              minItems: 4
155            clock-names:
156              minItems: 4
157
158    required:
159      - reg
160      - clocks
161      - clock-names
162
163required:
164  - compatible
165  - reg
166  - reg-names
167  - '#address-cells'
168  - '#size-cells'
169
170additionalProperties: false
171
172examples:
173  - |
174    #include <dt-bindings/soc/cpm1-fsl,tsa.h>
175
176    tsa@ae0 {
177        compatible = "fsl,mpc885-tsa", "fsl,cpm1-tsa";
178        reg = <0xae0 0x10>,
179              <0xc00 0x200>;
180        reg-names = "si_regs", "si_ram";
181
182        #address-cells = <1>;
183        #size-cells = <0>;
184
185        tdm@0 {
186            /* TDMa */
187            reg = <0>;
188
189            clocks = <&clk_l1rsynca>, <&clk_l1rclka>;
190            clock-names = "l1rsync", "l1rclk";
191
192            fsl,common-rxtx-pins;
193            fsl,fsync-rising-edge;
194
195            fsl,tx-ts-routes = <2 0>,             /* TS 0..1 */
196                           <24 FSL_CPM_TSA_SCC4>, /* TS 2..25 */
197                           <1 0>,                 /* TS 26 */
198                           <5 FSL_CPM_TSA_SCC3>;  /* TS 27..31 */
199
200            fsl,rx-ts-routes = <2 0>,             /* TS 0..1 */
201                           <24 FSL_CPM_TSA_SCC4>, /* 2..25 */
202                           <1 0>,                 /* TS 26 */
203                           <5 FSL_CPM_TSA_SCC3>;  /* TS 27..31 */
204        };
205    };
206