diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/ethernet/ti/cpsw.c | 25 | ||||
| -rw-r--r-- | drivers/net/ethernet/ti/cpsw_ale.c | 2 |
2 files changed, 12 insertions, 15 deletions
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 358edab9e72e..3e34cb8ac1d3 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c | |||
| @@ -2086,14 +2086,16 @@ static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev, | |||
| 2086 | int i; | 2086 | int i; |
| 2087 | 2087 | ||
| 2088 | for (i = 0; i < cpsw->data.slaves; i++) { | 2088 | for (i = 0; i < cpsw->data.slaves; i++) { |
| 2089 | if (vid == cpsw->slaves[i].port_vlan) | 2089 | if (vid == cpsw->slaves[i].port_vlan) { |
| 2090 | return -EINVAL; | 2090 | ret = -EINVAL; |
| 2091 | goto err; | ||
| 2092 | } | ||
| 2091 | } | 2093 | } |
| 2092 | } | 2094 | } |
| 2093 | 2095 | ||
| 2094 | dev_info(priv->dev, "Adding vlanid %d to vlan filter\n", vid); | 2096 | dev_info(priv->dev, "Adding vlanid %d to vlan filter\n", vid); |
| 2095 | ret = cpsw_add_vlan_ale_entry(priv, vid); | 2097 | ret = cpsw_add_vlan_ale_entry(priv, vid); |
| 2096 | 2098 | err: | |
| 2097 | pm_runtime_put(cpsw->dev); | 2099 | pm_runtime_put(cpsw->dev); |
| 2098 | return ret; | 2100 | return ret; |
| 2099 | } | 2101 | } |
| @@ -2119,22 +2121,17 @@ static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev, | |||
| 2119 | 2121 | ||
| 2120 | for (i = 0; i < cpsw->data.slaves; i++) { | 2122 | for (i = 0; i < cpsw->data.slaves; i++) { |
| 2121 | if (vid == cpsw->slaves[i].port_vlan) | 2123 | if (vid == cpsw->slaves[i].port_vlan) |
| 2122 | return -EINVAL; | 2124 | goto err; |
| 2123 | } | 2125 | } |
| 2124 | } | 2126 | } |
| 2125 | 2127 | ||
| 2126 | dev_info(priv->dev, "removing vlanid %d from vlan filter\n", vid); | 2128 | dev_info(priv->dev, "removing vlanid %d from vlan filter\n", vid); |
| 2127 | ret = cpsw_ale_del_vlan(cpsw->ale, vid, 0); | 2129 | ret = cpsw_ale_del_vlan(cpsw->ale, vid, 0); |
| 2128 | if (ret != 0) | 2130 | ret |= cpsw_ale_del_ucast(cpsw->ale, priv->mac_addr, |
| 2129 | return ret; | 2131 | HOST_PORT_NUM, ALE_VLAN, vid); |
| 2130 | 2132 | ret |= cpsw_ale_del_mcast(cpsw->ale, priv->ndev->broadcast, | |
| 2131 | ret = cpsw_ale_del_ucast(cpsw->ale, priv->mac_addr, | 2133 | 0, ALE_VLAN, vid); |
| 2132 | HOST_PORT_NUM, ALE_VLAN, vid); | 2134 | err: |
| 2133 | if (ret != 0) | ||
| 2134 | return ret; | ||
| 2135 | |||
| 2136 | ret = cpsw_ale_del_mcast(cpsw->ale, priv->ndev->broadcast, | ||
| 2137 | 0, ALE_VLAN, vid); | ||
| 2138 | pm_runtime_put(cpsw->dev); | 2135 | pm_runtime_put(cpsw->dev); |
| 2139 | return ret; | 2136 | return ret; |
| 2140 | } | 2137 | } |
diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c index 93dc05c194d3..5766225a4ce1 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c | |||
| @@ -394,7 +394,7 @@ int cpsw_ale_del_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask, | |||
| 394 | 394 | ||
| 395 | idx = cpsw_ale_match_addr(ale, addr, (flags & ALE_VLAN) ? vid : 0); | 395 | idx = cpsw_ale_match_addr(ale, addr, (flags & ALE_VLAN) ? vid : 0); |
| 396 | if (idx < 0) | 396 | if (idx < 0) |
| 397 | return -EINVAL; | 397 | return -ENOENT; |
| 398 | 398 | ||
| 399 | cpsw_ale_read(ale, idx, ale_entry); | 399 | cpsw_ale_read(ale, idx, ale_entry); |
| 400 | 400 | ||
