c098e541405779c5be4fdf8724cc44e1ef53e452
[openwrt/staging/pepe2k.git] /
1 From 800728abd9f83bda4de62a30ce62a8b41c242020 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
3 Date: Sat, 14 Jun 2025 09:59:55 +0200
4 Subject: [PATCH] net: dsa: b53: prevent DIS_LEARNING access on BCM5325
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 BCM5325 doesn't implement DIS_LEARNING register so we should avoid reading
10 or writing it.
11
12 Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
13 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
14 Link: https://patch.msgid.link/20250614080000.1884236-10-noltari@gmail.com
15 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
16 ---
17 drivers/net/dsa/b53/b53_common.c | 11 ++++++++++-
18 1 file changed, 10 insertions(+), 1 deletion(-)
19
20 --- a/drivers/net/dsa/b53/b53_common.c
21 +++ b/drivers/net/dsa/b53/b53_common.c
22 @@ -593,6 +593,9 @@ static void b53_port_set_learning(struct
23 {
24 u16 reg;
25
26 + if (is5325(dev))
27 + return;
28 +
29 b53_read16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, &reg);
30 if (learning)
31 reg &= ~BIT(port);
32 @@ -2247,7 +2250,13 @@ int b53_br_flags_pre(struct dsa_switch *
33 struct switchdev_brport_flags flags,
34 struct netlink_ext_ack *extack)
35 {
36 - if (flags.mask & ~(BR_FLOOD | BR_MCAST_FLOOD | BR_LEARNING))
37 + struct b53_device *dev = ds->priv;
38 + unsigned long mask = (BR_FLOOD | BR_MCAST_FLOOD);
39 +
40 + if (!is5325(dev))
41 + mask |= BR_LEARNING;
42 +
43 + if (flags.mask & ~mask)
44 return -EINVAL;
45
46 return 0;