Ticket #7637: rtl8366xx_enable_learning.2.patch

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

there was a return missing :o(

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

     
    294294        /* enable all ports */ 
    295295        REG_WR(smi, RTL8366S_PECR, 0); 
    296296 
    297         /* disable learning for all ports */ 
    298         REG_WR(smi, RTL8366S_SSCR0, RTL8366S_PORT_ALL); 
     297        /* enable learning for all ports */ 
     298        REG_WR(smi, RTL8366S_SSCR0, 0); 
    299299 
    300         /* disable auto ageing for all ports */ 
    301         REG_WR(smi, RTL8366S_SSCR1, RTL8366S_PORT_ALL); 
     300        /* enable auto ageing for all ports */ 
     301        REG_WR(smi, RTL8366S_SSCR1, 0); 
    302302 
    303303        /* 
    304304         * discard VLAN tagged packets if the port is not a member of 
     
    306306         */ 
    307307        REG_WR(smi, RTL8366S_VLAN_MEMBERINGRESS_REG, RTL8366S_PORT_ALL); 
    308308 
    309         /* don't drop packets whose DA has not been learned */ 
    310         REG_RMW(smi, RTL8366S_SSCR2, RTL8366S_SSCR2_DROP_UNKNOWN_DA, 0); 
    311  
    312309        return 0; 
    313310} 
    314311 
     
    738735                return rtl8366s_vlan_set_4ktable(smi, val->value.i); 
    739736} 
    740737 
     738static int rtl8366s_sw_get_learning_enable(struct switch_dev *dev, 
     739                                           const struct switch_attr *attr, 
     740                                           struct switch_val *val) 
     741{ 
     742        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     743        u32 data; 
     744 
     745        rtl8366_smi_read_reg(smi,RTL8366S_SSCR0,&data); 
     746 
     747         if (data == 0) //all enabled? 
     748                val->value.i = 1; 
     749        else 
     750                val->value.i = 0; 
     751        return 0; 
     752} 
     753 
     754 
     755static int rtl8366s_sw_set_learning_enable(struct switch_dev *dev, 
     756                                           const struct switch_attr *attr, 
     757                                           struct switch_val *val) 
     758{ 
     759        int err=0; 
     760        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     761        if ( val && val->value.i == 1) 
     762        { 
     763                /* enable learning for all ports */ 
     764                REG_WR(smi, RTL8366S_SSCR0, 0); 
     765 
     766                /* enable auto ageing for all ports */ 
     767                REG_WR(smi, RTL8366S_SSCR1, 0); 
     768        } 
     769        else//disable it 
     770        { 
     771                /* disable learning for all ports */ 
     772                REG_WR(smi, RTL8366S_SSCR0, RTL8366S_PORT_ALL); 
     773 
     774                /* disable auto ageing for all ports */ 
     775                REG_WR(smi, RTL8366S_SSCR1, RTL8366S_PORT_ALL); 
     776        } 
     777        return 0; 
     778} 
     779 
     780 
    741781static const char *rtl8366s_speed_str(unsigned speed) 
    742782{ 
    743783        switch (speed) { 
     
    10051044static struct switch_attr rtl8366s_globals[] = { 
    10061045        { 
    10071046                .type = SWITCH_TYPE_INT, 
     1047                .name = "enable_learning", 
     1048                .description = "Enable learning, enable aging", 
     1049                .set = rtl8366s_sw_set_learning_enable, 
     1050                .get = rtl8366s_sw_get_learning_enable, 
     1051                .max = 1, 
     1052        }, { 
     1053                .type = SWITCH_TYPE_INT, 
    10081054                .name = "enable_vlan", 
    10091055                .description = "Enable VLAN mode", 
    10101056                .set = rtl8366s_sw_set_vlan_enable, 
  • target/linux/generic/files/drivers/net/phy/rtl8366rb.c

     
    284284        /* enable all ports */ 
    285285        REG_WR(smi, RTL8366RB_PECR, 0); 
    286286 
    287         /* disable learning for all ports */ 
    288         REG_WR(smi, RTL8366RB_SSCR0, RTL8366RB_PORT_ALL); 
     287        /* enable learning for all ports */ 
     288        REG_WR(smi, RTL8366RB_SSCR0, 0); 
    289289 
    290         /* disable auto ageing for all ports */ 
    291         REG_WR(smi, RTL8366RB_SSCR1, RTL8366RB_PORT_ALL); 
     290        /* enable auto ageing for all ports */ 
     291        REG_WR(smi, RTL8366RB_SSCR1, 0); 
    292292 
    293293        /* 
    294294         * discard VLAN tagged packets if the port is not a member of 
     
    296296         */ 
    297297        REG_WR(smi, RTL8366RB_VLAN_INGRESS_CTRL2_REG, RTL8366RB_PORT_ALL); 
    298298 
    299         /* don't drop packets whose DA has not been learned */ 
    300         REG_RMW(smi, RTL8366RB_SSCR2, RTL8366RB_SSCR2_DROP_UNKNOWN_DA, 0); 
    301  
    302299        return 0; 
    303300} 
    304301 
     
    752749                return rtl8366rb_vlan_set_4ktable(smi, val->value.i); 
    753750} 
    754751 
     752static int rtl8366rb_sw_get_learning_enable(struct switch_dev *dev, 
     753                                       const struct switch_attr *attr, 
     754                                       struct switch_val *val) 
     755{ 
     756        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     757        u32 data; 
     758 
     759        rtl8366_smi_read_reg(smi,RTL8366RB_SSCR0,&data); 
     760 
     761        if (data == 0) //all enabled? 
     762                val->value.i = 1; 
     763        else 
     764                val->value.i = 0; 
     765        return 0; 
     766} 
     767 
     768 
     769static int rtl8366rb_sw_set_learning_enable(struct switch_dev *dev, 
     770                                       const struct switch_attr *attr, 
     771                                       struct switch_val *val) 
     772{ 
     773        int err=0; 
     774        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     775        if ( val->value.i == 1) 
     776        { 
     777                /* enable learning for all ports */ 
     778                REG_WR(smi, RTL8366RB_SSCR0, 0); 
     779 
     780                /* enable auto ageing for all ports */ 
     781                REG_WR(smi, RTL8366RB_SSCR1, 0); 
     782        } 
     783        else//disable it 
     784        { 
     785                /* disable learning for all ports */ 
     786                REG_WR(smi, RTL8366RB_SSCR0, RTL8366RB_PORT_ALL); 
     787 
     788                /* disable auto ageing for all ports */ 
     789                REG_WR(smi, RTL8366RB_SSCR1, RTL8366RB_PORT_ALL); 
     790        } 
     791        return 0; 
     792} 
     793 
     794 
    755795static const char *rtl8366rb_speed_str(unsigned speed) 
    756796{ 
    757797        switch (speed) { 
     
    10171056static struct switch_attr rtl8366rb_globals[] = { 
    10181057        { 
    10191058                .type = SWITCH_TYPE_INT, 
     1059                .name = "enable_learning", 
     1060                .description = "Enable learning, enable aging", 
     1061                .set = rtl8366rb_sw_set_learning_enable, 
     1062                .get = rtl8366rb_sw_get_learning_enable, 
     1063                .max = 1 
     1064        }, { 
     1065                .type = SWITCH_TYPE_INT, 
    10201066                .name = "enable_vlan", 
    10211067                .description = "Enable VLAN mode", 
    10221068                .set = rtl8366rb_sw_set_vlan_enable,