aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-tsa.yaml
blob: 7e51c639a79a307e9c6aa0aab522f0859cac9c76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/soc/fsl/cpm_qe/fsl,cpm1-tsa.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: PowerQUICC CPM Time-slot assigner (TSA) controller

maintainers:
  - Herve Codina <herve.codina@bootlin.com>

description:
  The TSA is the time-slot assigner that can be found on some PowerQUICC SoC.
  Its purpose is to route some TDM time-slots to other internal serial
  controllers.

properties:
  compatible:
    items:
      - enum:
          - fsl,mpc885-tsa
          - fsl,mpc866-tsa
      - const: fsl,cpm1-tsa

  reg:
    items:
      - description: SI (Serial Interface) register base
      - description: SI RAM base

  reg-names:
    items:
      - const: si_regs
      - const: si_ram

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

patternProperties:
  '^tdm@[0-1]$':
    description:
      The TDM managed by this controller
    type: object

    additionalProperties: false

    properties:
      reg:
        minimum: 0
        maximum: 1
        description:
          The TDM number for this TDM, 0 for TDMa and 1 for TDMb

      fsl,common-rxtx-pins:
        $ref: /schemas/types.yaml#/definitions/flag
        description:
          The hardware can use four dedicated pins for Tx clock, Tx sync, Rx
          clock and Rx sync or use only two pins, Tx/Rx clock and Tx/Rx sync.
          Without the 'fsl,common-rxtx-pins' property, the four pins are used.
          With the 'fsl,common-rxtx-pins' property, two pins are used.

      clocks:
        minItems: 2
        items:
          - description: External clock connected to L1RSYNC pin
          - description: External clock connected to L1RCLK pin
          - description: External clock connected to L1TSYNC pin
          - description: External clock connected to L1TCLK pin

      clock-names:
        minItems: 2
        items:
          - const: l1rsync
          - const: l1rclk
          - const: l1tsync
          - const: l1tclk

      fsl,rx-frame-sync-delay-bits:
        enum: [0, 1, 2, 3]
        default: 0
        description: |
          Receive frame sync delay in number of bits.
          Indicates the delay between the Rx sync and the first bit of the Rx
          frame. 0 for no bit delay. 1, 2 or 3 for 1, 2 or 3 bits delay.

      fsl,tx-frame-sync-delay-bits:
        enum: [0, 1, 2, 3]
        default: 0
        description: |
          Transmit frame sync delay in number of bits.
          Indicates the delay between the Tx sync and the first bit of the Tx
          frame. 0 for no bit delay. 1, 2 or 3 for 1, 2 or 3 bits delay.

      fsl,clock-falling-edge:
        $ref: /schemas/types.yaml#/definitions/flag
        description:
          Data is sent on falling edge of the clock (and received on the rising
          edge). If 'clock-falling-edge' is not present, data is sent on the
          rising edge (and received on the falling edge).

      fsl,fsync-rising-edge:
        $ref: /schemas/types.yaml#/definitions/flag
        description:
          Frame sync pulses are sampled with the rising edge of the channel
          clock. If 'fsync-rising-edge' is not present, pulses are sampled with
          the falling edge.

      fsl,double-speed-clock:
        $ref: /schemas/types.yaml#/definitions/flag
        description:
          The channel clock is twice the data rate.

    patternProperties:
      '^fsl,[rt]x-ts-routes$':
        $ref: /schemas/types.yaml#/definitions/uint32-matrix
        description: |
          A list of tuple that indicates the Tx or Rx time-slots routes.
        items:
          items:
            - description:
                The number of time-slots
              minimum: 1
              maximum: 64
            - description: |
                The source (Tx) or destination (Rx) serial interface
                (dt-bindings/soc/cpm1-fsl,tsa.h defines these values)
                 - 0: No destination
                 - 1: SCC2
                 - 2: SCC3
                 - 3: SCC4
                 - 4: SMC1
                 - 5: SMC2
              enum: [0, 1, 2, 3, 4, 5]
        minItems: 1
        maxItems: 64

    allOf:
      # If fsl,common-rxtx-pins is present, only 2 clocks are needed.
      # Else, the 4 clocks must be present.
      - if:
          required:
            - fsl,common-rxtx-pins
        then:
          properties:
            clocks:
              maxItems: 2
            clock-names:
              maxItems: 2
        else:
          properties:
            clocks:
              minItems: 4
            clock-names:
              minItems: 4

    required:
      - reg
      - clocks
      - clock-names

required:
  - compatible
  - reg
  - reg-names
  - '#address-cells'
  - '#size-cells'

additionalProperties: false

examples:
  - |
    #include <dt-bindings/soc/cpm1-fsl,tsa.h>

    tsa@ae0 {
        compatible = "fsl,mpc885-tsa", "fsl,cpm1-tsa";
        reg = <0xae0 0x10>,
              <0xc00 0x200>;
        reg-names = "si_regs", "si_ram";

        #address-cells = <1>;
        #size-cells = <0>;

        tdm@0 {
            /* TDMa */
            reg = <0>;

            clocks = <&clk_l1rsynca>, <&clk_l1rclka>;
            clock-names = "l1rsync", "l1rclk";

            fsl,common-rxtx-pins;
            fsl,fsync-rising-edge;

            fsl,tx-ts-routes = <2 0>,             /* TS 0..1 */
                           <24 FSL_CPM_TSA_SCC4>, /* TS 2..25 */
                           <1 0>,                 /* TS 26 */
                           <5 FSL_CPM_TSA_SCC3>;  /* TS 27..31 */

            fsl,rx-ts-routes = <2 0>,             /* TS 0..1 */
                           <24 FSL_CPM_TSA_SCC4>, /* 2..25 */
                           <1 0>,                 /* TS 26 */
                           <5 FSL_CPM_TSA_SCC3>;  /* TS 27..31 */
        };
    };