summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCiprian Regus <ciprian.regus@analog.com>2023-09-08 15:58:08 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-09-19 12:30:28 +0200
commit93546f928ab6768ec1d77f88e66af90322338f92 (patch)
treec4b8a600dd79b801d3413393e45a5f8144e84676
parent499d86b62723207d2cef19e9c6796c1d0970c575 (diff)
downloadlinux-stable-93546f928ab6768ec1d77f88e66af90322338f92.tar.gz
linux-stable-93546f928ab6768ec1d77f88e66af90322338f92.tar.bz2
linux-stable-93546f928ab6768ec1d77f88e66af90322338f92.zip
net:ethernet:adi:adin1110: Fix forwarding offload
[ Upstream commit 32530dba1bd48da4437d18d9a8dbc9d2826938a6 ] Currently, when a new fdb entry is added (with both ports of the ADIN2111 bridged), the driver configures the MAC filters for the wrong port, which results in the forwarding being done by the host, and not actually hardware offloaded. The ADIN2111 offloads the forwarding by setting filters on the destination MAC address of incoming frames. Based on these, they may be routed to the other port. Thus, if a frame has to be forwarded from port 1 to port 2, the required configuration for the ADDR_FILT_UPRn register should set the APPLY2PORT1 bit (instead of APPLY2PORT2, as it's currently the case). Fixes: bc93e19d088b ("net: ethernet: adi: Add ADIN1110 support") Signed-off-by: Ciprian Regus <ciprian.regus@analog.com> Reviewed-by: Simon Horman <horms@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--drivers/net/ethernet/adi/adin1110.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/adi/adin1110.c b/drivers/net/ethernet/adi/adin1110.c
index 1c009b485188..ca66b747b7c5 100644
--- a/drivers/net/ethernet/adi/adin1110.c
+++ b/drivers/net/ethernet/adi/adin1110.c
@@ -1385,7 +1385,7 @@ static int adin1110_fdb_add(struct adin1110_port_priv *port_priv,
return -ENOMEM;
other_port = priv->ports[!port_priv->nr];
- port_rules = adin1110_port_rules(port_priv, false, true);
+ port_rules = adin1110_port_rules(other_port, false, true);
eth_broadcast_addr(mask);
return adin1110_write_mac_address(other_port, mac_nr, (u8 *)fdb->addr,