ramips: fix up switch settings for Sitecom WL-351 v1 002
authorJohn Crispin <john@phrozen.org>
Wed, 29 Jun 2016 13:09:09 +0000 (15:09 +0200)
committerJohn Crispin <john@phrozen.org>
Sun, 3 Jul 2016 06:00:26 +0000 (08:00 +0200)
Pinmux for rgmii needs to be set to rgmii, not gpio.
Hide the ESW switch on boot (using new rgmii esw devicetree attribute).
Also add a Sitecom-specific profile, since the image needs to include
the rtl8366 kernel driver.

Signed-off-by: Tobias Diedrich <ranma+openwrt@tdiedrich.de>
target/linux/ramips/dts/WL-351.dts
target/linux/ramips/image/rt305x.mk
target/linux/ramips/patches-4.4/0520-esw-gmac.patch [new file with mode: 0644]
target/linux/ramips/rt305x/profiles/sitecom.mk [new file with mode: 0644]

index ecda696732c30f35c3d6610fd99407f5e4085f7f..541f8cef992f333a72685644ca93a7f365f28028 100644 (file)
 &pinctrl {
        state_default: pinctrl0 {
                gpio {
-                       ralink,group = "spi", "i2c", "jtag", "rgmii", "mdio", "uartf";
+                       ralink,group = "spi", "i2c", "jtag", "mdio", "uartf";
                        ralink,function = "gpio";
                };
+               rgmii {
+                       ralink,group = "rgmii";
+                       ralink,function = "rgmii";
+               };
        };
 };
 
 };
 
 &esw {
+       ralink,rgmii = <1>;
        mediatek,portmap = <0x3f>;
        ralink,fct2 = <0x0002500c>;
        /*
index da7fc463f4a0bfa809da1eca4dbe017b627bf593..96175747d775d579bd3b8625812fdb7d381acbed 100644 (file)
@@ -379,7 +379,6 @@ define Image/Build/Profile/Default
        $(call Image/Build/Profile/WL-330N,$(1))
        $(call Image/Build/Profile/WL-330N3G,$(1))
        $(call Image/Build/Profile/WL-341V3,$(1))
-       $(call Image/Build/Profile/WL-351,$(1))
        $(call Image/Build/Profile/WNCE2001,$(1))
        $(call Image/Build/Profile/WR512-3GN,$(1))
        $(call Image/Build/Profile/WR6202,$(1))
diff --git a/target/linux/ramips/patches-4.4/0520-esw-gmac.patch b/target/linux/ramips/patches-4.4/0520-esw-gmac.patch
new file mode 100644 (file)
index 0000000..9d4cd3f
--- /dev/null
@@ -0,0 +1,69 @@
+--- a/drivers/net/ethernet/mediatek/esw_rt3050.c
++++ b/drivers/net/ethernet/mediatek/esw_rt3050.c
+@@ -221,6 +221,8 @@
+       unsigned char           port_map;
+       unsigned char           port_disable;
++      unsigned int            reg_initval_fct2;
++      unsigned int            reg_initval_fpa2;
+       unsigned int            reg_led_polarity;
+       struct switch_dev       swdev;
+@@ -452,7 +454,10 @@
+                     (RT305X_ESW_PORTS_NOCPU << RT305X_ESW_POC2_UNTAG_EN_S)),
+               RT305X_ESW_REG_POC2);
+-      esw_w32(esw, 0x0002500c, RT305X_ESW_REG_FCT2);
++      if (esw->reg_initval_fct2)
++              esw_w32(esw, esw->reg_initval_fct2, RT305X_ESW_REG_FCT2);
++      else
++              esw_w32(esw, 0x0002500c, RT305X_ESW_REG_FCT2);
+       /* 300s aging timer, max packet len 1536, broadcast storm prevention
+        * disabled, disable collision abort, mac xor48 hash, 10 packet back
+@@ -475,7 +480,10 @@
+        * port5: disabled
+        * port6: enabled, gige, full-duplex, rx/tx-flow-control
+        */
+-      esw_w32(esw, 0x3f502b28, RT305X_ESW_REG_FPA2);
++      if (esw->reg_initval_fpa2)
++              esw_w32(esw, esw->reg_initval_fpa2, RT305X_ESW_REG_FPA2);
++      else
++              esw_w32(esw, 0x3f502b28, RT305X_ESW_REG_FPA2);
+       esw_w32(esw, 0x00000000, RT305X_ESW_REG_FPA);
+       /* Force Link/Activity on ports */
+@@ -1361,6 +1369,14 @@
+       if (port_disable)
+               esw->port_disable = be32_to_cpu(*port_disable);
++      reg_init = of_get_property(np, "ralink,fct2", NULL);
++      if (reg_init)
++              esw->reg_initval_fct2 = be32_to_cpu(*reg_init);
++
++      reg_init = of_get_property(np, "ralink,fpa2", NULL);
++      if (reg_init)
++              esw->reg_initval_fpa2 = be32_to_cpu(*reg_init);
++
+       reg_init = of_get_property(np, "mediatek,led_polarity", NULL);
+       if (reg_init)
+               esw->reg_led_polarity = be32_to_cpu(*reg_init);
+@@ -1386,6 +1402,18 @@
+       esw_hw_init(esw);
++      reg_init = of_get_property(np, "ralink,rgmii", NULL);
++      if (reg_init && be32_to_cpu(*reg_init) == 1) {
++              /* 
++               * External switch connected to RGMII interface. 
++               * Unregister the switch device after initialization. 
++               */
++              dev_err(&pdev->dev, "RGMII mode, not exporting switch device.\n");
++              unregister_switch(&esw->swdev);
++              platform_set_drvdata(pdev, NULL);
++              return -ENODEV;
++      }
++
+       ret = devm_request_irq(&pdev->dev, esw->irq, esw_interrupt, 0, "esw",
+                              esw);
diff --git a/target/linux/ramips/rt305x/profiles/sitecom.mk b/target/linux/ramips/rt305x/profiles/sitecom.mk
new file mode 100644 (file)
index 0000000..16d9fef
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/WL-351
+       NAME:=Sitecom WL-351 v1
+       PACKAGES:=\
+               kmod-switch-rtl8366rb kmod-swconfig swconfig
+endef
+
+define Profile/WL-351/Description
+       Package set for Sitecom WL-351 v1
+endef
+
+$(eval $(call Profile,WL-351))