1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/net/mediatek,net.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: MediaTek Frame Engine Ethernet controller 8 9maintainers: 10 - Lorenzo Bianconi <lorenzo@kernel.org> 11 - Felix Fietkau <nbd@nbd.name> 12 13description: 14 The frame engine ethernet controller can be found on MediaTek SoCs. These SoCs 15 have dual GMAC ports. 16 17properties: 18 compatible: 19 enum: 20 - mediatek,mt2701-eth 21 - mediatek,mt7623-eth 22 - mediatek,mt7622-eth 23 - mediatek,mt7629-eth 24 - mediatek,mt7986-eth 25 - ralink,rt5350-eth 26 27 reg: 28 maxItems: 1 29 30 clocks: true 31 clock-names: true 32 33 interrupts: 34 minItems: 3 35 maxItems: 4 36 37 power-domains: 38 maxItems: 1 39 40 resets: 41 maxItems: 3 42 43 reset-names: 44 items: 45 - const: fe 46 - const: gmac 47 - const: ppe 48 49 mediatek,ethsys: 50 $ref: /schemas/types.yaml#/definitions/phandle 51 description: 52 Phandle to the syscon node that handles the port setup. 53 54 cci-control-port: true 55 56 mediatek,hifsys: 57 $ref: /schemas/types.yaml#/definitions/phandle 58 description: 59 Phandle to the mediatek hifsys controller used to provide various clocks 60 and reset to the system. 61 62 mediatek,sgmiisys: 63 $ref: /schemas/types.yaml#/definitions/phandle-array 64 minItems: 1 65 maxItems: 2 66 items: 67 maxItems: 1 68 description: 69 A list of phandle to the syscon node that handles the SGMII setup which is required for 70 those SoCs equipped with SGMII. 71 72 mediatek,wed: 73 $ref: /schemas/types.yaml#/definitions/phandle-array 74 minItems: 2 75 maxItems: 2 76 items: 77 maxItems: 1 78 description: 79 List of phandles to wireless ethernet dispatch nodes. 80 81 dma-coherent: true 82 83 mdio-bus: 84 $ref: mdio.yaml# 85 unevaluatedProperties: false 86 87 "#address-cells": 88 const: 1 89 90 "#size-cells": 91 const: 0 92 93allOf: 94 - $ref: "ethernet-controller.yaml#" 95 - if: 96 properties: 97 compatible: 98 contains: 99 enum: 100 - mediatek,mt2701-eth 101 - mediatek,mt7623-eth 102 then: 103 properties: 104 interrupts: 105 maxItems: 3 106 107 clocks: 108 minItems: 4 109 maxItems: 4 110 111 clock-names: 112 items: 113 - const: ethif 114 - const: esw 115 - const: gp1 116 - const: gp2 117 118 mediatek,pctl: 119 $ref: /schemas/types.yaml#/definitions/phandle 120 description: 121 Phandle to the syscon node that handles the ports slew rate and 122 driver current. 123 124 mediatek,wed: false 125 126 - if: 127 properties: 128 compatible: 129 contains: 130 const: mediatek,mt7622-eth 131 then: 132 properties: 133 interrupts: 134 maxItems: 3 135 136 clocks: 137 minItems: 11 138 maxItems: 11 139 140 clock-names: 141 items: 142 - const: ethif 143 - const: esw 144 - const: gp0 145 - const: gp1 146 - const: gp2 147 - const: sgmii_tx250m 148 - const: sgmii_rx250m 149 - const: sgmii_cdr_ref 150 - const: sgmii_cdr_fb 151 - const: sgmii_ck 152 - const: eth2pll 153 154 mediatek,sgmiisys: 155 minItems: 1 156 maxItems: 1 157 158 mediatek,pcie-mirror: 159 $ref: /schemas/types.yaml#/definitions/phandle 160 description: 161 Phandle to the mediatek pcie-mirror controller. 162 163 - if: 164 properties: 165 compatible: 166 contains: 167 const: mediatek,mt7629-eth 168 then: 169 properties: 170 interrupts: 171 maxItems: 3 172 173 clocks: 174 minItems: 17 175 maxItems: 17 176 177 clock-names: 178 items: 179 - const: ethif 180 - const: sgmiitop 181 - const: esw 182 - const: gp0 183 - const: gp1 184 - const: gp2 185 - const: fe 186 - const: sgmii_tx250m 187 - const: sgmii_rx250m 188 - const: sgmii_cdr_ref 189 - const: sgmii_cdr_fb 190 - const: sgmii2_tx250m 191 - const: sgmii2_rx250m 192 - const: sgmii2_cdr_ref 193 - const: sgmii2_cdr_fb 194 - const: sgmii_ck 195 - const: eth2pll 196 197 mediatek,infracfg: 198 $ref: /schemas/types.yaml#/definitions/phandle 199 description: 200 Phandle to the syscon node that handles the path from GMAC to 201 PHY variants. 202 203 mediatek,sgmiisys: 204 minItems: 2 205 maxItems: 2 206 207 mediatek,wed: false 208 209 - if: 210 properties: 211 compatible: 212 contains: 213 const: mediatek,mt7986-eth 214 then: 215 properties: 216 interrupts: 217 minItems: 4 218 219 clocks: 220 minItems: 15 221 maxItems: 15 222 223 clock-names: 224 items: 225 - const: fe 226 - const: gp2 227 - const: gp1 228 - const: wocpu1 229 - const: wocpu0 230 - const: sgmii_tx250m 231 - const: sgmii_rx250m 232 - const: sgmii_cdr_ref 233 - const: sgmii_cdr_fb 234 - const: sgmii2_tx250m 235 - const: sgmii2_rx250m 236 - const: sgmii2_cdr_ref 237 - const: sgmii2_cdr_fb 238 - const: netsys0 239 - const: netsys1 240 241 mediatek,sgmiisys: 242 minItems: 2 243 maxItems: 2 244 245 mediatek,wed-pcie: 246 $ref: /schemas/types.yaml#/definitions/phandle 247 description: 248 Phandle to the mediatek wed-pcie controller. 249 250patternProperties: 251 "^mac@[0-1]$": 252 type: object 253 additionalProperties: false 254 allOf: 255 - $ref: ethernet-controller.yaml# 256 description: 257 Ethernet MAC node 258 properties: 259 compatible: 260 const: mediatek,eth-mac 261 262 reg: 263 maxItems: 1 264 265 phy-handle: true 266 267 phy-mode: true 268 269 required: 270 - reg 271 - compatible 272 - phy-handle 273 274required: 275 - compatible 276 - reg 277 - interrupts 278 - clocks 279 - clock-names 280 - mediatek,ethsys 281 282unevaluatedProperties: false 283 284examples: 285 - | 286 #include <dt-bindings/interrupt-controller/arm-gic.h> 287 #include <dt-bindings/interrupt-controller/irq.h> 288 #include <dt-bindings/clock/mt7622-clk.h> 289 #include <dt-bindings/power/mt7622-power.h> 290 291 soc { 292 #address-cells = <2>; 293 #size-cells = <2>; 294 295 ethernet: ethernet@1b100000 { 296 compatible = "mediatek,mt7622-eth"; 297 reg = <0 0x1b100000 0 0x20000>; 298 interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_LOW>, 299 <GIC_SPI 224 IRQ_TYPE_LEVEL_LOW>, 300 <GIC_SPI 225 IRQ_TYPE_LEVEL_LOW>; 301 clocks = <&topckgen CLK_TOP_ETH_SEL>, 302 <ðsys CLK_ETH_ESW_EN>, 303 <ðsys CLK_ETH_GP0_EN>, 304 <ðsys CLK_ETH_GP1_EN>, 305 <ðsys CLK_ETH_GP2_EN>, 306 <&sgmiisys CLK_SGMII_TX250M_EN>, 307 <&sgmiisys CLK_SGMII_RX250M_EN>, 308 <&sgmiisys CLK_SGMII_CDR_REF>, 309 <&sgmiisys CLK_SGMII_CDR_FB>, 310 <&topckgen CLK_TOP_SGMIIPLL>, 311 <&apmixedsys CLK_APMIXED_ETH2PLL>; 312 clock-names = "ethif", "esw", "gp0", "gp1", "gp2", 313 "sgmii_tx250m", "sgmii_rx250m", 314 "sgmii_cdr_ref", "sgmii_cdr_fb", "sgmii_ck", 315 "eth2pll"; 316 power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>; 317 mediatek,ethsys = <ðsys>; 318 mediatek,sgmiisys = <&sgmiisys>; 319 cci-control-port = <&cci_control2>; 320 mediatek,pcie-mirror = <&pcie_mirror>; 321 mediatek,hifsys = <&hifsys>; 322 dma-coherent; 323 324 #address-cells = <1>; 325 #size-cells = <0>; 326 327 mdio0: mdio-bus { 328 #address-cells = <1>; 329 #size-cells = <0>; 330 331 phy0: ethernet-phy@0 { 332 reg = <0>; 333 }; 334 335 phy1: ethernet-phy@1 { 336 reg = <1>; 337 }; 338 }; 339 340 gmac0: mac@0 { 341 compatible = "mediatek,eth-mac"; 342 phy-mode = "rgmii"; 343 phy-handle = <&phy0>; 344 reg = <0>; 345 }; 346 347 gmac1: mac@1 { 348 compatible = "mediatek,eth-mac"; 349 phy-mode = "rgmii"; 350 phy-handle = <&phy1>; 351 reg = <1>; 352 }; 353 }; 354 }; 355 356 - | 357 #include <dt-bindings/interrupt-controller/arm-gic.h> 358 #include <dt-bindings/interrupt-controller/irq.h> 359 #include <dt-bindings/clock/mt7622-clk.h> 360 361 soc { 362 #address-cells = <2>; 363 #size-cells = <2>; 364 365 eth: ethernet@15100000 { 366 #define CLK_ETH_FE_EN 0 367 #define CLK_ETH_WOCPU1_EN 3 368 #define CLK_ETH_WOCPU0_EN 4 369 #define CLK_TOP_NETSYS_SEL 43 370 #define CLK_TOP_NETSYS_500M_SEL 44 371 #define CLK_TOP_NETSYS_2X_SEL 46 372 #define CLK_TOP_SGM_325M_SEL 47 373 #define CLK_APMIXED_NET2PLL 1 374 #define CLK_APMIXED_SGMPLL 3 375 376 compatible = "mediatek,mt7986-eth"; 377 reg = <0 0x15100000 0 0x80000>; 378 interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>, 379 <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>, 380 <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>, 381 <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH>; 382 clocks = <ðsys CLK_ETH_FE_EN>, 383 <ðsys CLK_ETH_GP2_EN>, 384 <ðsys CLK_ETH_GP1_EN>, 385 <ðsys CLK_ETH_WOCPU1_EN>, 386 <ðsys CLK_ETH_WOCPU0_EN>, 387 <&sgmiisys0 CLK_SGMII_TX250M_EN>, 388 <&sgmiisys0 CLK_SGMII_RX250M_EN>, 389 <&sgmiisys0 CLK_SGMII_CDR_REF>, 390 <&sgmiisys0 CLK_SGMII_CDR_FB>, 391 <&sgmiisys1 CLK_SGMII_TX250M_EN>, 392 <&sgmiisys1 CLK_SGMII_RX250M_EN>, 393 <&sgmiisys1 CLK_SGMII_CDR_REF>, 394 <&sgmiisys1 CLK_SGMII_CDR_FB>, 395 <&topckgen CLK_TOP_NETSYS_SEL>, 396 <&topckgen CLK_TOP_NETSYS_SEL>; 397 clock-names = "fe", "gp2", "gp1", "wocpu1", "wocpu0", 398 "sgmii_tx250m", "sgmii_rx250m", 399 "sgmii_cdr_ref", "sgmii_cdr_fb", 400 "sgmii2_tx250m", "sgmii2_rx250m", 401 "sgmii2_cdr_ref", "sgmii2_cdr_fb", 402 "netsys0", "netsys1"; 403 mediatek,ethsys = <ðsys>; 404 mediatek,sgmiisys = <&sgmiisys0>, <&sgmiisys1>; 405 assigned-clocks = <&topckgen CLK_TOP_NETSYS_2X_SEL>, 406 <&topckgen CLK_TOP_SGM_325M_SEL>; 407 assigned-clock-parents = <&apmixedsys CLK_APMIXED_NET2PLL>, 408 <&apmixedsys CLK_APMIXED_SGMPLL>; 409 410 #address-cells = <1>; 411 #size-cells = <0>; 412 413 mdio: mdio-bus { 414 #address-cells = <1>; 415 #size-cells = <0>; 416 417 phy5: ethernet-phy@0 { 418 compatible = "ethernet-phy-id67c9.de0a"; 419 phy-mode = "2500base-x"; 420 reset-gpios = <&pio 6 1>; 421 reset-deassert-us = <20000>; 422 reg = <5>; 423 }; 424 425 phy6: ethernet-phy@1 { 426 compatible = "ethernet-phy-id67c9.de0a"; 427 phy-mode = "2500base-x"; 428 reg = <6>; 429 }; 430 }; 431 432 mac0: mac@0 { 433 compatible = "mediatek,eth-mac"; 434 phy-mode = "2500base-x"; 435 phy-handle = <&phy5>; 436 reg = <0>; 437 }; 438 439 mac1: mac@1 { 440 compatible = "mediatek,eth-mac"; 441 phy-mode = "2500base-x"; 442 phy-handle = <&phy6>; 443 reg = <1>; 444 }; 445 }; 446 }; 447