xref: /linux/Documentation/devicetree/bindings/net/snps,dwmac.yaml (revision 90d32e92011eaae8e70a9169b4e7acf4ca8f9d3a)
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,dwmac-5.20
34          - snps,dwxgmac
35          - snps,dwxgmac-2.10
36
37          # Deprecated
38          - st,spear600-gmac
39
40  required:
41    - compatible
42
43properties:
44
45  # We need to include all the compatibles from schemas that will
46  # include that schemas, otherwise compatible won't validate for
47  # those.
48  compatible:
49    contains:
50      enum:
51        - allwinner,sun7i-a20-gmac
52        - allwinner,sun8i-a83t-emac
53        - allwinner,sun8i-h3-emac
54        - allwinner,sun8i-r40-gmac
55        - allwinner,sun8i-v3s-emac
56        - allwinner,sun50i-a64-emac
57        - amlogic,meson6-dwmac
58        - amlogic,meson8b-dwmac
59        - amlogic,meson8m2-dwmac
60        - amlogic,meson-gxbb-dwmac
61        - amlogic,meson-axg-dwmac
62        - ingenic,jz4775-mac
63        - ingenic,x1000-mac
64        - ingenic,x1600-mac
65        - ingenic,x1830-mac
66        - ingenic,x2000-mac
67        - loongson,ls2k-dwmac
68        - loongson,ls7a-dwmac
69        - qcom,qcs404-ethqos
70        - qcom,sa8775p-ethqos
71        - qcom,sc8280xp-ethqos
72        - qcom,sm8150-ethqos
73        - renesas,r9a06g032-gmac
74        - renesas,rzn1-gmac
75        - rockchip,px30-gmac
76        - rockchip,rk3128-gmac
77        - rockchip,rk3228-gmac
78        - rockchip,rk3288-gmac
79        - rockchip,rk3328-gmac
80        - rockchip,rk3366-gmac
81        - rockchip,rk3368-gmac
82        - rockchip,rk3588-gmac
83        - rockchip,rk3399-gmac
84        - rockchip,rv1108-gmac
85        - snps,dwmac
86        - snps,dwmac-3.40a
87        - snps,dwmac-3.50a
88        - snps,dwmac-3.610
89        - snps,dwmac-3.70a
90        - snps,dwmac-3.710
91        - snps,dwmac-4.00
92        - snps,dwmac-4.10a
93        - snps,dwmac-4.20a
94        - snps,dwmac-5.10a
95        - snps,dwmac-5.20
96        - snps,dwxgmac
97        - snps,dwxgmac-2.10
98        - starfive,jh7100-dwmac
99        - starfive,jh7110-dwmac
100
101  reg:
102    minItems: 1
103    maxItems: 2
104
105  interrupts:
106    minItems: 1
107    items:
108      - description: Combined signal for various interrupt events
109      - description: The interrupt to manage the remote wake-up packet detection
110      - description: The interrupt that occurs when Rx exits the LPI state
111      - description: The interrupt that occurs when HW safety error triggered
112
113  interrupt-names:
114    minItems: 1
115    items:
116      - const: macirq
117      - enum: [eth_wake_irq, eth_lpi, sfty]
118      - enum: [eth_wake_irq, eth_lpi, sfty]
119      - enum: [eth_wake_irq, eth_lpi, sfty]
120
121  clocks:
122    minItems: 1
123    maxItems: 8
124    additionalItems: true
125    items:
126      - description: GMAC main clock
127      - description: Peripheral registers interface clock
128      - description:
129          PTP reference clock. This clock is used for programming the
130          Timestamp Addend Register. If not passed then the system
131          clock will be used and this is fine on some platforms.
132
133  clock-names:
134    minItems: 1
135    maxItems: 8
136    additionalItems: true
137    contains:
138      enum:
139        - stmmaceth
140        - pclk
141        - ptp_ref
142
143  resets:
144    minItems: 1
145    items:
146      - description: GMAC stmmaceth reset
147      - description: AHB reset
148
149  reset-names:
150    oneOf:
151      - items:
152          - enum: [stmmaceth, ahb]
153      - items:
154          - const: stmmaceth
155          - const: ahb
156
157  power-domains:
158    maxItems: 1
159
160  mac-mode:
161    $ref: ethernet-controller.yaml#/properties/phy-connection-type
162    description:
163      The property is identical to 'phy-mode', and assumes that there is mode
164      converter in-between the MAC & PHY (e.g. GMII-to-RGMII). This converter
165      can be passive (no SW requirement), and requires that the MAC operate
166      in a different mode than the PHY in order to function.
167
168  snps,axi-config:
169    $ref: /schemas/types.yaml#/definitions/phandle
170    description:
171      AXI BUS Mode parameters. Phandle to a node that can contain the
172      following properties
173        * snps,lpi_en, enable Low Power Interface
174        * snps,xit_frm, unlock on WoL
175        * snps,wr_osr_lmt, max write outstanding req. limit
176        * snps,rd_osr_lmt, max read outstanding req. limit
177        * snps,kbbe, do not cross 1KiB boundary.
178        * snps,blen, this is a vector of supported burst length.
179        * snps,fb, fixed-burst
180        * snps,mb, mixed-burst
181        * snps,rb, rebuild INCRx Burst
182
183  snps,mtl-rx-config:
184    $ref: /schemas/types.yaml#/definitions/phandle
185    description:
186      Multiple RX Queues parameters. Phandle to a node that
187      implements the 'rx-queues-config' object described in
188      this binding.
189
190  rx-queues-config:
191    type: object
192    properties:
193      snps,rx-queues-to-use:
194        $ref: /schemas/types.yaml#/definitions/uint32
195        description: number of RX queues to be used in the driver
196      snps,rx-sched-sp:
197        type: boolean
198        description: Strict priority
199      snps,rx-sched-wsp:
200        type: boolean
201        description: Weighted Strict priority
202    allOf:
203      - if:
204          required:
205            - snps,rx-sched-sp
206        then:
207          properties:
208            snps,rx-sched-wsp: false
209      - if:
210          required:
211            - snps,rx-sched-wsp
212        then:
213          properties:
214            snps,rx-sched-sp: false
215    patternProperties:
216      "^queue[0-9]$":
217        description: Each subnode represents a queue.
218        type: object
219        properties:
220          snps,dcb-algorithm:
221            type: boolean
222            description: Queue to be enabled as DCB
223          snps,avb-algorithm:
224            type: boolean
225            description: Queue to be enabled as AVB
226          snps,map-to-dma-channel:
227            $ref: /schemas/types.yaml#/definitions/uint32
228            description: DMA channel id to map
229          snps,route-avcp:
230            type: boolean
231            description: AV Untagged Control packets
232          snps,route-ptp:
233            type: boolean
234            description: PTP Packets
235          snps,route-dcbcp:
236            type: boolean
237            description: DCB Control Packets
238          snps,route-up:
239            type: boolean
240            description: Untagged Packets
241          snps,route-multi-broad:
242            type: boolean
243            description: Multicast & Broadcast Packets
244          snps,priority:
245            $ref: /schemas/types.yaml#/definitions/uint32-array
246            maxItems: 1
247            description: Bitmask of the tagged frames priorities assigned to the queue
248        allOf:
249          - if:
250              required:
251                - snps,dcb-algorithm
252            then:
253              properties:
254                snps,avb-algorithm: false
255          - if:
256              required:
257                - snps,avb-algorithm
258            then:
259              properties:
260                snps,dcb-algorithm: false
261          - if:
262              required:
263                - snps,route-avcp
264            then:
265              properties:
266                snps,route-ptp: false
267                snps,route-dcbcp: false
268                snps,route-up: false
269                snps,route-multi-broad: false
270          - if:
271              required:
272                - snps,route-ptp
273            then:
274              properties:
275                snps,route-avcp: false
276                snps,route-dcbcp: false
277                snps,route-up: false
278                snps,route-multi-broad: false
279          - if:
280              required:
281                - snps,route-dcbcp
282            then:
283              properties:
284                snps,route-avcp: false
285                snps,route-ptp: false
286                snps,route-up: false
287                snps,route-multi-broad: false
288          - if:
289              required:
290                - snps,route-up
291            then:
292              properties:
293                snps,route-avcp: false
294                snps,route-ptp: false
295                snps,route-dcbcp: false
296                snps,route-multi-broad: false
297          - if:
298              required:
299                - snps,route-multi-broad
300            then:
301              properties:
302                snps,route-avcp: false
303                snps,route-ptp: false
304                snps,route-dcbcp: false
305                snps,route-up: false
306        additionalProperties: false
307    additionalProperties: false
308
309  snps,mtl-tx-config:
310    $ref: /schemas/types.yaml#/definitions/phandle
311    description:
312      Multiple TX Queues parameters. Phandle to a node that
313      implements the 'tx-queues-config' object described in
314      this binding.
315
316  tx-queues-config:
317    type: object
318    properties:
319      snps,tx-queues-to-use:
320        $ref: /schemas/types.yaml#/definitions/uint32
321        description: number of TX queues to be used in the driver
322      snps,tx-sched-wrr:
323        type: boolean
324        description: Weighted Round Robin
325      snps,tx-sched-wfq:
326        type: boolean
327        description: Weighted Fair Queuing
328      snps,tx-sched-dwrr:
329        type: boolean
330        description: Deficit Weighted Round Robin
331    allOf:
332      - if:
333          required:
334            - snps,tx-sched-wrr
335        then:
336          properties:
337            snps,tx-sched-wfq: false
338            snps,tx-sched-dwrr: false
339      - if:
340          required:
341            - snps,tx-sched-wfq
342        then:
343          properties:
344            snps,tx-sched-wrr: false
345            snps,tx-sched-dwrr: false
346      - if:
347          required:
348            - snps,tx-sched-dwrr
349        then:
350          properties:
351            snps,tx-sched-wrr: false
352            snps,tx-sched-wfq: false
353    patternProperties:
354      "^queue[0-9]$":
355        description: Each subnode represents a queue.
356        type: object
357        properties:
358          snps,weight:
359            $ref: /schemas/types.yaml#/definitions/uint32
360            description: TX queue weight (if using a DCB weight algorithm)
361          snps,dcb-algorithm:
362            type: boolean
363            description: TX queue will be working in DCB
364          snps,avb-algorithm:
365            type: boolean
366            description:
367              TX queue will be working in AVB.
368              Queue 0 is reserved for legacy traffic and so no AVB is
369              available in this queue.
370          snps,send_slope:
371            $ref: /schemas/types.yaml#/definitions/uint32
372            description: enable Low Power Interface
373          snps,idle_slope:
374            $ref: /schemas/types.yaml#/definitions/uint32
375            description: unlock on WoL
376          snps,high_credit:
377            $ref: /schemas/types.yaml#/definitions/uint32
378            description: max write outstanding req. limit
379          snps,low_credit:
380            $ref: /schemas/types.yaml#/definitions/uint32
381            description: max read outstanding req. limit
382          snps,priority:
383            $ref: /schemas/types.yaml#/definitions/uint32-array
384            maxItems: 1
385            description:
386              Bitmask of the tagged frames priorities assigned to the queue.
387              When a PFC frame is received with priorities matching the bitmask,
388              the queue is blocked from transmitting for the pause time specified
389              in the PFC frame.
390
391          snps,coe-unsupported:
392            type: boolean
393            description: TX checksum offload is unsupported by the TX queue.
394
395        allOf:
396          - if:
397              required:
398                - snps,dcb-algorithm
399            then:
400              properties:
401                snps,avb-algorithm: false
402          - if:
403              required:
404                - snps,avb-algorithm
405            then:
406              properties:
407                snps,dcb-algorithm: false
408                snps,weight: false
409        additionalProperties: false
410    additionalProperties: false
411
412  snps,reset-gpio:
413    deprecated: true
414    maxItems: 1
415    description:
416      PHY Reset GPIO
417
418  snps,reset-active-low:
419    deprecated: true
420    $ref: /schemas/types.yaml#/definitions/flag
421    description:
422      Indicates that the PHY Reset is active low
423
424  snps,reset-delays-us:
425    deprecated: true
426    description:
427      Triplet of delays. The 1st cell is reset pre-delay in micro
428      seconds. The 2nd cell is reset pulse in micro seconds. The 3rd
429      cell is reset post-delay in micro seconds.
430    minItems: 3
431    maxItems: 3
432
433  snps,aal:
434    $ref: /schemas/types.yaml#/definitions/flag
435    description:
436      Use Address-Aligned Beats
437
438  snps,fixed-burst:
439    $ref: /schemas/types.yaml#/definitions/flag
440    description:
441      Program the DMA to use the fixed burst mode
442
443  snps,mixed-burst:
444    $ref: /schemas/types.yaml#/definitions/flag
445    description:
446      Program the DMA to use the mixed burst mode
447
448  snps,force_thresh_dma_mode:
449    $ref: /schemas/types.yaml#/definitions/flag
450    description:
451      Force DMA to use the threshold mode for both tx and rx
452
453  snps,force_sf_dma_mode:
454    $ref: /schemas/types.yaml#/definitions/flag
455    description:
456      Force DMA to use the Store and Forward mode for both tx and
457      rx. This flag is ignored if force_thresh_dma_mode is set.
458
459  snps,en-tx-lpi-clockgating:
460    $ref: /schemas/types.yaml#/definitions/flag
461    description:
462      Enable gating of the MAC TX clock during TX low-power mode
463
464  snps,multicast-filter-bins:
465    $ref: /schemas/types.yaml#/definitions/uint32
466    description:
467      Number of multicast filter hash bins supported by this device
468      instance
469
470  snps,perfect-filter-entries:
471    $ref: /schemas/types.yaml#/definitions/uint32
472    description:
473      Number of perfect filter entries supported by this device
474      instance
475
476  snps,ps-speed:
477    $ref: /schemas/types.yaml#/definitions/uint32
478    description:
479      Port selection speed that can be passed to the core when PCS
480      is supported. For example, this is used in case of SGMII and
481      MAC2MAC connection.
482
483  snps,clk-csr:
484    $ref: /schemas/types.yaml#/definitions/uint32
485    description:
486      Frequency division factor for MDC clock.
487
488  mdio:
489    $ref: mdio.yaml#
490    unevaluatedProperties: false
491    description:
492      Creates and registers an MDIO bus.
493
494    properties:
495      compatible:
496        const: snps,dwmac-mdio
497
498    required:
499      - compatible
500
501  stmmac-axi-config:
502    type: object
503    unevaluatedProperties: false
504    description:
505      AXI BUS Mode parameters.
506
507    properties:
508      snps,lpi_en:
509        $ref: /schemas/types.yaml#/definitions/flag
510        description:
511          enable Low Power Interface
512
513      snps,xit_frm:
514        $ref: /schemas/types.yaml#/definitions/flag
515        description:
516          unlock on WoL
517
518      snps,wr_osr_lmt:
519        $ref: /schemas/types.yaml#/definitions/uint32
520        description:
521          max write outstanding req. limit
522
523      snps,rd_osr_lmt:
524        $ref: /schemas/types.yaml#/definitions/uint32
525        description:
526          max read outstanding req. limit
527
528      snps,kbbe:
529        $ref: /schemas/types.yaml#/definitions/uint32
530        description:
531          do not cross 1KiB boundary.
532
533      snps,blen:
534        $ref: /schemas/types.yaml#/definitions/uint32-array
535        description:
536          this is a vector of supported burst length.
537        minItems: 7
538        maxItems: 7
539
540      snps,fb:
541        $ref: /schemas/types.yaml#/definitions/flag
542        description:
543          fixed-burst
544
545      snps,mb:
546        $ref: /schemas/types.yaml#/definitions/flag
547        description:
548          mixed-burst
549
550      snps,rb:
551        $ref: /schemas/types.yaml#/definitions/flag
552        description:
553          rebuild INCRx Burst
554
555required:
556  - compatible
557  - reg
558  - interrupts
559  - interrupt-names
560  - phy-mode
561
562dependencies:
563  snps,reset-active-low: ["snps,reset-gpio"]
564  snps,reset-delays-us: ["snps,reset-gpio"]
565
566allOf:
567  - $ref: ethernet-controller.yaml#
568  - if:
569      properties:
570        compatible:
571          contains:
572            enum:
573              - allwinner,sun7i-a20-gmac
574              - allwinner,sun8i-a83t-emac
575              - allwinner,sun8i-h3-emac
576              - allwinner,sun8i-r40-gmac
577              - allwinner,sun8i-v3s-emac
578              - allwinner,sun50i-a64-emac
579              - ingenic,jz4775-mac
580              - ingenic,x1000-mac
581              - ingenic,x1600-mac
582              - ingenic,x1830-mac
583              - ingenic,x2000-mac
584              - qcom,sa8775p-ethqos
585              - qcom,sc8280xp-ethqos
586              - snps,dwmac-3.50a
587              - snps,dwmac-4.10a
588              - snps,dwmac-4.20a
589              - snps,dwmac-5.20
590              - snps,dwxgmac
591              - snps,dwxgmac-2.10
592              - st,spear600-gmac
593
594    then:
595      properties:
596        snps,pbl:
597          description:
598            Programmable Burst Length (tx and rx)
599          $ref: /schemas/types.yaml#/definitions/uint32
600          enum: [1, 2, 4, 8, 16, 32]
601
602        snps,txpbl:
603          description:
604            Tx Programmable Burst Length. If set, DMA tx will use this
605            value rather than snps,pbl.
606          $ref: /schemas/types.yaml#/definitions/uint32
607          enum: [1, 2, 4, 8, 16, 32]
608
609        snps,rxpbl:
610          description:
611            Rx Programmable Burst Length. If set, DMA rx will use this
612            value rather than snps,pbl.
613          $ref: /schemas/types.yaml#/definitions/uint32
614          enum: [1, 2, 4, 8, 16, 32]
615
616        snps,no-pbl-x8:
617          $ref: /schemas/types.yaml#/definitions/flag
618          description:
619            Don\'t multiply the pbl/txpbl/rxpbl values by 8. For core
620            rev < 3.50, don\'t multiply the values by 4.
621
622  - if:
623      properties:
624        compatible:
625          contains:
626            enum:
627              - allwinner,sun7i-a20-gmac
628              - allwinner,sun8i-a83t-emac
629              - allwinner,sun8i-h3-emac
630              - allwinner,sun8i-r40-gmac
631              - allwinner,sun8i-v3s-emac
632              - allwinner,sun50i-a64-emac
633              - loongson,ls2k-dwmac
634              - loongson,ls7a-dwmac
635              - ingenic,jz4775-mac
636              - ingenic,x1000-mac
637              - ingenic,x1600-mac
638              - ingenic,x1830-mac
639              - ingenic,x2000-mac
640              - qcom,qcs404-ethqos
641              - qcom,sa8775p-ethqos
642              - qcom,sc8280xp-ethqos
643              - qcom,sm8150-ethqos
644              - snps,dwmac-4.00
645              - snps,dwmac-4.10a
646              - snps,dwmac-4.20a
647              - snps,dwmac-5.10a
648              - snps,dwmac-5.20
649              - snps,dwxgmac
650              - snps,dwxgmac-2.10
651              - st,spear600-gmac
652
653    then:
654      properties:
655        snps,tso:
656          $ref: /schemas/types.yaml#/definitions/flag
657          description:
658            Enables the TSO feature otherwise it will be managed by
659            MAC HW capability register.
660
661additionalProperties: true
662
663examples:
664  - |
665    gmac0: ethernet@e0800000 {
666        compatible = "snps,dwxgmac-2.10", "snps,dwxgmac";
667        reg = <0xe0800000 0x8000>;
668        interrupt-parent = <&vic1>;
669        interrupts = <24 23 22>;
670        interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
671        mac-address = [000000000000]; /* Filled in by U-Boot */
672        max-frame-size = <3800>;
673        phy-mode = "gmii";
674        snps,multicast-filter-bins = <256>;
675        snps,perfect-filter-entries = <128>;
676        rx-fifo-depth = <16384>;
677        tx-fifo-depth = <16384>;
678        clocks = <&clock>;
679        clock-names = "stmmaceth";
680        snps,axi-config = <&stmmac_axi_setup>;
681        snps,mtl-rx-config = <&mtl_rx_setup>;
682        snps,mtl-tx-config = <&mtl_tx_setup>;
683
684        stmmac_axi_setup: stmmac-axi-config {
685            snps,wr_osr_lmt = <0xf>;
686            snps,rd_osr_lmt = <0xf>;
687            snps,blen = <256 128 64 32 0 0 0>;
688        };
689
690        mtl_rx_setup: rx-queues-config {
691            snps,rx-queues-to-use = <1>;
692            snps,rx-sched-sp;
693            queue0 {
694                snps,dcb-algorithm;
695                snps,map-to-dma-channel = <0x0>;
696                snps,priority = <0x0>;
697            };
698        };
699
700        mtl_tx_setup: tx-queues-config {
701            snps,tx-queues-to-use = <2>;
702            snps,tx-sched-wrr;
703            queue0 {
704                snps,weight = <0x10>;
705                snps,dcb-algorithm;
706                snps,priority = <0x0>;
707            };
708
709            queue1 {
710                snps,avb-algorithm;
711                snps,send_slope = <0x1000>;
712                snps,idle_slope = <0x1000>;
713                snps,high_credit = <0x3E800>;
714                snps,low_credit = <0xFFC18000>;
715                snps,priority = <0x1>;
716            };
717        };
718
719        mdio0 {
720            #address-cells = <1>;
721            #size-cells = <0>;
722            compatible = "snps,dwmac-mdio";
723            phy1: ethernet-phy@0 {
724                reg = <0>;
725            };
726        };
727    };
728
729# FIXME: We should set it, but it would report all the generic
730# properties as additional properties.
731# additionalProperties: false
732
733...
734