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