Ticket #7637: rtl8366xx_enable_learning.3.patch

File rtl8366xx_enable_learning.3.patch, 5.1 KB (added by Memphis, 6 years ago)

i'm too dumb for patches. this time it applys ...

  • target/linux/generic/files/drivers/net/phy/rtl8366s.c

    =================================================================== 
     
    259259        /* enable all ports */ 
    260260        REG_WR(smi, RTL8366S_PECR, 0); 
    261261 
    262         /* disable learning for all ports */ 
    263         REG_WR(smi, RTL8366S_SSCR0, RTL8366S_PORT_ALL); 
     262        /* enable learning for all ports */ 
     263        REG_WR(smi, RTL8366S_SSCR0, 0); 
    264264 
    265         /* disable auto ageing for all ports */ 
    266         REG_WR(smi, RTL8366S_SSCR1, RTL8366S_PORT_ALL); 
     265        /* enable auto ageing for all ports */ 
     266        REG_WR(smi, RTL8366S_SSCR1, 0); 
    267267 
    268268        /* 
    269269         * discard VLAN tagged packets if the port is not a member of 
     
    271271         */ 
    272272        REG_WR(smi, RTL8366S_VLAN_MEMBERINGRESS_REG, RTL8366S_PORT_ALL); 
    273273 
    274         /* don't drop packets whose DA has not been learned */ 
    275         REG_RMW(smi, RTL8366S_SSCR2, RTL8366S_SSCR2_DROP_UNKNOWN_DA, 0); 
    276  
    277274        return 0; 
    278275} 
    279276 
     
    674671                return rtl8366s_vlan_set_4ktable(smi, val->value.i); 
    675672} 
    676673 
     674static int rtl8366s_sw_get_learning_enable(struct switch_dev *dev, 
     675                                           const struct switch_attr *attr, 
     676                                           struct switch_val *val) 
     677{ 
     678        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     679        u32 data; 
     680 
     681        rtl8366_smi_read_reg(smi,RTL8366S_SSCR0,&data); 
     682 
     683         if (data == 0) //all enabled? 
     684                val->value.i = 1; 
     685        else 
     686                val->value.i = 0; 
     687        return 0; 
     688} 
     689 
     690 
     691static int rtl8366s_sw_set_learning_enable(struct switch_dev *dev, 
     692                                           const struct switch_attr *attr, 
     693                                           struct switch_val *val) 
     694{ 
     695        int err=0; 
     696        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     697        if ( val && val->value.i == 1) 
     698        { 
     699                /* enable learning for all ports */ 
     700                REG_WR(smi, RTL8366S_SSCR0, 0); 
     701 
     702                /* enable auto ageing for all ports */ 
     703                REG_WR(smi, RTL8366S_SSCR1, 0); 
     704        } 
     705        else//disable it 
     706        { 
     707                /* disable learning for all ports */ 
     708                REG_WR(smi, RTL8366S_SSCR0, RTL8366S_PORT_ALL); 
     709 
     710                /* disable auto ageing for all ports */ 
     711                REG_WR(smi, RTL8366S_SSCR1, RTL8366S_PORT_ALL); 
     712        } 
     713} 
     714 
     715 
    677716static const char *rtl8366s_speed_str(unsigned speed) 
    678717{ 
    679718        switch (speed) { 
     
    805844static struct switch_attr rtl8366s_globals[] = { 
    806845        { 
    807846                .type = SWITCH_TYPE_INT, 
     847                .name = "enable_learning", 
     848                .description = "Enable learning, enable aging", 
     849                .set = rtl8366s_sw_set_learning_enable, 
     850                .get = rtl8366s_sw_get_learning_enable, 
     851                .max = 1, 
     852        }, { 
     853                .type = SWITCH_TYPE_INT, 
    808854                .name = "enable_vlan", 
    809855                .description = "Enable VLAN mode", 
    810856                .set = rtl8366s_sw_set_vlan_enable, 
  • target/linux/generic/files/drivers/net/phy/rtl8366rb.c

    =================================================================== 
     
    248248        /* enable all ports */ 
    249249        REG_WR(smi, RTL8366RB_PECR, 0); 
    250250 
    251         /* disable learning for all ports */ 
    252         REG_WR(smi, RTL8366RB_SSCR0, RTL8366RB_PORT_ALL); 
     251        /* enable learning for all ports */ 
     252        REG_WR(smi, RTL8366RB_SSCR0, 0); 
    253253 
    254         /* disable auto ageing for all ports */ 
    255         REG_WR(smi, RTL8366RB_SSCR1, RTL8366RB_PORT_ALL); 
     254        /* enable auto ageing for all ports */ 
     255        REG_WR(smi, RTL8366RB_SSCR1, 0); 
    256256 
    257257        /* 
    258258         * discard VLAN tagged packets if the port is not a member of 
     
    260260         */ 
    261261        REG_WR(smi, RTL8366RB_VLAN_INGRESS_CTRL2_REG, RTL8366RB_PORT_ALL); 
    262262 
    263         /* don't drop packets whose DA has not been learned */ 
    264         REG_RMW(smi, RTL8366RB_SSCR2, RTL8366RB_SSCR2_DROP_UNKNOWN_DA, 0); 
    265  
    266263        return 0; 
    267264} 
    268265 
     
    649646                return rtl8366rb_vlan_set_4ktable(smi, val->value.i); 
    650647} 
    651648 
     649static int rtl8366rb_sw_get_learning_enable(struct switch_dev *dev, 
     650                                       const struct switch_attr *attr, 
     651                                       struct switch_val *val) 
     652{ 
     653        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     654        u32 data; 
     655 
     656        rtl8366_smi_read_reg(smi,RTL8366RB_SSCR0,&data); 
     657 
     658        if (data == 0) //all enabled? 
     659                val->value.i = 1; 
     660        else 
     661                val->value.i = 0; 
     662        return 0; 
     663} 
     664 
     665 
     666static int rtl8366rb_sw_set_learning_enable(struct switch_dev *dev, 
     667                                       const struct switch_attr *attr, 
     668                                       struct switch_val *val) 
     669{ 
     670        int err=0; 
     671        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     672        if ( val->value.i == 1) 
     673        { 
     674                /* enable learning for all ports */ 
     675                REG_WR(smi, RTL8366RB_SSCR0, 0); 
     676 
     677                /* enable auto ageing for all ports */ 
     678                REG_WR(smi, RTL8366RB_SSCR1, 0); 
     679        } 
     680        else//disable it 
     681        { 
     682                /* disable learning for all ports */ 
     683                REG_WR(smi, RTL8366RB_SSCR0, RTL8366RB_PORT_ALL); 
     684 
     685                /* disable auto ageing for all ports */ 
     686                REG_WR(smi, RTL8366RB_SSCR1, RTL8366RB_PORT_ALL); 
     687        } 
     688        return 0; 
     689} 
     690 
     691 
    652692static const char *rtl8366rb_speed_str(unsigned speed) 
    653693{ 
    654694        switch (speed) { 
     
    778818static struct switch_attr rtl8366rb_globals[] = { 
    779819        { 
    780820                .type = SWITCH_TYPE_INT, 
     821                .name = "enable_learning", 
     822                .description = "Enable learning, enable aging", 
     823                .set = rtl8366rb_sw_set_learning_enable, 
     824                .get = rtl8366rb_sw_get_learning_enable, 
     825                .max = 1 
     826        }, { 
     827                .type = SWITCH_TYPE_INT, 
    781828                .name = "enable_vlan", 
    782829                .description = "Enable VLAN mode", 
    783830                .set = rtl8366rb_sw_set_vlan_enable,