net: ti: icssg-prueth: Add VLAN support in EMAC mode

Add support for VLAN filtering in dual EMAC mode.

Reviewed-by: Roger Quadros <rogerq@kernel.org>
Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
MD Danish Anwar 2025-01-10 13:58:49 +05:30 committed by Paolo Abeni
parent 624d7a8a9d
commit 816b02e63a

View File

@ -907,19 +907,18 @@ static int emac_ndo_vlan_rx_add_vid(struct net_device *ndev,
{
struct prueth_emac *emac = netdev_priv(ndev);
struct prueth *prueth = emac->prueth;
int port_mask = BIT(emac->port_id);
int untag_mask = 0;
int port_mask;
if (prueth->is_hsr_offload_mode) {
port_mask = BIT(PRUETH_PORT_HOST) | BIT(emac->port_id);
untag_mask = 0;
if (prueth->is_hsr_offload_mode)
port_mask |= BIT(PRUETH_PORT_HOST);
netdev_dbg(emac->ndev, "VID add vid:%u port_mask:%X untag_mask %X\n",
vid, port_mask, untag_mask);
netdev_dbg(emac->ndev, "VID add vid:%u port_mask:%X untag_mask %X\n",
vid, port_mask, untag_mask);
icssg_vtbl_modify(emac, vid, port_mask, untag_mask, true);
icssg_set_pvid(emac->prueth, vid, emac->port_id);
icssg_vtbl_modify(emac, vid, port_mask, untag_mask, true);
icssg_set_pvid(emac->prueth, vid, emac->port_id);
}
return 0;
}
@ -928,18 +927,16 @@ static int emac_ndo_vlan_rx_del_vid(struct net_device *ndev,
{
struct prueth_emac *emac = netdev_priv(ndev);
struct prueth *prueth = emac->prueth;
int port_mask = BIT(emac->port_id);
int untag_mask = 0;
int port_mask;
if (prueth->is_hsr_offload_mode) {
if (prueth->is_hsr_offload_mode)
port_mask = BIT(PRUETH_PORT_HOST);
untag_mask = 0;
netdev_dbg(emac->ndev, "VID del vid:%u port_mask:%X untag_mask %X\n",
vid, port_mask, untag_mask);
netdev_dbg(emac->ndev, "VID del vid:%u port_mask:%X untag_mask %X\n",
vid, port_mask, untag_mask);
icssg_vtbl_modify(emac, vid, port_mask, untag_mask, false);
icssg_vtbl_modify(emac, vid, port_mask, untag_mask, false);
}
return 0;
}