1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/net/snps,dwmac.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Synopsys DesignWare MAC Device Tree Bindings
8
9maintainers:
10  - Alexandre Torgue <alexandre.torgue@st.com>
11  - Giuseppe Cavallaro <peppe.cavallaro@st.com>
12  - Jose Abreu <joabreu@synopsys.com>
13
14# Select every compatible, including the deprecated ones. This way, we
15# will be able to report a warning when we have that compatible, since
16# we will validate the node thanks to the select, but won't report it
17# as a valid value in the compatible property description
18select:
19  properties:
20    compatible:
21      contains:
22        enum:
23          - snps,dwmac
24          - snps,dwmac-3.40a
25          - snps,dwmac-3.50a
26          - snps,dwmac-3.610
27          - snps,dwmac-3.70a
28          - snps,dwmac-3.710
29          - snps,dwmac-4.00
30          - snps,dwmac-4.10a
31          - snps,dwmac-4.20a
32          - snps,dwmac-5.10a
33          - snps,dwxgmac
34          - snps,dwxgmac-2.10
35
36          # Deprecated
37          - st,spear600-gmac
38
39  required:
40    - compatible
41
42properties:
43
44  # We need to include all the compatibles from schemas that will
45  # include that schemas, otherwise compatible won't validate for
46  # those.
47  compatible:
48    contains:
49      enum:
50        - allwinner,sun7i-a20-gmac
51        - allwinner,sun8i-a83t-emac
52        - allwinner,sun8i-h3-emac
53        - allwinner,sun8i-r40-emac
54        - allwinner,sun8i-v3s-emac
55        - allwinner,sun50i-a64-emac
56        - loongson,ls2k-dwmac
57        - loongson,ls7a-dwmac
58        - amlogic,meson6-dwmac
59        - amlogic,meson8b-dwmac
60        - amlogic,meson8m2-dwmac
61        - amlogic,meson-gxbb-dwmac
62        - amlogic,meson-axg-dwmac
63        - loongson,ls2k-dwmac
64        - loongson,ls7a-dwmac
65        - ingenic,jz4775-mac
66        - ingenic,x1000-mac
67        - ingenic,x1600-mac
68        - ingenic,x1830-mac
69        - ingenic,x2000-mac
70        - rockchip,px30-gmac
71        - rockchip,rk3128-gmac
72        - rockchip,rk3228-gmac
73        - rockchip,rk3288-gmac
74        - rockchip,rk3328-gmac
75        - rockchip,rk3366-gmac
76        - rockchip,rk3368-gmac
77        - rockchip,rk3399-gmac
78        - rockchip,rv1108-gmac
79        - snps,dwmac
80        - snps,dwmac-3.40a
81        - snps,dwmac-3.50a
82        - snps,dwmac-3.610
83        - snps,dwmac-3.70a
84        - snps,dwmac-3.710
85        - snps,dwmac-4.00
86        - snps,dwmac-4.10a
87        - snps,dwmac-4.20a
88        - snps,dwmac-5.10a
89        - snps,dwxgmac
90        - snps,dwxgmac-2.10
91
92  reg:
93    minItems: 1
94    maxItems: 2
95
96  interrupts:
97    minItems: 1
98    items:
99      - description: Combined signal for various interrupt events
100      - description: The interrupt to manage the remote wake-up packet detection
101      - description: The interrupt that occurs when Rx exits the LPI state
102
103  interrupt-names:
104    minItems: 1
105    items:
106      - const: macirq
107      - const: eth_wake_irq
108      - const: eth_lpi
109
110  clocks:
111    minItems: 1
112    maxItems: 8
113    additionalItems: true
114    items:
115      - description: GMAC main clock
116      - description: Peripheral registers interface clock
117      - description:
118          PTP reference clock. This clock is used for programming the
119          Timestamp Addend Register. If not passed then the system
120          clock will be used and this is fine on some platforms.
121
122  clock-names:
123    minItems: 1
124    maxItems: 8
125    additionalItems: true
126    contains:
127      enum:
128        - stmmaceth
129        - pclk
130        - ptp_ref
131
132  resets:
133    maxItems: 1
134    description:
135      MAC Reset signal.
136
137  reset-names:
138    const: stmmaceth
139
140  mac-mode:
141    $ref: ethernet-controller.yaml#/properties/phy-connection-type
142    description:
143      The property is identical to 'phy-mode', and assumes that there is mode
144      converter in-between the MAC & PHY (e.g. GMII-to-RGMII). This converter
145      can be passive (no SW requirement), and requires that the MAC operate
146      in a different mode than the PHY in order to function.
147
148  snps,axi-config:
149    $ref: /schemas/types.yaml#/definitions/phandle
150    description:
151      AXI BUS Mode parameters. Phandle to a node that can contain the
152      following properties
153        * snps,lpi_en, enable Low Power Interface
154        * snps,xit_frm, unlock on WoL
155        * snps,wr_osr_lmt, max write outstanding req. limit
156        * snps,rd_osr_lmt, max read outstanding req. limit
157        * snps,kbbe, do not cross 1KiB boundary.
158        * snps,blen, this is a vector of supported burst length.
159        * snps,fb, fixed-burst
160        * snps,mb, mixed-burst
161        * snps,rb, rebuild INCRx Burst
162
163  snps,mtl-rx-config:
164    $ref: /schemas/types.yaml#/definitions/phandle
165    description:
166      Multiple RX Queues parameters. Phandle to a node that can
167      contain the following properties
168        * snps,rx-queues-to-use, number of RX queues to be used in the
169          driver
170        * Choose one of these RX scheduling algorithms
171          * snps,rx-sched-sp, Strict priority
172          * snps,rx-sched-wsp, Weighted Strict priority
173        * For each RX queue
174          * Choose one of these modes
175            * snps,dcb-algorithm, Queue to be enabled as DCB
176            * snps,avb-algorithm, Queue to be enabled as AVB
177          * snps,map-to-dma-channel, Channel to map
178          * Specifiy specific packet routing
179            * snps,route-avcp, AV Untagged Control packets
180            * snps,route-ptp, PTP Packets
181            * snps,route-dcbcp, DCB Control Packets
182            * snps,route-up, Untagged Packets
183            * snps,route-multi-broad, Multicast & Broadcast Packets
184          * snps,priority, bitmask of the tagged frames priorities assigned to
185            the queue
186
187  snps,mtl-tx-config:
188    $ref: /schemas/types.yaml#/definitions/phandle
189    description:
190      Multiple TX Queues parameters. Phandle to a node that can
191      contain the following properties
192        * snps,tx-queues-to-use, number of TX queues to be used in the
193          driver
194        * Choose one of these TX scheduling algorithms
195          * snps,tx-sched-wrr, Weighted Round Robin
196          * snps,tx-sched-wfq, Weighted Fair Queuing
197          * snps,tx-sched-dwrr, Deficit Weighted Round Robin
198          * snps,tx-sched-sp, Strict priority
199        * For each TX queue
200          * snps,weight, TX queue weight (if using a DCB weight
201            algorithm)
202          * Choose one of these modes
203            * snps,dcb-algorithm, TX queue will be working in DCB
204            * snps,avb-algorithm, TX queue will be working in AVB
205              [Attention] Queue 0 is reserved for legacy traffic
206                          and so no AVB is available in this queue.
207          * Configure Credit Base Shaper (if AVB Mode selected)
208            * snps,send_slope, enable Low Power Interface
209            * snps,idle_slope, unlock on WoL
210            * snps,high_credit, max write outstanding req. limit
211            * snps,low_credit, max read outstanding req. limit
212          * snps,priority, bitmask of the priorities assigned to the queue.
213            When a PFC frame is received with priorities matching the bitmask,
214            the queue is blocked from transmitting for the pause time specified
215            in the PFC frame.
216
217  snps,reset-gpio:
218    deprecated: true
219    maxItems: 1
220    description:
221      PHY Reset GPIO
222
223  snps,reset-active-low:
224    deprecated: true
225    $ref: /schemas/types.yaml#/definitions/flag
226    description:
227      Indicates that the PHY Reset is active low
228
229  snps,reset-delays-us:
230    deprecated: true
231    description:
232      Triplet of delays. The 1st cell is reset pre-delay in micro
233      seconds. The 2nd cell is reset pulse in micro seconds. The 3rd
234      cell is reset post-delay in micro seconds.
235    minItems: 3
236    maxItems: 3
237
238  snps,aal:
239    $ref: /schemas/types.yaml#/definitions/flag
240    description:
241      Use Address-Aligned Beats
242
243  snps,fixed-burst:
244    $ref: /schemas/types.yaml#/definitions/flag
245    description:
246      Program the DMA to use the fixed burst mode
247
248  snps,mixed-burst:
249    $ref: /schemas/types.yaml#/definitions/flag
250    description:
251      Program the DMA to use the mixed burst mode
252
253  snps,force_thresh_dma_mode:
254    $ref: /schemas/types.yaml#/definitions/flag
255    description:
256      Force DMA to use the threshold mode for both tx and rx
257
258  snps,force_sf_dma_mode:
259    $ref: /schemas/types.yaml#/definitions/flag
260    description:
261      Force DMA to use the Store and Forward mode for both tx and
262      rx. This flag is ignored if force_thresh_dma_mode is set.
263
264  snps,en-tx-lpi-clockgating:
265    $ref: /schemas/types.yaml#/definitions/flag
266    description:
267      Enable gating of the MAC TX clock during TX low-power mode
268
269  snps,multicast-filter-bins:
270    $ref: /schemas/types.yaml#/definitions/uint32
271    description:
272      Number of multicast filter hash bins supported by this device
273      instance
274
275  snps,perfect-filter-entries:
276    $ref: /schemas/types.yaml#/definitions/uint32
277    description:
278      Number of perfect filter entries supported by this device
279      instance
280
281  snps,ps-speed:
282    $ref: /schemas/types.yaml#/definitions/uint32
283    description:
284      Port selection speed that can be passed to the core when PCS
285      is supported. For example, this is used in case of SGMII and
286      MAC2MAC connection.
287
288  mdio:
289    type: object
290    description:
291      Creates and registers an MDIO bus.
292
293    properties:
294      compatible:
295        const: snps,dwmac-mdio
296
297    required:
298      - compatible
299
300required:
301  - compatible
302  - reg
303  - interrupts
304  - interrupt-names
305  - phy-mode
306
307dependencies:
308  snps,reset-active-low: ["snps,reset-gpio"]
309  snps,reset-delay-us: ["snps,reset-gpio"]
310
311allOf:
312  - $ref: "ethernet-controller.yaml#"
313  - if:
314      properties:
315        compatible:
316          contains:
317            enum:
318              - allwinner,sun7i-a20-gmac
319              - allwinner,sun8i-a83t-emac
320              - allwinner,sun8i-h3-emac
321              - allwinner,sun8i-r40-emac
322              - allwinner,sun8i-v3s-emac
323              - allwinner,sun50i-a64-emac
324              - ingenic,jz4775-mac
325              - ingenic,x1000-mac
326              - ingenic,x1600-mac
327              - ingenic,x1830-mac
328              - ingenic,x2000-mac
329              - snps,dwxgmac
330              - snps,dwxgmac-2.10
331              - st,spear600-gmac
332
333    then:
334      properties:
335        snps,pbl:
336          description:
337            Programmable Burst Length (tx and rx)
338          $ref: /schemas/types.yaml#/definitions/uint32
339          enum: [2, 4, 8]
340
341        snps,txpbl:
342          description:
343            Tx Programmable Burst Length. If set, DMA tx will use this
344            value rather than snps,pbl.
345          $ref: /schemas/types.yaml#/definitions/uint32
346          enum: [2, 4, 8]
347
348        snps,rxpbl:
349          description:
350            Rx Programmable Burst Length. If set, DMA rx will use this
351            value rather than snps,pbl.
352          $ref: /schemas/types.yaml#/definitions/uint32
353          enum: [2, 4, 8]
354
355        snps,no-pbl-x8:
356          $ref: /schemas/types.yaml#/definitions/flag
357          description:
358            Don\'t multiply the pbl/txpbl/rxpbl values by 8. For core
359            rev < 3.50, don\'t multiply the values by 4.
360
361  - if:
362      properties:
363        compatible:
364          contains:
365            enum:
366              - allwinner,sun7i-a20-gmac
367              - allwinner,sun8i-a83t-emac
368              - allwinner,sun8i-h3-emac
369              - allwinner,sun8i-r40-emac
370              - allwinner,sun8i-v3s-emac
371              - allwinner,sun50i-a64-emac
372              - loongson,ls2k-dwmac
373              - loongson,ls7a-dwmac
374              - ingenic,jz4775-mac
375              - ingenic,x1000-mac
376              - ingenic,x1600-mac
377              - ingenic,x1830-mac
378              - ingenic,x2000-mac
379              - snps,dwmac-4.00
380              - snps,dwmac-4.10a
381              - snps,dwmac-4.20a
382              - snps,dwmac-5.10a
383              - snps,dwxgmac
384              - snps,dwxgmac-2.10
385              - st,spear600-gmac
386
387    then:
388      properties:
389        snps,tso:
390          $ref: /schemas/types.yaml#/definitions/flag
391          description:
392            Enables the TSO feature otherwise it will be managed by
393            MAC HW capability register.
394
395additionalProperties: true
396
397examples:
398  - |
399    stmmac_axi_setup: stmmac-axi-config {
400        snps,wr_osr_lmt = <0xf>;
401        snps,rd_osr_lmt = <0xf>;
402        snps,blen = <256 128 64 32 0 0 0>;
403    };
404
405    mtl_rx_setup: rx-queues-config {
406        snps,rx-queues-to-use = <1>;
407        snps,rx-sched-sp;
408        queue0 {
409            snps,dcb-algorithm;
410            snps,map-to-dma-channel = <0x0>;
411            snps,priority = <0x0>;
412        };
413    };
414
415    mtl_tx_setup: tx-queues-config {
416        snps,tx-queues-to-use = <2>;
417        snps,tx-sched-wrr;
418        queue0 {
419            snps,weight = <0x10>;
420            snps,dcb-algorithm;
421            snps,priority = <0x0>;
422        };
423
424        queue1 {
425            snps,avb-algorithm;
426            snps,send_slope = <0x1000>;
427            snps,idle_slope = <0x1000>;
428            snps,high_credit = <0x3E800>;
429            snps,low_credit = <0xFFC18000>;
430            snps,priority = <0x1>;
431        };
432    };
433
434    gmac0: ethernet@e0800000 {
435        compatible = "snps,dwxgmac-2.10", "snps,dwxgmac";
436        reg = <0xe0800000 0x8000>;
437        interrupt-parent = <&vic1>;
438        interrupts = <24 23 22>;
439        interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
440        mac-address = [000000000000]; /* Filled in by U-Boot */
441        max-frame-size = <3800>;
442        phy-mode = "gmii";
443        snps,multicast-filter-bins = <256>;
444        snps,perfect-filter-entries = <128>;
445        rx-fifo-depth = <16384>;
446        tx-fifo-depth = <16384>;
447        clocks = <&clock>;
448        clock-names = "stmmaceth";
449        snps,axi-config = <&stmmac_axi_setup>;
450        snps,mtl-rx-config = <&mtl_rx_setup>;
451        snps,mtl-tx-config = <&mtl_tx_setup>;
452        mdio0 {
453            #address-cells = <1>;
454            #size-cells = <0>;
455            compatible = "snps,dwmac-mdio";
456            phy1: ethernet-phy@0 {
457                reg = <0>;
458            };
459        };
460    };
461
462# FIXME: We should set it, but it would report all the generic
463# properties as additional properties.
464# additionalProperties: false
465
466...
467