Ticket #7637: enable_learning_8366x.patch

File enable_learning_8366x.patch, 3.9 KB (added by Memphis, 6 years ago)

Apply this patch in target/linux/generic/files/drivers/net/phy and activate at runtime with "swconfig dev rtl8366rb enable_learning 1" - this patches 8366rb and 8366s driver

  • rtl8366s.c

     
    738738                return rtl8366s_vlan_set_4ktable(smi, val->value.i); 
    739739} 
    740740 
     741static int rtl8366s_sw_get_learning_enable(struct switch_dev *dev, 
     742                                           const struct switch_attr *attr, 
     743                                           struct switch_val *val) 
     744{ 
     745        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     746        u32 data; 
     747 
     748        rtl8366_smi_read_reg(smi,RTL8366S_SSCR0,&data); 
     749 
     750         if (data == 0) //all enabled? 
     751                val->value.i = 1; 
     752        else 
     753                val->value.i = 0; 
     754        return 0; 
     755} 
     756 
     757 
     758static int rtl8366s_sw_set_learning_enable(struct switch_dev *dev, 
     759                                           const struct switch_attr *attr, 
     760                                           struct switch_val *val) 
     761{ 
     762        int err=0; 
     763        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     764        if ( val && val->value.i == 1) 
     765        { 
     766                /* enable learning for all ports */ 
     767                REG_WR(smi, RTL8366S_SSCR0, 0); 
     768 
     769                /* enable auto ageing for all ports */ 
     770                REG_WR(smi, RTL8366S_SSCR1, 0); 
     771 
     772                /* drop packets whose DA has not been learned */ 
     773                REG_RMW(smi, RTL8366S_SSCR2, RTL8366S_SSCR2_DROP_UNKNOWN_DA, 1); 
     774        } 
     775        else//disable it 
     776        { 
     777                /* disable learning for all ports */ 
     778                REG_WR(smi, RTL8366S_SSCR0, RTL8366S_PORT_ALL); 
     779 
     780                /* disable auto ageing for all ports */ 
     781                REG_WR(smi, RTL8366S_SSCR1, RTL8366S_PORT_ALL); 
     782 
     783                /* don't drop packets whose DA has not been learned */ 
     784                REG_RMW(smi, RTL8366S_SSCR2, RTL8366S_SSCR2_DROP_UNKNOWN_DA, 0); 
     785        } 
     786} 
     787 
     788 
    741789static const char *rtl8366s_speed_str(unsigned speed) 
    742790{ 
    743791        switch (speed) { 
     
    10051053static struct switch_attr rtl8366s_globals[] = { 
    10061054        { 
    10071055                .type = SWITCH_TYPE_INT, 
     1056                .name = "enable_learning", 
     1057                .description = "Enable learning, enable aging, block unlearned DA", 
     1058                .set = rtl8366s_sw_set_learning_enable, 
     1059                .get = rtl8366s_sw_get_learning_enable, 
     1060                .max = 1, 
     1061        }, { 
     1062                .type = SWITCH_TYPE_INT, 
    10081063                .name = "enable_vlan", 
    10091064                .description = "Enable VLAN mode", 
    10101065                .set = rtl8366s_sw_set_vlan_enable, 
  • rtl8366rb.c

     
    752752                return rtl8366rb_vlan_set_4ktable(smi, val->value.i); 
    753753} 
    754754 
     755static int rtl8366rb_sw_get_learning_enable(struct switch_dev *dev, 
     756                                       const struct switch_attr *attr, 
     757                                       struct switch_val *val) 
     758{ 
     759        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     760        u32 data; 
     761 
     762        rtl8366_smi_read_reg(smi,RTL8366RB_SSCR0,&data); 
     763 
     764        if (data == 0) //all enabled? 
     765                val->value.i = 1; 
     766        else 
     767                val->value.i = 0; 
     768        return 0; 
     769} 
     770 
     771 
     772static int rtl8366rb_sw_set_learning_enable(struct switch_dev *dev, 
     773                                       const struct switch_attr *attr, 
     774                                       struct switch_val *val) 
     775{ 
     776        int err=0; 
     777        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     778        if ( val->value.i == 1) 
     779        { 
     780                /* enable learning for all ports */ 
     781                REG_WR(smi, RTL8366RB_SSCR0, 0); 
     782 
     783                /* enable auto ageing for all ports */ 
     784                REG_WR(smi, RTL8366RB_SSCR1, 0); 
     785 
     786                /* drop packets whose DA has not been learned */ 
     787                REG_RMW(smi, RTL8366RB_SSCR2, RTL8366RB_SSCR2_DROP_UNKNOWN_DA, 1); 
     788        } 
     789        else//disable it 
     790        { 
     791                /* disable learning for all ports */ 
     792                REG_WR(smi, RTL8366RB_SSCR0, RTL8366RB_PORT_ALL); 
     793 
     794                /* disable auto ageing for all ports */ 
     795                REG_WR(smi, RTL8366RB_SSCR1, RTL8366RB_PORT_ALL); 
     796 
     797                /* don't drop packets whose DA has not been learned */ 
     798                REG_RMW(smi, RTL8366RB_SSCR2, RTL8366RB_SSCR2_DROP_UNKNOWN_DA, 0); 
     799        } 
     800} 
     801 
     802 
    755803static const char *rtl8366rb_speed_str(unsigned speed) 
    756804{ 
    757805        switch (speed) { 
     
    10171065static struct switch_attr rtl8366rb_globals[] = { 
    10181066        { 
    10191067                .type = SWITCH_TYPE_INT, 
     1068                .name = "enable_learning", 
     1069                .description = "Enable learning, enable aging, block unlearned DA", 
     1070                .set = rtl8366rb_sw_set_learning_enable, 
     1071                .get = rtl8366rb_sw_get_learning_enable, 
     1072                .max = 1, 
     1073        }, { 
     1074                .type = SWITCH_TYPE_INT, 
    10201075                .name = "enable_vlan", 
    10211076                .description = "Enable VLAN mode", 
    10221077                .set = rtl8366rb_sw_set_vlan_enable,