[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
<BY3PR18MB47078A957ED7320DC36B5F02A01B2@BY3PR18MB4707.namprd18.prod.outlook.com>
Date: Mon, 29 Apr 2024 16:07:14 +0000
From: Sai Krishna Gajula <saikrishnag@...vell.com>
To: Jiawen Wu <jiawenwu@...stnetic.com>,
"davem@...emloft.net"
<davem@...emloft.net>,
"edumazet@...gle.com" <edumazet@...gle.com>,
"kuba@...nel.org" <kuba@...nel.org>,
"pabeni@...hat.com" <pabeni@...hat.com>,
"rmk+kernel@...linux.org.uk" <rmk+kernel@...linux.org.uk>,
"andrew@...n.ch"
<andrew@...n.ch>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>
CC: "mengyuanlou@...-swift.com" <mengyuanlou@...-swift.com>,
"duanqiangwen@...-swift.com" <duanqiangwen@...-swift.com>
Subject: RE: [PATCH net v2 3/4] net: wangxun: match VLAN CTAG and STAG
features
> -----Original Message-----
> From: Jiawen Wu <jiawenwu@...stnetic.com>
> Sent: Monday, April 29, 2024 3:55 PM
> To: davem@...emloft.net; edumazet@...gle.com; kuba@...nel.org;
> pabeni@...hat.com; rmk+kernel@...linux.org.uk; andrew@...n.ch;
> netdev@...r.kernel.org
> Cc: mengyuanlou@...-swift.com; duanqiangwen@...-swift.com; Jiawen Wu
> <jiawenwu@...stnetic.com>
> Subject: [PATCH net v2 3/4] net: wangxun: match VLAN CTAG and
> STAG features
>
> Hardware requires VLAN CTAG and STAG configuration always matches. And
> whether VLAN CTAG or STAG changes, the configuration needs to be changed
> as well.
>
> Fixes: 6670f1ece2c8 ("net: txgbe: Add netdev features support")
> Signed-off-by: Jiawen Wu <jiawenwu@...stnetic.com>
> ---
> drivers/net/ethernet/wangxun/libwx/wx_lib.c | 46 +++++++++++++++++++
> drivers/net/ethernet/wangxun/libwx/wx_lib.h | 2 +
> drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 1 +
> .../net/ethernet/wangxun/txgbe/txgbe_main.c | 1 +
> 4 files changed, 50 insertions(+)
>
> diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.c
> b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
> index 667a5675998c..aefd78455468 100644
> --- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c
> +++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
> @@ -2701,6 +2701,52 @@ int wx_set_features(struct net_device *netdev,
> netdev_features_t features) } EXPORT_SYMBOL(wx_set_features);
>
> +netdev_features_t wx_fix_features(struct net_device *netdev,
> + netdev_features_t features)
> +{
> + netdev_features_t changed = netdev->features ^ features;
> +
> + if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) {
> + if (features & NETIF_F_HW_VLAN_CTAG_FILTER)
> + features |= NETIF_F_HW_VLAN_STAG_FILTER;
> + else
> + features &= ~NETIF_F_HW_VLAN_STAG_FILTER;
> + }
> + if (changed & NETIF_F_HW_VLAN_STAG_FILTER) {
> + if (features & NETIF_F_HW_VLAN_STAG_FILTER)
> + features |= NETIF_F_HW_VLAN_CTAG_FILTER;
> + else
> + features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
> + }
> + if (changed & NETIF_F_HW_VLAN_CTAG_RX) {
> + if (features & NETIF_F_HW_VLAN_CTAG_RX)
> + features |= NETIF_F_HW_VLAN_STAG_RX;
> + else
> + features &= ~NETIF_F_HW_VLAN_STAG_RX;
> + }
> + if (changed & NETIF_F_HW_VLAN_STAG_RX) {
> + if (features & NETIF_F_HW_VLAN_STAG_RX)
> + features |= NETIF_F_HW_VLAN_CTAG_RX;
> + else
> + features &= ~NETIF_F_HW_VLAN_CTAG_RX;
> + }
> + if (changed & NETIF_F_HW_VLAN_CTAG_TX) {
> + if (features & NETIF_F_HW_VLAN_CTAG_TX)
> + features |= NETIF_F_HW_VLAN_STAG_TX;
> + else
> + features &= ~NETIF_F_HW_VLAN_STAG_TX;
> + }
> + if (changed & NETIF_F_HW_VLAN_STAG_TX) {
> + if (features & NETIF_F_HW_VLAN_STAG_TX)
> + features |= NETIF_F_HW_VLAN_CTAG_TX;
> + else
> + features &= ~NETIF_F_HW_VLAN_CTAG_TX;
> + }
> +
> + return features;
> +}
> +EXPORT_SYMBOL(wx_fix_features);
> +
> void wx_set_ring(struct wx *wx, u32 new_tx_count,
> u32 new_rx_count, struct wx_ring *temp_ring) { diff --git
> a/drivers/net/ethernet/wangxun/libwx/wx_lib.h
> b/drivers/net/ethernet/wangxun/libwx/wx_lib.h
> index ec909e876720..c41b29ea812f 100644
> --- a/drivers/net/ethernet/wangxun/libwx/wx_lib.h
> +++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.h
> @@ -30,6 +30,8 @@ int wx_setup_resources(struct wx *wx); void
> wx_get_stats64(struct net_device *netdev,
> struct rtnl_link_stats64 *stats); int wx_set_features(struct
> net_device *netdev, netdev_features_t features);
> +netdev_features_t wx_fix_features(struct net_device *netdev,
> + netdev_features_t features);
> void wx_set_ring(struct wx *wx, u32 new_tx_count,
> u32 new_rx_count, struct wx_ring *temp_ring);
>
> diff --git a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> index fdd6b4f70b7a..e894e01d030d 100644
> --- a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> +++ b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
> @@ -499,6 +499,7 @@ static const struct net_device_ops ngbe_netdev_ops =
> {
> .ndo_start_xmit = wx_xmit_frame,
> .ndo_set_rx_mode = wx_set_rx_mode,
> .ndo_set_features = wx_set_features,
> + .ndo_fix_features = wx_fix_features,
> .ndo_validate_addr = eth_validate_addr,
> .ndo_set_mac_address = wx_set_mac,
> .ndo_get_stats64 = wx_get_stats64,
> diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> index bd4624d14ca0..b3c0058b045d 100644
> --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
> @@ -428,6 +428,7 @@ static const struct net_device_ops txgbe_netdev_ops
> = {
> .ndo_start_xmit = wx_xmit_frame,
> .ndo_set_rx_mode = wx_set_rx_mode,
> .ndo_set_features = wx_set_features,
> + .ndo_fix_features = wx_fix_features,
> .ndo_validate_addr = eth_validate_addr,
> .ndo_set_mac_address = wx_set_mac,
> .ndo_get_stats64 = wx_get_stats64,
> --
> 2.27.0
>
Reviewed-by: Sai Krishna <saikrishnag@...vell.com
Powered by blists - more mailing lists