Add support for vlan filtering in dual EMAC mode.
Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
---
drivers/net/ethernet/ti/icssg/icssg_prueth.c | 29 +++++++++-----------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.c b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
index c568c84a032b..e031bccf31dc 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_prueth.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
@@ -822,19 +822,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_err(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;
}
@@ -843,18 +842,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_err(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;
}
--
2.34.1
On Mon, Dec 16, 2024 at 03:30:42PM +0530, MD Danish Anwar wrote:
> Add support for vlan filtering in dual EMAC mode.
>
> Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
> ---
> drivers/net/ethernet/ti/icssg/icssg_prueth.c | 29 +++++++++-----------
> 1 file changed, 13 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.c b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
> index c568c84a032b..e031bccf31dc 100644
> --- a/drivers/net/ethernet/ti/icssg/icssg_prueth.c
> +++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
> @@ -822,19 +822,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_err(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;
> }
>
> @@ -843,18 +842,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_err(emac->ndev, "VID del vid:%u port_mask:%X untag_mask %X\n",
> + vid, port_mask, untag_mask);
Why error? It doesn't look like error path, previously there was
netdev_dbg (made more sense in my opinion)
> + icssg_vtbl_modify(emac, vid, port_mask, untag_mask, false);
>
> - icssg_vtbl_modify(emac, vid, port_mask, untag_mask, false);
> - }
> return 0;
> }
>
> --
> 2.34.1
On 19/12/24 12:32 pm, Michal Swiatkowski wrote:
> On Mon, Dec 16, 2024 at 03:30:42PM +0530, MD Danish Anwar wrote:
>> Add support for vlan filtering in dual EMAC mode.
>>
>> Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
>> ---
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c | 29 +++++++++-----------
>> 1 file changed, 13 insertions(+), 16 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.c b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
>> index c568c84a032b..e031bccf31dc 100644
>> --- a/drivers/net/ethernet/ti/icssg/icssg_prueth.c
>> +++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
>> @@ -822,19 +822,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_err(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;
>> }
>>
>> @@ -843,18 +842,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_err(emac->ndev, "VID del vid:%u port_mask:%X untag_mask %X\n",
>> + vid, port_mask, untag_mask);
> Why error? It doesn't look like error path, previously there was
> netdev_dbg (made more sense in my opinion)
>
My bad. It should be netdev_dbg(). I'll change it in v2. Thanks
>> + icssg_vtbl_modify(emac, vid, port_mask, untag_mask, false);
>>
>> - icssg_vtbl_modify(emac, vid, port_mask, untag_mask, false);
>> - }
>> return 0;
>> }
>>
>> --
>> 2.34.1
--
Thanks and Regards,
Danish
© 2016 - 2025 Red Hat, Inc.