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 <ro...@advem.lv>
> 
> 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
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to