| From 1c58dca55901cdc10d3bd24ab6b48553c663c747 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 14 Jun 2025 09:59:54 +0200 |
| Subject: net: dsa: b53: fix IP_MULTICAST_CTRL on BCM5325 |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Álvaro Fernández Rojas <noltari@gmail.com> |
| |
| [ Upstream commit 044d5ce2788b165798bfd173548e61bf7b6baf4d ] |
| |
| BCM5325 doesn't implement B53_UC_FWD_EN, B53_MC_FWD_EN or B53_IPMC_FWD_EN. |
| |
| Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> |
| Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> |
| Link: https://patch.msgid.link/20250614080000.1884236-9-noltari@gmail.com |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/dsa/b53/b53_common.c | 18 +++++++++++------- |
| drivers/net/dsa/b53/b53_regs.h | 1 + |
| 2 files changed, 12 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c |
| index 3a1266f535e2..b0e283bc3efb 100644 |
| --- a/drivers/net/dsa/b53/b53_common.c |
| +++ b/drivers/net/dsa/b53/b53_common.c |
| @@ -344,14 +344,18 @@ static void b53_set_forwarding(struct b53_device *dev, int enable) |
| b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt); |
| mgmt |= B53_MII_DUMB_FWDG_EN; |
| b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt); |
| - } |
| |
| - /* Look at B53_UC_FWD_EN and B53_MC_FWD_EN to decide whether |
| - * frames should be flooded or not. |
| - */ |
| - b53_read8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, &mgmt); |
| - mgmt |= B53_UC_FWD_EN | B53_MC_FWD_EN | B53_IPMC_FWD_EN; |
| - b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt); |
| + /* Look at B53_UC_FWD_EN and B53_MC_FWD_EN to decide whether |
| + * frames should be flooded or not. |
| + */ |
| + b53_read8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, &mgmt); |
| + mgmt |= B53_UC_FWD_EN | B53_MC_FWD_EN | B53_IPMC_FWD_EN; |
| + b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt); |
| + } else { |
| + b53_read8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, &mgmt); |
| + mgmt |= B53_IP_MCAST_25; |
| + b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt); |
| + } |
| } |
| |
| static void b53_enable_vlan(struct b53_device *dev, int port, bool enable, |
| diff --git a/drivers/net/dsa/b53/b53_regs.h b/drivers/net/dsa/b53/b53_regs.h |
| index e5776545a8a0..77fb7ae660b8 100644 |
| --- a/drivers/net/dsa/b53/b53_regs.h |
| +++ b/drivers/net/dsa/b53/b53_regs.h |
| @@ -104,6 +104,7 @@ |
| |
| /* IP Multicast control (8 bit) */ |
| #define B53_IP_MULTICAST_CTRL 0x21 |
| +#define B53_IP_MCAST_25 BIT(0) |
| #define B53_IPMC_FWD_EN BIT(1) |
| #define B53_UC_FWD_EN BIT(6) |
| #define B53_MC_FWD_EN BIT(7) |
| -- |
| 2.39.5 |
| |