1 From 37883bbc45a8555d6eca88d3a9730504d2dac86c 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:57 +0200
4 Subject: [PATCH] net: dsa: b53: prevent GMII_PORT_OVERRIDE_CTRL access on
7 Content-Type: text/plain; charset=UTF-8
8 Content-Transfer-Encoding: 8bit
10 BCM5325 doesn't implement GMII_PORT_OVERRIDE_CTRL register so we should
11 avoid reading or writing it.
12 PORT_OVERRIDE_RX_FLOW and PORT_OVERRIDE_TX_FLOW aren't defined on BCM5325
13 and we should use PORT_OVERRIDE_LP_FLOW_25 instead.
15 Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
16 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
17 Link: https://patch.msgid.link/20250614080000.1884236-12-noltari@gmail.com
18 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
20 drivers/net/dsa/b53/b53_common.c | 21 +++++++++++++++++----
21 drivers/net/dsa/b53/b53_regs.h | 1 +
22 2 files changed, 18 insertions(+), 4 deletions(-)
24 --- a/drivers/net/dsa/b53/b53_common.c
25 +++ b/drivers/net/dsa/b53/b53_common.c
26 @@ -1279,6 +1279,8 @@ static void b53_force_link(struct b53_de
27 if (port == dev->imp_port) {
28 off = B53_PORT_OVERRIDE_CTRL;
29 val = PORT_OVERRIDE_EN;
30 + } else if (is5325(dev)) {
33 off = B53_GMII_PORT_OVERRIDE_CTRL(port);
35 @@ -1303,6 +1305,8 @@ static void b53_force_port_config(struct
36 if (port == dev->imp_port) {
37 off = B53_PORT_OVERRIDE_CTRL;
38 val = PORT_OVERRIDE_EN;
39 + } else if (is5325(dev)) {
42 off = B53_GMII_PORT_OVERRIDE_CTRL(port);
44 @@ -1333,10 +1337,19 @@ static void b53_force_port_config(struct
49 - reg |= PORT_OVERRIDE_RX_FLOW;
51 - reg |= PORT_OVERRIDE_TX_FLOW;
54 + reg |= PORT_OVERRIDE_LP_FLOW_25;
56 + reg |= PORT_OVERRIDE_RX_FLOW;
61 + reg |= PORT_OVERRIDE_LP_FLOW_25;
63 + reg |= PORT_OVERRIDE_TX_FLOW;
66 b53_write8(dev, B53_CTRL_PAGE, off, reg);
68 --- a/drivers/net/dsa/b53/b53_regs.h
69 +++ b/drivers/net/dsa/b53/b53_regs.h
71 #define PORT_OVERRIDE_SPEED_10M (0 << PORT_OVERRIDE_SPEED_S)
72 #define PORT_OVERRIDE_SPEED_100M (1 << PORT_OVERRIDE_SPEED_S)
73 #define PORT_OVERRIDE_SPEED_1000M (2 << PORT_OVERRIDE_SPEED_S)
74 +#define PORT_OVERRIDE_LP_FLOW_25 BIT(3) /* BCM5325 only */
75 #define PORT_OVERRIDE_RV_MII_25 BIT(4) /* BCM5325 only */
76 #define PORT_OVERRIDE_RX_FLOW BIT(4)
77 #define PORT_OVERRIDE_TX_FLOW BIT(5)