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
171      implements the 'rx-queues-config' object described in
172      this binding.
173
174  rx-queues-config:
175    type: object
176    properties:
177      snps,rx-queues-to-use:
178        $ref: /schemas/types.yaml#/definitions/uint32
179        description: number of RX queues to be used in the driver
180      snps,rx-sched-sp:
181        type: boolean
182        description: Strict priority
183      snps,rx-sched-wsp:
184        type: boolean
185        description: Weighted Strict priority
186    allOf:
187      - if:
188          required:
189            - snps,rx-sched-sp
190        then:
191          properties:
192            snps,rx-sched-wsp: false
193      - if:
194          required:
195            - snps,rx-sched-wsp
196        then:
197          properties:
198            snps,rx-sched-sp: false
199    patternProperties:
200      "^queue[0-9]$":
201        description: Each subnode represents a queue.
202        type: object
203        properties:
204          snps,dcb-algorithm:
205            type: boolean
206            description: Queue to be enabled as DCB
207          snps,avb-algorithm:
208            type: boolean
209            description: Queue to be enabled as AVB
210          snps,map-to-dma-channel:
211            $ref: /schemas/types.yaml#/definitions/uint32
212            description: DMA channel id to map
213          snps,route-avcp:
214            type: boolean
215            description: AV Untagged Control packets
216          snps,route-ptp:
217            type: boolean
218            description: PTP Packets
219          snps,route-dcbcp:
220            type: boolean
221            description: DCB Control Packets
222          snps,route-up:
223            type: boolean
224            description: Untagged Packets
225          snps,route-multi-broad:
226            type: boolean
227            description: Multicast & Broadcast Packets
228          snps,priority:
229            $ref: /schemas/types.yaml#/definitions/uint32
230            description: Bitmask of the tagged frames priorities assigned to the queue
231        allOf:
232          - if:
233              required:
234                - snps,dcb-algorithm
235            then:
236              properties:
237                snps,avb-algorithm: false
238          - if:
239              required:
240                - snps,avb-algorithm
241            then:
242              properties:
243                snps,dcb-algorithm: false
244          - if:
245              required:
246                - snps,route-avcp
247            then:
248              properties:
249                snps,route-ptp: false
250                snps,route-dcbcp: false
251                snps,route-up: false
252                snps,route-multi-broad: false
253          - if:
254              required:
255                - snps,route-ptp
256            then:
257              properties:
258                snps,route-avcp: false
259                snps,route-dcbcp: false
260                snps,route-up: false
261                snps,route-multi-broad: false
262          - if:
263              required:
264                - snps,route-dcbcp
265            then:
266              properties:
267                snps,route-avcp: false
268                snps,route-ptp: false
269                snps,route-up: false
270                snps,route-multi-broad: false
271          - if:
272              required:
273                - snps,route-up
274            then:
275              properties:
276                snps,route-avcp: false
277                snps,route-ptp: false
278                snps,route-dcbcp: false
279                snps,route-multi-broad: false
280          - if:
281              required:
282                - snps,route-multi-broad
283            then:
284              properties:
285                snps,route-avcp: false
286                snps,route-ptp: false
287                snps,route-dcbcp: false
288                snps,route-up: false
289        additionalProperties: false
290    additionalProperties: false
291
292  snps,mtl-tx-config:
293    $ref: /schemas/types.yaml#/definitions/phandle
294    description:
295      Multiple TX Queues parameters. Phandle to a node that
296      implements the 'tx-queues-config' object described in
297      this binding.
298
299  tx-queues-config:
300    type: object
301    properties:
302      snps,tx-queues-to-use:
303        $ref: /schemas/types.yaml#/definitions/uint32
304        description: number of TX queues to be used in the driver
305      snps,tx-sched-wrr:
306        type: boolean
307        description: Weighted Round Robin
308      snps,tx-sched-wfq:
309        type: boolean
310        description: Weighted Fair Queuing
311      snps,tx-sched-dwrr:
312        type: boolean
313        description: Deficit Weighted Round Robin
314      snps,tx-sched-sp:
315        type: boolean
316        description: Strict priority
317    allOf:
318      - if:
319          required:
320            - snps,tx-sched-wrr
321        then:
322          properties:
323            snps,tx-sched-wfq: false
324            snps,tx-sched-dwrr: false
325            snps,tx-sched-sp: false
326      - if:
327          required:
328            - snps,tx-sched-wfq
329        then:
330          properties:
331            snps,tx-sched-wrr: false
332            snps,tx-sched-dwrr: false
333            snps,tx-sched-sp: false
334      - if:
335          required:
336            - snps,tx-sched-dwrr
337        then:
338          properties:
339            snps,tx-sched-wrr: false
340            snps,tx-sched-wfq: false
341            snps,tx-sched-sp: false
342      - if:
343          required:
344            - snps,tx-sched-sp
345        then:
346          properties:
347            snps,tx-sched-wrr: false
348            snps,tx-sched-wfq: false
349            snps,tx-sched-dwrr: false
350    patternProperties:
351      "^queue[0-9]$":
352        description: Each subnode represents a queue.
353        type: object
354        properties:
355          snps,weight:
356            $ref: /schemas/types.yaml#/definitions/uint32
357            description: TX queue weight (if using a DCB weight algorithm)
358          snps,dcb-algorithm:
359            type: boolean
360            description: TX queue will be working in DCB
361          snps,avb-algorithm:
362            type: boolean
363            description:
364              TX queue will be working in AVB.
365              Queue 0 is reserved for legacy traffic and so no AVB is
366              available in this queue.
367          snps,send_slope:
368            $ref: /schemas/types.yaml#/definitions/uint32
369            description: enable Low Power Interface
370          snps,idle_slope:
371            $ref: /schemas/types.yaml#/definitions/uint32
372            description: unlock on WoL
373          snps,high_credit:
374            $ref: /schemas/types.yaml#/definitions/uint32
375            description: max write outstanding req. limit
376          snps,low_credit:
377            $ref: /schemas/types.yaml#/definitions/uint32
378            description: max read outstanding req. limit
379          snps,priority:
380            $ref: /schemas/types.yaml#/definitions/uint32
381            description:
382              Bitmask of the tagged frames priorities assigned to the queue.
383              When a PFC frame is received with priorities matching the bitmask,
384              the queue is blocked from transmitting for the pause time specified
385              in the PFC frame.
386        allOf:
387          - if:
388              required:
389                - snps,dcb-algorithm
390            then:
391              properties:
392                snps,avb-algorithm: false
393          - if:
394              required:
395                - snps,avb-algorithm
396            then:
397              properties:
398                snps,dcb-algorithm: false
399                snps,weight: false
400        additionalProperties: false
401    additionalProperties: false
402
403  snps,reset-gpio:
404    deprecated: true
405    maxItems: 1
406    description:
407      PHY Reset GPIO
408
409  snps,reset-active-low:
410    deprecated: true
411    $ref: /schemas/types.yaml#/definitions/flag
412    description:
413      Indicates that the PHY Reset is active low
414
415  snps,reset-delays-us:
416    deprecated: true
417    description:
418      Triplet of delays. The 1st cell is reset pre-delay in micro
419      seconds. The 2nd cell is reset pulse in micro seconds. The 3rd
420      cell is reset post-delay in micro seconds.
421    minItems: 3
422    maxItems: 3
423
424  snps,aal:
425    $ref: /schemas/types.yaml#/definitions/flag
426    description:
427      Use Address-Aligned Beats
428
429  snps,fixed-burst:
430    $ref: /schemas/types.yaml#/definitions/flag
431    description:
432      Program the DMA to use the fixed burst mode
433
434  snps,mixed-burst:
435    $ref: /schemas/types.yaml#/definitions/flag
436    description:
437      Program the DMA to use the mixed burst mode
438
439  snps,force_thresh_dma_mode:
440    $ref: /schemas/types.yaml#/definitions/flag
441    description:
442      Force DMA to use the threshold mode for both tx and rx
443
444  snps,force_sf_dma_mode:
445    $ref: /schemas/types.yaml#/definitions/flag
446    description:
447      Force DMA to use the Store and Forward mode for both tx and
448      rx. This flag is ignored if force_thresh_dma_mode is set.
449
450  snps,en-tx-lpi-clockgating:
451    $ref: /schemas/types.yaml#/definitions/flag
452    description:
453      Enable gating of the MAC TX clock during TX low-power mode
454
455  snps,multicast-filter-bins:
456    $ref: /schemas/types.yaml#/definitions/uint32
457    description:
458      Number of multicast filter hash bins supported by this device
459      instance
460
461  snps,perfect-filter-entries:
462    $ref: /schemas/types.yaml#/definitions/uint32
463    description:
464      Number of perfect filter entries supported by this device
465      instance
466
467  snps,ps-speed:
468    $ref: /schemas/types.yaml#/definitions/uint32
469    description:
470      Port selection speed that can be passed to the core when PCS
471      is supported. For example, this is used in case of SGMII and
472      MAC2MAC connection.
473
474  snps,clk-csr:
475    $ref: /schemas/types.yaml#/definitions/uint32
476    description:
477      Frequency division factor for MDC clock.
478
479  mdio:
480    $ref: mdio.yaml#
481    unevaluatedProperties: false
482    description:
483      Creates and registers an MDIO bus.
484
485    properties:
486      compatible:
487        const: snps,dwmac-mdio
488
489    required:
490      - compatible
491
492  stmmac-axi-config:
493    type: object
494    unevaluatedProperties: false
495    description:
496      AXI BUS Mode parameters.
497
498    properties:
499      snps,lpi_en:
500        $ref: /schemas/types.yaml#/definitions/flag
501        description:
502          enable Low Power Interface
503
504      snps,xit_frm:
505        $ref: /schemas/types.yaml#/definitions/flag
506        description:
507          unlock on WoL
508
509      snps,wr_osr_lmt:
510        $ref: /schemas/types.yaml#/definitions/uint32
511        description:
512          max write outstanding req. limit
513
514      snps,rd_osr_lmt:
515        $ref: /schemas/types.yaml#/definitions/uint32
516        description:
517          max read outstanding req. limit
518
519      snps,kbbe:
520        $ref: /schemas/types.yaml#/definitions/uint32
521        description:
522          do not cross 1KiB boundary.
523
524      snps,blen:
525        $ref: /schemas/types.yaml#/definitions/uint32-array
526        description:
527          this is a vector of supported burst length.
528        minItems: 7
529        maxItems: 7
530
531      snps,fb:
532        $ref: /schemas/types.yaml#/definitions/flag
533        description:
534          fixed-burst
535
536      snps,mb:
537        $ref: /schemas/types.yaml#/definitions/flag
538        description:
539          mixed-burst
540
541      snps,rb:
542        $ref: /schemas/types.yaml#/definitions/flag
543        description:
544          rebuild INCRx Burst
545
546required:
547  - compatible
548  - reg
549  - interrupts
550  - interrupt-names
551  - phy-mode
552
553dependencies:
554  snps,reset-active-low: ["snps,reset-gpio"]
555  snps,reset-delay-us: ["snps,reset-gpio"]
556
557allOf:
558  - $ref: "ethernet-controller.yaml#"
559  - if:
560      properties:
561        compatible:
562          contains:
563            enum:
564              - allwinner,sun7i-a20-gmac
565              - allwinner,sun8i-a83t-emac
566              - allwinner,sun8i-h3-emac
567              - allwinner,sun8i-r40-gmac
568              - allwinner,sun8i-v3s-emac
569              - allwinner,sun50i-a64-emac
570              - ingenic,jz4775-mac
571              - ingenic,x1000-mac
572              - ingenic,x1600-mac
573              - ingenic,x1830-mac
574              - ingenic,x2000-mac
575              - snps,dwmac-3.50a
576              - snps,dwmac-4.10a
577              - snps,dwmac-4.20a
578              - snps,dwxgmac
579              - snps,dwxgmac-2.10
580              - st,spear600-gmac
581
582    then:
583      properties:
584        snps,pbl:
585          description:
586            Programmable Burst Length (tx and rx)
587          $ref: /schemas/types.yaml#/definitions/uint32
588          enum: [1, 2, 4, 8, 16, 32]
589
590        snps,txpbl:
591          description:
592            Tx Programmable Burst Length. If set, DMA tx will use this
593            value rather than snps,pbl.
594          $ref: /schemas/types.yaml#/definitions/uint32
595          enum: [1, 2, 4, 8, 16, 32]
596
597        snps,rxpbl:
598          description:
599            Rx Programmable Burst Length. If set, DMA rx will use this
600            value rather than snps,pbl.
601          $ref: /schemas/types.yaml#/definitions/uint32
602          enum: [1, 2, 4, 8, 16, 32]
603
604        snps,no-pbl-x8:
605          $ref: /schemas/types.yaml#/definitions/flag
606          description:
607            Don\'t multiply the pbl/txpbl/rxpbl values by 8. For core
608            rev < 3.50, don\'t multiply the values by 4.
609
610  - if:
611      properties:
612        compatible:
613          contains:
614            enum:
615              - allwinner,sun7i-a20-gmac
616              - allwinner,sun8i-a83t-emac
617              - allwinner,sun8i-h3-emac
618              - allwinner,sun8i-r40-gmac
619              - allwinner,sun8i-v3s-emac
620              - allwinner,sun50i-a64-emac
621              - loongson,ls2k-dwmac
622              - loongson,ls7a-dwmac
623              - ingenic,jz4775-mac
624              - ingenic,x1000-mac
625              - ingenic,x1600-mac
626              - ingenic,x1830-mac
627              - ingenic,x2000-mac
628              - snps,dwmac-4.00
629              - snps,dwmac-4.10a
630              - snps,dwmac-4.20a
631              - snps,dwmac-5.10a
632              - snps,dwxgmac
633              - snps,dwxgmac-2.10
634              - st,spear600-gmac
635
636    then:
637      properties:
638        snps,tso:
639          $ref: /schemas/types.yaml#/definitions/flag
640          description:
641            Enables the TSO feature otherwise it will be managed by
642            MAC HW capability register.
643
644additionalProperties: true
645
646examples:
647  - |
648    gmac0: ethernet@e0800000 {
649        compatible = "snps,dwxgmac-2.10", "snps,dwxgmac";
650        reg = <0xe0800000 0x8000>;
651        interrupt-parent = <&vic1>;
652        interrupts = <24 23 22>;
653        interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
654        mac-address = [000000000000]; /* Filled in by U-Boot */
655        max-frame-size = <3800>;
656        phy-mode = "gmii";
657        snps,multicast-filter-bins = <256>;
658        snps,perfect-filter-entries = <128>;
659        rx-fifo-depth = <16384>;
660        tx-fifo-depth = <16384>;
661        clocks = <&clock>;
662        clock-names = "stmmaceth";
663        snps,axi-config = <&stmmac_axi_setup>;
664        snps,mtl-rx-config = <&mtl_rx_setup>;
665        snps,mtl-tx-config = <&mtl_tx_setup>;
666
667        stmmac_axi_setup: stmmac-axi-config {
668            snps,wr_osr_lmt = <0xf>;
669            snps,rd_osr_lmt = <0xf>;
670            snps,blen = <256 128 64 32 0 0 0>;
671        };
672
673        mtl_rx_setup: rx-queues-config {
674            snps,rx-queues-to-use = <1>;
675            snps,rx-sched-sp;
676            queue0 {
677                snps,dcb-algorithm;
678                snps,map-to-dma-channel = <0x0>;
679                snps,priority = <0x0>;
680            };
681        };
682
683        mtl_tx_setup: tx-queues-config {
684            snps,tx-queues-to-use = <2>;
685            snps,tx-sched-wrr;
686            queue0 {
687                snps,weight = <0x10>;
688                snps,dcb-algorithm;
689                snps,priority = <0x0>;
690            };
691
692            queue1 {
693                snps,avb-algorithm;
694                snps,send_slope = <0x1000>;
695                snps,idle_slope = <0x1000>;
696                snps,high_credit = <0x3E800>;
697                snps,low_credit = <0xFFC18000>;
698                snps,priority = <0x1>;
699            };
700        };
701
702        mdio0 {
703            #address-cells = <1>;
704            #size-cells = <0>;
705            compatible = "snps,dwmac-mdio";
706            phy1: ethernet-phy@0 {
707                reg = <0>;
708            };
709        };
710    };
711
712# FIXME: We should set it, but it would report all the generic
713# properties as additional properties.
714# additionalProperties: false
715
716...
717