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@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  mdio:
293    $ref: mdio.yaml#
294    unevaluatedProperties: false
295    description:
296      Creates and registers an MDIO bus.
297
298    properties:
299      compatible:
300        const: snps,dwmac-mdio
301
302    required:
303      - compatible
304
305required:
306  - compatible
307  - reg
308  - interrupts
309  - interrupt-names
310  - phy-mode
311
312dependencies:
313  snps,reset-active-low: ["snps,reset-gpio"]
314  snps,reset-delay-us: ["snps,reset-gpio"]
315
316allOf:
317  - $ref: "ethernet-controller.yaml#"
318  - if:
319      properties:
320        compatible:
321          contains:
322            enum:
323              - allwinner,sun7i-a20-gmac
324              - allwinner,sun8i-a83t-emac
325              - allwinner,sun8i-h3-emac
326              - allwinner,sun8i-r40-gmac
327              - allwinner,sun8i-v3s-emac
328              - allwinner,sun50i-a64-emac
329              - ingenic,jz4775-mac
330              - ingenic,x1000-mac
331              - ingenic,x1600-mac
332              - ingenic,x1830-mac
333              - ingenic,x2000-mac
334              - snps,dwmac-3.50a
335              - snps,dwmac-4.10a
336              - snps,dwmac-4.20a
337              - snps,dwxgmac
338              - snps,dwxgmac-2.10
339              - st,spear600-gmac
340
341    then:
342      properties:
343        snps,pbl:
344          description:
345            Programmable Burst Length (tx and rx)
346          $ref: /schemas/types.yaml#/definitions/uint32
347          enum: [1, 2, 4, 8, 16, 32]
348
349        snps,txpbl:
350          description:
351            Tx Programmable Burst Length. If set, DMA tx will use this
352            value rather than snps,pbl.
353          $ref: /schemas/types.yaml#/definitions/uint32
354          enum: [1, 2, 4, 8, 16, 32]
355
356        snps,rxpbl:
357          description:
358            Rx Programmable Burst Length. If set, DMA rx will use this
359            value rather than snps,pbl.
360          $ref: /schemas/types.yaml#/definitions/uint32
361          enum: [1, 2, 4, 8, 16, 32]
362
363        snps,no-pbl-x8:
364          $ref: /schemas/types.yaml#/definitions/flag
365          description:
366            Don\'t multiply the pbl/txpbl/rxpbl values by 8. For core
367            rev < 3.50, don\'t multiply the values by 4.
368
369  - if:
370      properties:
371        compatible:
372          contains:
373            enum:
374              - allwinner,sun7i-a20-gmac
375              - allwinner,sun8i-a83t-emac
376              - allwinner,sun8i-h3-emac
377              - allwinner,sun8i-r40-gmac
378              - allwinner,sun8i-v3s-emac
379              - allwinner,sun50i-a64-emac
380              - loongson,ls2k-dwmac
381              - loongson,ls7a-dwmac
382              - ingenic,jz4775-mac
383              - ingenic,x1000-mac
384              - ingenic,x1600-mac
385              - ingenic,x1830-mac
386              - ingenic,x2000-mac
387              - snps,dwmac-4.00
388              - snps,dwmac-4.10a
389              - snps,dwmac-4.20a
390              - snps,dwmac-5.10a
391              - snps,dwxgmac
392              - snps,dwxgmac-2.10
393              - st,spear600-gmac
394
395    then:
396      properties:
397        snps,tso:
398          $ref: /schemas/types.yaml#/definitions/flag
399          description:
400            Enables the TSO feature otherwise it will be managed by
401            MAC HW capability register.
402
403additionalProperties: true
404
405examples:
406  - |
407    stmmac_axi_setup: stmmac-axi-config {
408        snps,wr_osr_lmt = <0xf>;
409        snps,rd_osr_lmt = <0xf>;
410        snps,blen = <256 128 64 32 0 0 0>;
411    };
412
413    mtl_rx_setup: rx-queues-config {
414        snps,rx-queues-to-use = <1>;
415        snps,rx-sched-sp;
416        queue0 {
417            snps,dcb-algorithm;
418            snps,map-to-dma-channel = <0x0>;
419            snps,priority = <0x0>;
420        };
421    };
422
423    mtl_tx_setup: tx-queues-config {
424        snps,tx-queues-to-use = <2>;
425        snps,tx-sched-wrr;
426        queue0 {
427            snps,weight = <0x10>;
428            snps,dcb-algorithm;
429            snps,priority = <0x0>;
430        };
431
432        queue1 {
433            snps,avb-algorithm;
434            snps,send_slope = <0x1000>;
435            snps,idle_slope = <0x1000>;
436            snps,high_credit = <0x3E800>;
437            snps,low_credit = <0xFFC18000>;
438            snps,priority = <0x1>;
439        };
440    };
441
442    gmac0: ethernet@e0800000 {
443        compatible = "snps,dwxgmac-2.10", "snps,dwxgmac";
444        reg = <0xe0800000 0x8000>;
445        interrupt-parent = <&vic1>;
446        interrupts = <24 23 22>;
447        interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
448        mac-address = [000000000000]; /* Filled in by U-Boot */
449        max-frame-size = <3800>;
450        phy-mode = "gmii";
451        snps,multicast-filter-bins = <256>;
452        snps,perfect-filter-entries = <128>;
453        rx-fifo-depth = <16384>;
454        tx-fifo-depth = <16384>;
455        clocks = <&clock>;
456        clock-names = "stmmaceth";
457        snps,axi-config = <&stmmac_axi_setup>;
458        snps,mtl-rx-config = <&mtl_rx_setup>;
459        snps,mtl-tx-config = <&mtl_tx_setup>;
460        mdio0 {
461            #address-cells = <1>;
462            #size-cells = <0>;
463            compatible = "snps,dwmac-mdio";
464            phy1: ethernet-phy@0 {
465                reg = <0>;
466            };
467        };
468    };
469
470# FIXME: We should set it, but it would report all the generic
471# properties as additional properties.
472# additionalProperties: false
473
474...
475