bmips: add experimental ethernet support

This adds experimental ethernet support for BCM6318, BCM6328, BCM6362, BCM6368
and BCM63268.
BCM6358 needs a different driver, so there's no support for now.

Working devices:
- Comtrend AR-5315u
- Comtrend AR-5387un
- Comtrend VR-3025u
- Comtrend VR-3032u

Not working devices:
- Netgear DGND3700 v2 (no idea on how the external switch is connected)
- Huawei HG556a ver B (BCM6358 needs a separate driveer)

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
Álvaro Fernández Rojas
2021-03-01 08:21:59 +01:00
parent bf4aa0c6a2
commit 28dcb74de3
20 changed files with 2401 additions and 1 deletions

View File

@@ -39,6 +39,12 @@
status = "okay";
};
&ethernet {
status = "okay";
mtd-mac-address = <&cferom 0x6a0>;
};
&leds {
status = "okay";
@@ -177,6 +183,38 @@
status = "okay";
};
&switch0 {
ports {
port@0 {
reg = <0>;
label = "lan2";
phy-handle = <&phy1>;
};
port@1 {
reg = <1>;
label = "lan3";
phy-handle = <&phy2>;
};
port@2 {
reg = <2>;
label = "lan4";
phy-handle = <&phy3>;
};
port@3 {
reg = <3>;
label = "lan1";
phy-handle = <&phy4>;
};
};
};
&uart0 {
status = "okay";
};

View File

@@ -37,6 +37,12 @@
status = "okay";
};
&ethernet {
status = "okay";
mtd-mac-address = <&cfe 0x6a0>;
};
&hsspi {
status = "okay";
@@ -168,6 +174,38 @@
};
};
&switch0 {
ports {
port@0 {
reg = <0>;
label = "lan4";
phy-handle = <&phy1>;
};
port@1 {
reg = <1>;
label = "lan3";
phy-handle = <&phy2>;
};
port@2 {
reg = <2>;
label = "lan2";
phy-handle = <&phy3>;
};
port@3 {
reg = <3>;
label = "lan1";
phy-handle = <&phy4>;
};
};
};
&uart0 {
status = "okay";
};

View File

@@ -346,5 +346,103 @@
status = "disabled";
};
switch0: switch@10080000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6328-switch";
reg = <0x10080000 0x8000>;
big-endian;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@8 {
reg = <8>;
label = "cpu";
phy-mode = "internal";
ethernet = <&ethernet>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
};
};
mdio: mdio@100800b0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6368-mdio-mux";
reg = <0x100800b0 0x8>;
mdio_int: mdio@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
phy1: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
phy2: ethernet-phy@2 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <2>;
};
phy3: ethernet-phy@3 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <3>;
};
phy4: ethernet-phy@4 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <4>;
};
};
mdio_ext: mdio@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
};
};
ethernet: ethernet@10088000 {
compatible = "brcm,bcm6318-enetsw";
reg = <0x10088000 0x80>,
<0x10088200 0x80>,
<0x10088400 0x80>;
reg-names = "dma",
"dma-channels",
"dma-sram";
interrupt-parent = <&periph_intc>;
interrupts = <BCM6318_IRQ_ENETSW_RX_DMA0>,
<BCM6318_IRQ_ENETSW_TX_DMA0>;
interrupt-names = "rx",
"tx";
clocks = <&periph_clk BCM6318_CLK_ROBOSW250>,
<&periph_clk BCM6318_CLK_ROBOSW025>,
<&ubus_clk BCM6318_UCLK_ROBOSW>;
resets = <&periph_rst BCM6318_RST_ENETSW>,
<&periph_rst BCM6318_RST_EPHY>;
power-domains = <&periph_pwr BCM6318_POWER_DOMAIN_EPHY0>,
<&periph_pwr BCM6318_POWER_DOMAIN_EPHY1>,
<&periph_pwr BCM6318_POWER_DOMAIN_EPHY2>,
<&periph_pwr BCM6318_POWER_DOMAIN_EPHY3>;
dma-rx = <0>;
dma-tx = <1>;
status = "disabled";
};
};
};

View File

@@ -432,5 +432,105 @@
status = "disabled";
};
ethernet: ethernet@1000d800 {
compatible = "brcm,bcm63268-enetsw";
reg = <0x1000d800 0x80>,
<0x1000da00 0x80>,
<0x1000dc00 0x80>;
reg-names = "dma",
"dma-channels",
"dma-sram";
interrupt-parent = <&periph_intc>;
interrupts = <BCM63268_IRQ_ENETSW_RX_DMA0>,
<BCM63268_IRQ_ENETSW_TX_DMA0>;
interrupt-names = "rx",
"tx";
clocks = <&periph_clk BCM63268_CLK_GMAC>,
<&periph_clk BCM63268_CLK_ROBOSW>,
<&periph_clk BCM63268_CLK_ROBOSW250>,
<&timer_clk BCM63268_TCLK_EPHY1>,
<&timer_clk BCM63268_TCLK_EPHY2>,
<&timer_clk BCM63268_TCLK_EPHY3>,
<&timer_clk BCM63268_TCLK_GPHY1>;
resets = <&periph_rst BCM63268_RST_ENETSW>,
<&periph_rst BCM63268_RST_EPHY>,
<&periph_rst BCM63268_RST_GPHY>;
power-domains = <&periph_pwr BCM63268_POWER_DOMAIN_ROBOSW>;
dma-rx = <0>;
dma-tx = <1>;
status = "disabled";
};
switch0: switch@10700000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6328-switch";
reg = <0x10700000 0x8000>;
big-endian;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@8 {
reg = <8>;
label = "cpu";
phy-mode = "internal";
ethernet = <&ethernet>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
};
};
mdio: mdio@107000b0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6368-mdio-mux";
reg = <0x107000b0 0x8>;
mdio_int: mdio@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
phy1: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
phy2: ethernet-phy@2 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <2>;
};
phy3: ethernet-phy@3 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <3>;
};
phy4: ethernet-phy@4 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <4>;
};
};
mdio_ext: mdio@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
};
};
};
};

View File

@@ -30,6 +30,12 @@
status = "okay";
};
&ethernet {
status = "okay";
mtd-mac-address = <&cfe 0x6a0>;
};
&hsspi {
status = "okay";
@@ -113,6 +119,38 @@
};
};
&switch0 {
ports {
port@0 {
reg = <0>;
label = "lan1";
phy-handle = <&phy1>;
};
port@1 {
reg = <1>;
label = "lan2";
phy-handle = <&phy2>;
};
port@2 {
reg = <2>;
label = "lan3";
phy-handle = <&phy3>;
};
port@3 {
reg = <3>;
label = "lan4";
phy-handle = <&phy4>;
};
};
};
&uart0 {
status = "okay";
};

View File

@@ -368,5 +368,99 @@
status = "disabled";
};
ethernet: ethernet@1000d800 {
compatible = "brcm,bcm6328-enetsw";
reg = <0x1000d800 0x80>,
<0x1000da00 0x80>,
<0x1000dc00 0x80>;
reg-names = "dma",
"dma-channels",
"dma-sram";
interrupt-parent = <&periph_intc>;
interrupts = <BCM6328_IRQ_ENETSW_RX_DMA0>,
<BCM6328_IRQ_ENETSW_TX_DMA0>;
interrupt-names = "rx",
"tx";
clocks = <&periph_clk BCM6328_CLK_ROBOSW>;
resets = <&periph_rst BCM6328_RST_ENETSW>,
<&periph_rst BCM6328_RST_EPHY>;
power-domains = <&periph_pwr BCM6328_POWER_DOMAIN_ROBOSW>,
<&periph_pwr BCM6328_POWER_DOMAIN_EPHY>;
dma-rx = <0>;
dma-tx = <1>;
status = "disabled";
};
switch0: switch@10e00000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6328-switch";
reg = <0x10e00000 0x8000>;
big-endian;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@8 {
reg = <8>;
label = "cpu";
phy-mode = "internal";
ethernet = <&ethernet>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
};
};
mdio: mdio@10e000b0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6368-mdio-mux";
reg = <0x10e000b0 0x8>;
mdio_int: mdio@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
phy1: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
phy2: ethernet-phy@2 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <2>;
};
phy3: ethernet-phy@3 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <3>;
};
phy4: ethernet-phy@4 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <4>;
};
};
mdio_ext: mdio@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
};
};
};
};

View File

@@ -62,6 +62,12 @@
status = "okay";
};
&ethernet {
status = "okay";
mtd-mac-address = <&cferom 0x6a0>;
};
&leds {
status = "okay";

View File

@@ -465,5 +465,99 @@
status = "disabled";
};
ethernet: ethernet@1000d800 {
compatible = "brcm,bcm6362-enetsw";
reg = <0x1000d800 0x80>,
<0x1000da00 0x80>,
<0x1000dc00 0x80>;
reg-names = "dma",
"dma-channels",
"dma-sram";
interrupt-parent = <&periph_intc>;
interrupts = <BCM6362_IRQ_ENETSW_RX_DMA0>;
interrupt-names = "rx";
clocks = <&periph_clk BCM6362_CLK_SWPKT_USB>,
<&periph_clk BCM6362_CLK_SWPKT_SAR>,
<&periph_clk BCM6362_CLK_ROBOSW>;
resets = <&periph_rst BCM6362_RST_ENETSW>,
<&periph_rst BCM6362_RST_EPHY>;
power-domains = <&periph_pwr BCM6362_POWER_DOMAIN_ROBOSW>,
<&periph_pwr BCM6362_POWER_DOMAIN_GMII_PADS>;
dma-rx = <0>;
dma-tx = <1>;
status = "disabled";
};
switch0: switch@10e00000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6328-switch";
reg = <0x10e00000 0x8000>;
big-endian;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@8 {
reg = <8>;
label = "cpu";
phy-mode = "internal";
ethernet = <&ethernet>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
};
};
mdio: mdio@10e000b0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6368-mdio-mux";
reg = <0x10e000b0 0x8>;
mdio_int: mdio@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
phy1: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
phy2: ethernet-phy@2 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <2>;
};
phy3: ethernet-phy@3 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <3>;
};
phy4: ethernet-phy@4 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <4>;
};
};
mdio_ext: mdio@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
};
};
};
};

View File

@@ -59,6 +59,12 @@
status = "okay";
};
&ethernet {
status = "okay";
mtd-mac-address = <&cfe 0x6a0>;
};
&ohci {
status = "okay";
};
@@ -96,6 +102,38 @@
&pinctrl_ephy2_led &pinctrl_ephy3_led>;
};
&switch0 {
ports {
port@0 {
reg = <0>;
label = "lan1";
phy-handle = <&phy1>;
};
port@1 {
reg = <1>;
label = "lan2";
phy-handle = <&phy2>;
};
port@2 {
reg = <2>;
label = "lan3";
phy-handle = <&phy3>;
};
port@3 {
reg = <3>;
label = "lan4";
phy-handle = <&phy4>;
};
};
};
&uart0 {
status = "okay";
};

View File

@@ -467,6 +467,99 @@
resets = <&periph_rst BCM6368_RST_IPSEC>;
};
ethernet: ethernet@10006800 {
compatible = "brcm,bcm6368-enetsw";
reg = <0x10006800 0x80>,
<0x10006a00 0x80>,
<0x10006c00 0x80>;
reg-names = "dma",
"dma-channels",
"dma-sram";
interrupt-parent = <&periph_intc>;
interrupts = <BCM6368_IRQ_ENETSW_RX_DMA0>,
<BCM6368_IRQ_ENETSW_TX_DMA0>;
interrupt-names = "rx",
"tx";
clocks = <&periph_clk BCM6368_CLK_SWPKT_USB>,
<&periph_clk BCM6368_CLK_SWPKT_SAR>,
<&periph_clk BCM6368_CLK_ROBOSW>;
resets = <&periph_rst BCM6368_RST_SWITCH>,
<&periph_rst BCM6368_RST_EPHY>;
dma-rx = <0>;
dma-tx = <1>;
status = "disabled";
};
switch0: switch@10f00000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6328-switch";
reg = <0x10f00000 0x8000>;
big-endian;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@8 {
reg = <8>;
label = "cpu";
phy-mode = "internal";
ethernet = <&ethernet>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
};
};
mdio: mdio@10f000b0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "brcm,bcm6368-mdio-mux";
reg = <0x10f000b0 0x8>;
mdio_int: mdio@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
phy1: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
phy2: ethernet-phy@2 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <2>;
};
phy3: ethernet-phy@3 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <3>;
};
phy4: ethernet-phy@4 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <4>;
};
};
mdio_ext: mdio@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
};
};
};
pflash: nor@18000000 {