Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: STi: STiH415: Add ethernet support.

This patch adds support to STiH415 SOC, which has two ethernet
snps,dwmac controllers version 3.610. With this patch B2000 and B2020
boards can boot with ethernet in MII and RGMII modes.

Tested on both B2020 and B2000.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@st.com>

+218
+14
arch/arm/boot/dts/stih415-clock.dtsi
··· 34 34 compatible = "fixed-clock"; 35 35 clock-frequency = <100000000>; 36 36 }; 37 + 38 + CLKS_GMAC0_PHY: clockgenA1@7 { 39 + #clock-cells = <0>; 40 + compatible = "fixed-clock"; 41 + clock-frequency = <25000000>; 42 + clock-output-names = "CLKS_GMAC0_PHY"; 43 + }; 44 + 45 + CLKS_ETH1_PHY: clockgenA0@7 { 46 + #clock-cells = <0>; 47 + compatible = "fixed-clock"; 48 + clock-frequency = <25000000>; 49 + clock-output-names = "CLKS_ETH1_PHY"; 50 + }; 37 51 }; 38 52 };
+121
arch/arm/boot/dts/stih415-pinctrl.dtsi
··· 119 119 }; 120 120 }; 121 121 }; 122 + 123 + gmac1 { 124 + pinctrl_mii1: mii1 { 125 + st,pins { 126 + txd0 = <&PIO0 0 ALT1 OUT SE_NICLK_IO 0 CLK_A>; 127 + txd1 = <&PIO0 1 ALT1 OUT SE_NICLK_IO 0 CLK_A>; 128 + txd2 = <&PIO0 2 ALT1 OUT SE_NICLK_IO 0 CLK_A>; 129 + txd3 = <&PIO0 3 ALT1 OUT SE_NICLK_IO 0 CLK_A>; 130 + txer = <&PIO0 4 ALT1 OUT SE_NICLK_IO 0 CLK_A>; 131 + txen = <&PIO0 5 ALT1 OUT SE_NICLK_IO 0 CLK_A>; 132 + txclk = <&PIO0 6 ALT1 IN NICLK 0 CLK_A>; 133 + col = <&PIO0 7 ALT1 IN BYPASS 1000>; 134 + mdio = <&PIO1 0 ALT1 OUT BYPASS 0>; 135 + mdc = <&PIO1 1 ALT1 OUT NICLK 0 CLK_A>; 136 + crs = <&PIO1 2 ALT1 IN BYPASS 1000>; 137 + mdint = <&PIO1 3 ALT1 IN BYPASS 0>; 138 + rxd0 = <&PIO1 4 ALT1 IN SE_NICLK_IO 0 CLK_A>; 139 + rxd1 = <&PIO1 5 ALT1 IN SE_NICLK_IO 0 CLK_A>; 140 + rxd2 = <&PIO1 6 ALT1 IN SE_NICLK_IO 0 CLK_A>; 141 + rxd3 = <&PIO1 7 ALT1 IN SE_NICLK_IO 0 CLK_A>; 142 + rxdv = <&PIO2 0 ALT1 IN SE_NICLK_IO 0 CLK_A>; 143 + rx_er = <&PIO2 1 ALT1 IN SE_NICLK_IO 0 CLK_A>; 144 + rxclk = <&PIO2 2 ALT1 IN NICLK 0 CLK_A>; 145 + phyclk = <&PIO2 3 ALT1 IN NICLK 1000 CLK_A>; 146 + }; 147 + }; 148 + 149 + pinctrl_rgmii1: rgmii1-0 { 150 + st,pins { 151 + txd0 = <&PIO0 0 ALT1 OUT DE_IO 1000 CLK_A>; 152 + txd1 = <&PIO0 1 ALT1 OUT DE_IO 1000 CLK_A>; 153 + txd2 = <&PIO0 2 ALT1 OUT DE_IO 1000 CLK_A>; 154 + txd3 = <&PIO0 3 ALT1 OUT DE_IO 1000 CLK_A>; 155 + txen = <&PIO0 5 ALT1 OUT DE_IO 0 CLK_A>; 156 + txclk = <&PIO0 6 ALT1 IN NICLK 0 CLK_A>; 157 + mdio = <&PIO1 0 ALT1 OUT BYPASS 0>; 158 + mdc = <&PIO1 1 ALT1 OUT NICLK 0 CLK_A>; 159 + rxd0 = <&PIO1 4 ALT1 IN DE_IO 0 CLK_A>; 160 + rxd1 = <&PIO1 5 ALT1 IN DE_IO 0 CLK_A>; 161 + rxd2 = <&PIO1 6 ALT1 IN DE_IO 0 CLK_A>; 162 + rxd3 = <&PIO1 7 ALT1 IN DE_IO 0 CLK_A>; 163 + 164 + rxdv = <&PIO2 0 ALT1 IN DE_IO 500 CLK_A>; 165 + rxclk = <&PIO2 2 ALT1 IN NICLK 0 CLK_A>; 166 + phyclk = <&PIO2 3 ALT4 OUT NICLK 0 CLK_B>; 167 + 168 + clk125= <&PIO3 7 ALT4 IN NICLK 0 CLK_A>; 169 + }; 170 + }; 171 + }; 122 172 }; 123 173 124 174 pin-controller-front { ··· 331 281 st,pins { 332 282 tx = <&PIO17 4 ALT2 OUT>; 333 283 rx = <&PIO17 5 ALT2 IN>; 284 + }; 285 + }; 286 + }; 287 + 288 + gmac0{ 289 + pinctrl_mii0: mii0 { 290 + st,pins { 291 + mdint = <&PIO13 6 ALT2 IN BYPASS 0>; 292 + txen = <&PIO13 7 ALT2 OUT SE_NICLK_IO 0 CLK_A>; 293 + 294 + txd0 = <&PIO14 0 ALT2 OUT SE_NICLK_IO 0 CLK_A>; 295 + txd1 = <&PIO14 1 ALT2 OUT SE_NICLK_IO 0 CLK_A>; 296 + txd2 = <&PIO14 2 ALT2 OUT SE_NICLK_IO 0 CLK_B>; 297 + txd3 = <&PIO14 3 ALT2 OUT SE_NICLK_IO 0 CLK_B>; 298 + 299 + txclk = <&PIO15 0 ALT2 IN NICLK 0 CLK_A>; 300 + txer = <&PIO15 1 ALT2 OUT SE_NICLK_IO 0 CLK_A>; 301 + crs = <&PIO15 2 ALT2 IN BYPASS 1000>; 302 + col = <&PIO15 3 ALT2 IN BYPASS 1000>; 303 + mdio = <&PIO15 4 ALT2 OUT BYPASS 3000>; 304 + mdc = <&PIO15 5 ALT2 OUT NICLK 0 CLK_B>; 305 + 306 + rxd0 = <&PIO16 0 ALT2 IN SE_NICLK_IO 0 CLK_A>; 307 + rxd1 = <&PIO16 1 ALT2 IN SE_NICLK_IO 0 CLK_A>; 308 + rxd2 = <&PIO16 2 ALT2 IN SE_NICLK_IO 0 CLK_A>; 309 + rxd3 = <&PIO16 3 ALT2 IN SE_NICLK_IO 0 CLK_A>; 310 + rxdv = <&PIO15 6 ALT2 IN SE_NICLK_IO 0 CLK_A>; 311 + rx_er = <&PIO15 7 ALT2 IN SE_NICLK_IO 0 CLK_A>; 312 + rxclk = <&PIO17 0 ALT2 IN NICLK 0 CLK_A>; 313 + phyclk = <&PIO13 5 ALT2 OUT NICLK 1000 CLK_A>; 314 + 315 + }; 316 + }; 317 + 318 + pinctrl_gmii0: gmii0 { 319 + st,pins { 320 + mdint = <&PIO13 6 ALT2 IN BYPASS 0>; 321 + mdio = <&PIO15 4 ALT2 OUT BYPASS 3000>; 322 + mdc = <&PIO15 5 ALT2 OUT NICLK 0 CLK_B>; 323 + txen = <&PIO13 7 ALT2 OUT SE_NICLK_IO 3000 CLK_A>; 324 + 325 + txd0 = <&PIO14 0 ALT2 OUT SE_NICLK_IO 3000 CLK_A>; 326 + txd1 = <&PIO14 1 ALT2 OUT SE_NICLK_IO 3000 CLK_A>; 327 + txd2 = <&PIO14 2 ALT2 OUT SE_NICLK_IO 3000 CLK_B>; 328 + txd3 = <&PIO14 3 ALT2 OUT SE_NICLK_IO 3000 CLK_B>; 329 + txd4 = <&PIO14 4 ALT2 OUT SE_NICLK_IO 3000 CLK_B>; 330 + txd5 = <&PIO14 5 ALT2 OUT SE_NICLK_IO 3000 CLK_B>; 331 + txd6 = <&PIO14 6 ALT2 OUT SE_NICLK_IO 3000 CLK_B>; 332 + txd7 = <&PIO14 7 ALT2 OUT SE_NICLK_IO 3000 CLK_B>; 333 + 334 + txclk = <&PIO15 0 ALT2 IN NICLK 0 CLK_A>; 335 + txer = <&PIO15 1 ALT2 OUT SE_NICLK_IO 3000 CLK_A>; 336 + crs = <&PIO15 2 ALT2 IN BYPASS 1000>; 337 + col = <&PIO15 3 ALT2 IN BYPASS 1000>; 338 + rxdv = <&PIO15 6 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 339 + rx_er = <&PIO15 7 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 340 + 341 + rxd0 = <&PIO16 0 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 342 + rxd1 = <&PIO16 1 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 343 + rxd2 = <&PIO16 2 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 344 + rxd3 = <&PIO16 3 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 345 + rxd4 = <&PIO16 4 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 346 + rxd5 = <&PIO16 5 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 347 + rxd6 = <&PIO16 6 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 348 + rxd7 = <&PIO16 7 ALT2 IN SE_NICLK_IO 1500 CLK_A>; 349 + 350 + rxclk = <&PIO17 0 ALT2 IN NICLK 0 CLK_A>; 351 + clk125 = <&PIO17 6 ALT1 IN NICLK 0 CLK_A>; 352 + phyclk = <&PIO13 5 ALT4 OUT NICLK 0 CLK_B>; 353 + 354 + 334 355 }; 335 356 }; 336 357 };
+48
arch/arm/boot/dts/stih415.dtsi
··· 147 147 148 148 status = "disabled"; 149 149 }; 150 + 151 + ethernet0: dwmac@fe810000 { 152 + device_type = "network"; 153 + compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610"; 154 + status = "disabled"; 155 + 156 + reg = <0xfe810000 0x8000>, <0x148 0x4>; 157 + reg-names = "stmmaceth", "sti-ethconf"; 158 + 159 + interrupts = <0 147 0>, <0 148 0>, <0 149 0>; 160 + interrupt-names = "macirq", "eth_wake_irq", "eth_lpi"; 161 + resets = <&softreset STIH415_ETH0_SOFTRESET>; 162 + reset-names = "stmmaceth"; 163 + 164 + snps,pbl = <32>; 165 + snps,mixed-burst; 166 + snps,force_sf_dma_mode; 167 + 168 + st,syscon = <&syscfg_rear>; 169 + 170 + pinctrl-names = "default"; 171 + pinctrl-0 = <&pinctrl_mii0>; 172 + clock-names = "stmmaceth"; 173 + clocks = <&CLKS_GMAC0_PHY>; 174 + }; 175 + 176 + ethernet1: dwmac@fef08000 { 177 + device_type = "network"; 178 + compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610"; 179 + status = "disabled"; 180 + reg = <0xfef08000 0x8000>, <0x74 0x4>; 181 + reg-names = "stmmaceth", "sti-ethconf"; 182 + interrupts = <0 150 0>, <0 151 0>, <0 152 0>; 183 + interrupt-names = "macirq", "eth_wake_irq", "eth_lpi"; 184 + 185 + snps,pbl = <32>; 186 + snps,mixed-burst; 187 + snps,force_sf_dma_mode; 188 + 189 + st,syscon = <&syscfg_sbc>; 190 + 191 + resets = <&softreset STIH415_ETH1_SOFTRESET>; 192 + reset-names = "stmmaceth"; 193 + pinctrl-names = "default"; 194 + pinctrl-0 = <&pinctrl_mii1>; 195 + clock-names = "stmmaceth"; 196 + clocks = <&CLKS_ETH1_PHY>; 197 + }; 150 198 }; 151 199 };
+22
arch/arm/boot/dts/stih41x-b2000.dtsi
··· 20 20 21 21 aliases { 22 22 ttyAS0 = &serial2; 23 + ethernet0 = &ethernet0; 24 + ethernet1 = &ethernet1; 23 25 }; 24 26 25 27 soc { ··· 47 45 i2c-min-sda-pulse-width-us = <5>; 48 46 49 47 status = "okay"; 48 + }; 49 + 50 + ethernet0: dwmac@fe810000 { 51 + status = "okay"; 52 + phy-mode = "mii"; 53 + pinctrl-0 = <&pinctrl_mii0>; 54 + 55 + snps,reset-gpio = <&PIO106 2>; 56 + snps,reset-active-low; 57 + snps,reset-delays-us = <0 10000 10000>; 58 + }; 59 + 60 + ethernet1: dwmac@fef08000 { 61 + status = "disabled"; 62 + phy-mode = "mii"; 63 + st,tx-retime-src = "txclk"; 64 + 65 + snps,reset-gpio = <&PIO4 7>; 66 + snps,reset-active-low; 67 + snps,reset-delays-us = <0 10000 10000>; 50 68 }; 51 69 }; 52 70 };
+13
arch/arm/boot/dts/stih41x-b2020.dtsi
··· 19 19 20 20 aliases { 21 21 ttyAS0 = &sbc_serial1; 22 + ethernet1 = &ethernet1; 22 23 }; 23 24 soc { 24 25 sbc_serial1: serial@fe531000 { ··· 60 59 61 60 i2c@fe541000 { 62 61 status = "okay"; 62 + }; 63 + 64 + ethernet1: dwmac@fef08000 { 65 + status = "okay"; 66 + phy-mode = "rgmii-id"; 67 + max-speed = <1000>; 68 + st,tx-retime-src = "clk_125"; 69 + snps,reset-gpio = <&PIO3 0>; 70 + snps,reset-active-low; 71 + snps,reset-delays-us = <0 10000 10000>; 72 + 73 + pinctrl-0 = <&pinctrl_rgmii1>; 63 74 }; 64 75 }; 65 76 };