2012.02.01. 3:19 keltezéssel, Roman Yeryomin írta:
> This fixes Belkin F5D8235 v2 ethernet stuff.
> To do it we first need to enable rgmii and then not to configure any
> vlans at all. Then there are two ways: enable double tagging on ports
> 5 and 6 and enable tag removal (as I was doing from the very
> beginning) OR we can simply disable vlans and vlan tag removal (as
> proposed by Tobias Diedrich). I'm leaving both variants (first one is
> commented out) for the sake of reference. Of cause you're free to
> remove the commented code.
> So:
> * add RT305X_ESW_VLAN_CONFIG_EXTSW
> * add belkin profile (and remove it from default one)
> * remap ports
>
> Tested with r29978.
> Adding the patch as attachment also.
>
> Signed-off-by: Roman Yeryomin <[email protected]>
>
> Index: target/linux/ramips/files/arch/mips/ralink/rt305x/mach-f5d8235-v2.c
> ===================================================================
> --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-f5d8235-v2.c
> (revision
> 29868)
> +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-f5d8235-v2.c
> (working
> copy)
> @@ -124,15 +124,16 @@
>
> static void __init f5d8235v2_init(void)
> {
> - rt305x_gpio_init((RT305X_GPIO_MODE_GPIO <<
> + rt305x_gpio_init(((RT305X_GPIO_MODE_GPIO <<
> RT305X_GPIO_MODE_UART0_SHIFT) |
> RT305X_GPIO_MODE_I2C |
> RT305X_GPIO_MODE_SPI |
> - RT305X_GPIO_MODE_MDIO);
> + RT305X_GPIO_MODE_MDIO) &
> + ~RT305X_GPIO_MODE_RGMII);
This change makes no sense. RT305X_GPIO_MODE_RGMII is defined as BIT(9), and
that bit is not present in the original value.
> rt305x_register_flash(0, &f5d8235v2_flash_data);
> ramips_register_gpio_leds(-1, ARRAY_SIZE(f5d8235v2_leds_gpio),
> f5d8235v2_leds_gpio);
> - rt305x_esw_data.vlan_config = RT305X_ESW_VLAN_CONFIG_NONE;
> + rt305x_esw_data.vlan_config = RT305X_ESW_VLAN_CONFIG_EXTSW;
> rt305x_register_ethernet();
> platform_device_register(&f5d8235v2_switch);
> rt305x_register_wifi();
> Index:
> target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h
> ===================================================================
> ---
> a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h
> (revision
> 29868)
> +++
> b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h
> (working
> copy)
> @@ -14,6 +14,7 @@
> enum {
> RT305X_ESW_VLAN_CONFIG_NONE = 0,
> RT305X_ESW_VLAN_CONFIG_BYPASS,
> + RT305X_ESW_VLAN_CONFIG_EXTSW,
The RT305X_ESW_VLAN_CONFIG_BYPASS mode has been introduced in order to handle
the external switch case. Adding yet another mode for the same thing seems
superfluous.
> RT305X_ESW_VLAN_CONFIG_LLLLW,
> RT305X_ESW_VLAN_CONFIG_WLLLL,
> };
> Index: target/linux/ramips/files/drivers/net/ramips_esw.c
> ===================================================================
> --- a/target/linux/ramips/files/drivers/net/ramips_esw.c (revision 29868)
> +++ b/target/linux/ramips/files/drivers/net/ramips_esw.c (working copy)
> @@ -265,14 +265,16 @@
> /* select local register */
> rt305x_mii_write(esw, 0, 31, 0x8000);
>
> - for (i = 0; i < RT305X_ESW_NUM_VLANS; i++) {
> - rt305x_esw_set_vlan_id(esw, i, 0);
> - rt305x_esw_set_vmsc(esw, i, 0);
> + if (esw->pdata->vlan_config != RT305X_ESW_VLAN_CONFIG_EXTSW) {
> + for (i = 0; i < RT305X_ESW_NUM_VLANS; i++) {
> + rt305x_esw_set_vlan_id(esw, i, 0);
> + rt305x_esw_set_vmsc(esw, i, 0);
> + }
> +
> + for (i = 0; i < RT305X_ESW_NUM_PORTS; i++)
> + rt305x_esw_set_pvid(esw, i, 1);
> }
>
> - for (i = 0; i < RT305X_ESW_NUM_PORTS; i++)
> - rt305x_esw_set_pvid(esw, i, 1);
> -
> switch (esw->pdata->vlan_config) {
> case RT305X_ESW_VLAN_CONFIG_NONE:
> break;
> @@ -289,6 +291,30 @@
> RT305X_ESW_REG_POC3);
> break;
>
> + case RT305X_ESW_VLAN_CONFIG_EXTSW:
> + /* Disable per port vlan id and priority check (EN_VLAN = 0) */
> + rt305x_esw_wr(esw, 0, RT305X_ESW_REG_PFC1);
> + /* Disable VLAN TAG removal and aging */
> + rt305x_esw_wr(esw, 0, RT305X_ESW_REG_POC3);
> +
> + /* Enable VLAN on ports 5 and 6*/
> + //rt305x_esw_wr(esw, 0x00605555, 0x14);
> + /* Remove VLAN tag field on all ports */
> + //rt305x_esw_wr(esw, 0x00007f7f, 0x98);
> + /* Insert double tag field port 5 and 6 */
> + //rt305x_esw_wr(esw, 0x00000060, 0xe4);
> +
> + /* Disable port 5 auto polling */
> + rt305x_esw_wr(esw, rt305x_esw_rr(esw, RT305X_ESW_REG_FPA2) &
> + ~(1 << 29), RT305X_ESW_REG_FPA2);
> + /* Force 1000M full duplex */
> + rt305x_esw_wr(esw, rt305x_esw_rr(esw, RT305X_ESW_REG_FPA2) |
> + 0x3fff, RT305X_ESW_REG_FPA2);
> + /* rxclk_skew, txclk_skew = 0 */
> + rt305x_esw_wr(esw, rt305x_esw_rr(esw, RT305X_ESW_REG_FPA2) &
> + ~(0xf << 20), RT305X_ESW_REG_FPA2);
You can override the FPA2 register value via platform data.
> + break;
> +
> case RT305X_ESW_VLAN_CONFIG_LLLLW:
> rt305x_esw_set_vlan_id(esw, 0, 1);
> rt305x_esw_set_vlan_id(esw, 1, 2);
The rest of the patch is applied, but please don't mix unrelated changes into a
single patch next time.
-Gabor
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel