mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-31 19:32:36 +00:00
realtek: Fix bug in VLAN ingress and egress filtering
The ingress filter registers use 2 bits for each port to define the filtering state, whereas the egress filter uses 1 bit. So for for the ingress filter the register offset for a given port is: (port >> 4) << 4: since there are 16 entries in a register of 32 bits and for the egress filter: (port >> 5) << 4: since there are 32 entries in a register of 32 bits Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
This commit is contained in:
parent
28e972b2ea
commit
9ae927febd
@ -1071,14 +1071,14 @@ static int rtl83xx_vlan_filtering(struct dsa_switch *ds, int port,
|
||||
*/
|
||||
if (port != priv->cpu_port)
|
||||
sw_w32_mask(0b10 << ((port % 16) << 1), 0b01 << ((port % 16) << 1),
|
||||
priv->r->vlan_port_igr_filter + ((port >> 5) << 2));
|
||||
sw_w32_mask(0, BIT(port % 32), priv->r->vlan_port_egr_filter + ((port >> 4) << 2));
|
||||
priv->r->vlan_port_igr_filter + ((port >> 4) << 2));
|
||||
sw_w32_mask(0, BIT(port % 32), priv->r->vlan_port_egr_filter + ((port >> 5) << 2));
|
||||
} else {
|
||||
/* Disable ingress and egress filtering */
|
||||
if (port != priv->cpu_port)
|
||||
sw_w32_mask(0b11 << ((port % 16) << 1), 0,
|
||||
priv->r->vlan_port_igr_filter + ((port >> 5) << 2));
|
||||
sw_w32_mask(BIT(port % 32), 0, priv->r->vlan_port_egr_filter + ((port >> 4) << 2));
|
||||
priv->r->vlan_port_igr_filter + ((port >> 4) << 2));
|
||||
sw_w32_mask(BIT(port % 32), 0, priv->r->vlan_port_egr_filter + ((port >> 5) << 2));
|
||||
}
|
||||
|
||||
/* Do we need to do something to the CPU-Port, too? */
|
||||
|
Loading…
Reference in New Issue
Block a user