7f412a2b0ecff49f897c8cd0fd56b5d228c17433
[openwrt/openwrt.git] /
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
5 BCM5325
6 MIME-Version: 1.0
7 Content-Type: text/plain; charset=UTF-8
8 Content-Transfer-Encoding: 8bit
9
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.
14
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>
19 ---
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(-)
23
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)) {
31 + return;
32 } else {
33 off = B53_GMII_PORT_OVERRIDE_CTRL(port);
34 val = GMII_PO_EN;
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)) {
40 + return;
41 } else {
42 off = B53_GMII_PORT_OVERRIDE_CTRL(port);
43 val = GMII_PO_EN;
44 @@ -1333,10 +1337,19 @@ static void b53_force_port_config(struct
45 return;
46 }
47
48 - if (rx_pause)
49 - reg |= PORT_OVERRIDE_RX_FLOW;
50 - if (tx_pause)
51 - reg |= PORT_OVERRIDE_TX_FLOW;
52 + if (rx_pause) {
53 + if (is5325(dev))
54 + reg |= PORT_OVERRIDE_LP_FLOW_25;
55 + else
56 + reg |= PORT_OVERRIDE_RX_FLOW;
57 + }
58 +
59 + if (tx_pause) {
60 + if (is5325(dev))
61 + reg |= PORT_OVERRIDE_LP_FLOW_25;
62 + else
63 + reg |= PORT_OVERRIDE_TX_FLOW;
64 + }
65
66 b53_write8(dev, B53_CTRL_PAGE, off, reg);
67 }
68 --- a/drivers/net/dsa/b53/b53_regs.h
69 +++ b/drivers/net/dsa/b53/b53_regs.h
70 @@ -95,6 +95,7 @@
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)