ramips: fix up switch settings for Sitecom WL-351 v1 002

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>
This commit is contained in:
John Crispin 2016-06-29 15:09:09 +02:00
parent e892472b1e
commit d09f0045ea
4 changed files with 93 additions and 2 deletions

View file

@ -86,9 +86,13 @@
&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";
};
};
};
@ -97,6 +101,7 @@
};
&esw {
ralink,rgmii = <1>;
mediatek,portmap = <0x3f>;
ralink,fct2 = <0x0002500c>;
/*

View 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))

View file

@ -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);

View file

@ -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))