mediatek: fix support for gmac1 using external PHY
authorJohn Crispin <john@phrozen.org>
Fri, 21 Apr 2017 07:40:01 +0000 (09:40 +0200)
committerJohn Crispin <john@phrozen.org>
Mon, 24 Apr 2017 09:11:52 +0000 (11:11 +0200)
Signed-off-by: John Crispin <john@phrozen.org>
target/linux/mediatek/config-4.9
target/linux/mediatek/files/arch/arm/boot/dts/mt7623-NAND.dts
target/linux/mediatek/files/arch/arm/boot/dts/mt7623-eMMC.dts
target/linux/mediatek/patches-4.9/0095-ephy.patch [new file with mode: 0644]

index 1d7727588511bc59c0d077656114066945028baa..88332e431fd1255108286013fc939c736c21fe37 100644 (file)
@@ -218,6 +218,7 @@ CONFIG_I2C=y
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_CHARDEV=y
 CONFIG_I2C_MT65XX=y
+CONFIG_ICPLUS_PHY=y
 CONFIG_IIO=y
 # CONFIG_IIO_BUFFER is not set
 # CONFIG_IIO_TRIGGER is not set
index d90e0fbcb5cabbe8a5b3396e0089baa8a2399576..072ebe764d274f81a7716e0029efc405a493f344 100644 (file)
 &gmac1 {
        mac-address = [00 11 22 33 44 56];
        status = "okay";
+
+       phy-mode = "trgmii";
+
+       fixed-link {
+               speed = <1000>;
+               full-duplex;
+               pause;
+       };
 };
 
 &gmac2 {
                        port@0 {
                                reg = <0>;
                                label = "lan0";
+                               cpu = <&cpu_port0>;
                        };
 
                        port@1 {
                                reg = <1>;
                                label = "lan1";
+                               cpu = <&cpu_port0>;
                        };
 
                        port@2 {
                                reg = <2>;
                                label = "lan2";
+                               cpu = <&cpu_port0>;
                        };
 
                        port@3 {
                                reg = <3>;
                                label = "lan3";
+                               cpu = <&cpu_port0>;
                        };
 
                        port@4 {
                                reg = <4>;
                                label = "wan";
+                               cpu = <&cpu_port1>;
                        };
 
-                       port@6 {
+                       cpu_port1: port@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&gmac2>;
+                               phy-mode = "trgmii";
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+
+                       cpu_port0: port@6 {
                                reg = <6>;
                                label = "cpu";
                                ethernet = <&gmac1>;
        };
 };
 
-
 &pwm {
        pinctrl-names = "default";
        pinctrl-0 = <&pwm_pins>;
index 86c4dd5746e14ab4bcbf8679c21b10342ab223f1..36b0065025909372570aef68cda24c78cdbc0ba9 100644 (file)
 &gmac2 {
        mac-address = [00 11 22 33 44 55];
        status = "okay";
+
+       phy-handle = <&phy5>;
+};
+
+&mdio0 {
+       switch@0 {
+               compatible = "mediatek,mt7530";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0>;
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&eth_default>;
+
+               core-supply = <&mt6323_vpa_reg>;
+               io-supply = <&mt6323_vemc3v3_reg>;
+               reset-gpios = <&pio 33 0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0>;
+                       port@0 {
+                               reg = <0>;
+                               label = "lan0";
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               label = "lan1";
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               label = "lan2";
+                       };
+
+                       port@3 {
+                               reg = <3>;
+                               label = "lan3";
+                       };
+
+                       port@6 {
+                               reg = <6>;
+                               label = "cpu";
+                               ethernet = <&gmac1>;
+                               phy-mode = "trgmii";
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
+       };
+
+       phy5: ethernet-phy@5 {
+               reg = <5>;
+               phy-mode = "rgmii-rxid";
+       };
 };
 
 &pwm {
diff --git a/target/linux/mediatek/patches-4.9/0095-ephy.patch b/target/linux/mediatek/patches-4.9/0095-ephy.patch
new file mode 100644 (file)
index 0000000..52d8299
--- /dev/null
@@ -0,0 +1,30 @@
+Index: linux-4.9.20/drivers/net/dsa/mt7530.c
+===================================================================
+--- linux-4.9.20.orig/drivers/net/dsa/mt7530.c
++++ linux-4.9.20/drivers/net/dsa/mt7530.c
+@@ -629,6 +629,11 @@ mt7530_setup(struct dsa_switch *ds)
+       val = mt7530_read(priv, MT7530_MHWTRAP);
+       val &= ~MHWTRAP_P6_DIS & ~MHWTRAP_PHY_ACCESS;
+       val |= MHWTRAP_MANUAL;
++      if (!dsa_is_cpu_port(ds, 5)) {
++              val |= MHWTRAP_P5_DIS;
++              val |= MHWTRAP_P5_MAC_SEL;
++              val |= MHWTRAP_P5_RGMII_MODE;
++      }
+       mt7530_write(priv, MT7530_MHWTRAP, val);
+       /* Enable and reset MIB counters */
+Index: linux-4.9.20/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+===================================================================
+--- linux-4.9.20.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.c
++++ linux-4.9.20/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+@@ -221,6 +221,9 @@ static void mtk_phy_link_adjust(struct n
+               netif_carrier_on(dev);
+       else
+               netif_carrier_off(dev);
++
++      if (!of_phy_is_fixed_link(mac->of_node))
++              phy_print_status(dev->phydev);
+ }
+ static int mtk_phy_connect_node(struct mtk_eth *eth, struct mtk_mac *mac,