realtek: set up L2 table entries properly
[openwrt/staging/hauke.git] / target / linux / realtek / files-5.10 / drivers / net / dsa / rtl83xx / dsa.c
index 10e6103f0d635e87de5cf061b97ec5bfeef40f01..a9ca85c7f5d5403b3285ba44a1e3a74d4e3b10eb 100644 (file)
@@ -1537,23 +1537,32 @@ static int rtl83xx_vlan_del(struct dsa_switch *ds, int port,
 
 static void rtl83xx_setup_l2_uc_entry(struct rtl838x_l2_entry *e, int port, int vid, u64 mac)
 {
-       e->is_ip_mc = e->is_ipv6_mc  = false;
+       memset(e, 0, sizeof(*e));
+
+       e->type = L2_UNICAST;
        e->valid = true;
+
        e->age = 3;
-       e->port = port,
-       e->vid = vid;
+       e->is_static = true;
+
+       e->port = port;
+
+       e->rvid = e->vid = vid;
+       e->is_ip_mc = e->is_ipv6_mc = false;
        u64_to_ether_addr(mac, e->mac);
 }
 
-static void rtl83xx_setup_l2_mc_entry(struct rtl838x_switch_priv *priv,
-                                     struct rtl838x_l2_entry *e, int vid, u64 mac, int mc_group)
+static void rtl83xx_setup_l2_mc_entry(struct rtl838x_l2_entry *e, int vid, u64 mac, int mc_group)
 {
-       e->is_ip_mc = e->is_ipv6_mc  = false;
+       memset(e, 0, sizeof(*e));
+
+       e->type = L2_MULTICAST;
        e->valid = true;
+
        e->mc_portmask_index = mc_group;
-       e->type = L2_MULTICAST;
+
        e->rvid = e->vid = vid;
-       pr_debug("%s: vid: %d, rvid: %d\n", __func__, e->vid, e->rvid);
+       e->is_ip_mc = e->is_ipv6_mc = false;
        u64_to_ether_addr(mac, e->mac);
 }
 
@@ -1768,7 +1777,7 @@ static void rtl83xx_port_mdb_add(struct dsa_switch *ds, int port,
                                err = -ENOTSUPP;
                                goto out;
                        }
-                       rtl83xx_setup_l2_mc_entry(priv, &e, vid, mac, mc_group);
+                       rtl83xx_setup_l2_mc_entry(&e, vid, mac, mc_group);
                        priv->r->write_l2_entry_using_hash(idx >> 2, idx & 0x3, &e);
                }
                goto out;
@@ -1789,7 +1798,7 @@ static void rtl83xx_port_mdb_add(struct dsa_switch *ds, int port,
                                err = -ENOTSUPP;
                                goto out;
                        }
-                       rtl83xx_setup_l2_mc_entry(priv, &e, vid, mac, mc_group);
+                       rtl83xx_setup_l2_mc_entry(&e, vid, mac, mc_group);
                        priv->r->write_cam(idx, &e);
                }
                goto out;