You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.4 KiB
88 lines
3.4 KiB
From a3b77657d4ac7047d28e8fa89375ea4a2d040dc4 Mon Sep 17 00:00:00 2001
|
|
From: Igor Russkikh <irusskik@redhat.com>
|
|
Date: Fri, 6 Nov 2020 18:37:17 -0500
|
|
Subject: [PATCH 060/139] [netdrv] net: atlantic: better loopback mode handling
|
|
|
|
Message-id: <1604687916-15087-61-git-send-email-irusskik@redhat.com>
|
|
Patchwork-id: 338488
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.4 BZ 1857861 060/139] net: atlantic: better loopback mode handling
|
|
Bugzilla: 1857861
|
|
RH-Acked-by: David Arcari <darcari@redhat.com>
|
|
RH-Acked-by: John Linville <linville@redhat.com>
|
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/1857861
|
|
|
|
commit b42726fcf76e9367e524392e0ead7e672cc0791c
|
|
Author: Nikita Danilov <ndanilov@marvell.com>
|
|
Date: Fri Feb 14 18:44:54 2020 +0300
|
|
|
|
net: atlantic: better loopback mode handling
|
|
|
|
Add checks to not enable multiple loopback modes simultaneously,
|
|
It was also discovered that for dma loopback to function correctly
|
|
promisc mode should be enabled on device.
|
|
|
|
Fixes: ea4b4d7fc106 ("net: atlantic: loopback tests via private flags")
|
|
Signed-off-by: Nikita Danilov <ndanilov@marvell.com>
|
|
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
|
|
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
|
|
Signed-off-by: Igor Russkikh <irusskik@redhat.com>
|
|
|
|
Cc: David Arcari <darcari@redhat.com>
|
|
Cc: Igor Russkikh <irusskik@redhat.com>
|
|
Signed-off-by: Jan Stancek <jstancek@redhat.com>
|
|
---
|
|
drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c | 5 +++++
|
|
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 13 ++++++++-----
|
|
2 files changed, 13 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
|
|
index a1f99bef4a68..7b55633d2cb9 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
|
|
@@ -722,6 +722,11 @@ static int aq_ethtool_set_priv_flags(struct net_device *ndev, u32 flags)
|
|
if (flags & ~AQ_PRIV_FLAGS_MASK)
|
|
return -EOPNOTSUPP;
|
|
|
|
+ if (hweight32((flags | priv_flags) & AQ_HW_LOOPBACK_MASK) > 1) {
|
|
+ netdev_info(ndev, "Can't enable more than one loopback simultaneously\n");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
cfg->priv_flags = flags;
|
|
|
|
if ((priv_flags ^ flags) & BIT(AQ_HW_LOOPBACK_DMA_NET)) {
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
|
|
index 9acdb3fbb750..d20d91cdece8 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
|
|
@@ -885,13 +885,16 @@ static int hw_atl_b0_hw_packet_filter_set(struct aq_hw_s *self,
|
|
{
|
|
struct aq_nic_cfg_s *cfg = self->aq_nic_cfg;
|
|
unsigned int i = 0U;
|
|
+ u32 vlan_promisc;
|
|
+ u32 l2_promisc;
|
|
|
|
- hw_atl_rpfl2promiscuous_mode_en_set(self,
|
|
- IS_FILTER_ENABLED(IFF_PROMISC));
|
|
+ l2_promisc = IS_FILTER_ENABLED(IFF_PROMISC) ||
|
|
+ !!(cfg->priv_flags & BIT(AQ_HW_LOOPBACK_DMA_NET));
|
|
+ vlan_promisc = l2_promisc || cfg->is_vlan_force_promisc;
|
|
|
|
- hw_atl_rpf_vlan_prom_mode_en_set(self,
|
|
- IS_FILTER_ENABLED(IFF_PROMISC) ||
|
|
- cfg->is_vlan_force_promisc);
|
|
+ hw_atl_rpfl2promiscuous_mode_en_set(self, l2_promisc);
|
|
+
|
|
+ hw_atl_rpf_vlan_prom_mode_en_set(self, vlan_promisc);
|
|
|
|
hw_atl_rpfl2multicast_flr_en_set(self,
|
|
IS_FILTER_ENABLED(IFF_ALLMULTI) &&
|
|
--
|
|
2.13.6
|
|
|