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