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