8b4936d77f09c4384d8f456ee5639c22619510f9
[openwrt/staging/pepe2k.git] /
1 From 4eecebbe332e3cfd8d0aaeb39d764748f25259f1 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
3 Date: Fri, 30 May 2025 23:33:13 +0200
4 Subject: [RFC PATCH net-next v2 07/10] net: dsa: b53: prevent
5 GMII_PORT_OVERRIDE_CTRL access on 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 Fixes: 5e004460f874 ("net: dsa: b53: Add helper to set link parameters")
16 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
17 Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
18 ---
19 drivers/net/dsa/b53/b53_common.c | 21 +++++++++++++++++----
20 drivers/net/dsa/b53/b53_regs.h | 1 +
21 2 files changed, 18 insertions(+), 4 deletions(-)
22
23 --- a/drivers/net/dsa/b53/b53_common.c
24 +++ b/drivers/net/dsa/b53/b53_common.c
25 @@ -1278,6 +1278,8 @@ static void b53_force_link(struct b53_de
26 if (port == dev->imp_port) {
27 off = B53_PORT_OVERRIDE_CTRL;
28 val = PORT_OVERRIDE_EN;
29 + } else if (is5325(dev)) {
30 + return;
31 } else {
32 off = B53_GMII_PORT_OVERRIDE_CTRL(port);
33 val = GMII_PO_EN;
34 @@ -1302,6 +1304,8 @@ static void b53_force_port_config(struct
35 if (port == dev->imp_port) {
36 off = B53_PORT_OVERRIDE_CTRL;
37 val = PORT_OVERRIDE_EN;
38 + } else if (is5325(dev)) {
39 + return;
40 } else {
41 off = B53_GMII_PORT_OVERRIDE_CTRL(port);
42 val = GMII_PO_EN;
43 @@ -1332,10 +1336,19 @@ static void b53_force_port_config(struct
44 return;
45 }
46
47 - if (rx_pause)
48 - reg |= PORT_OVERRIDE_RX_FLOW;
49 - if (tx_pause)
50 - reg |= PORT_OVERRIDE_TX_FLOW;
51 + if (rx_pause) {
52 + if (is5325(dev))
53 + reg |= PORT_OVERRIDE_LP_FLOW_25;
54 + else
55 + reg |= PORT_OVERRIDE_RX_FLOW;
56 + }
57 +
58 + if (tx_pause) {
59 + if (is5325(dev))
60 + reg |= PORT_OVERRIDE_LP_FLOW_25;
61 + else
62 + reg |= PORT_OVERRIDE_TX_FLOW;
63 + }
64
65 b53_write8(dev, B53_CTRL_PAGE, off, reg);
66 }
67 --- a/drivers/net/dsa/b53/b53_regs.h
68 +++ b/drivers/net/dsa/b53/b53_regs.h
69 @@ -95,6 +95,7 @@
70 #define PORT_OVERRIDE_SPEED_10M (0 << PORT_OVERRIDE_SPEED_S)
71 #define PORT_OVERRIDE_SPEED_100M (1 << PORT_OVERRIDE_SPEED_S)
72 #define PORT_OVERRIDE_SPEED_1000M (2 << PORT_OVERRIDE_SPEED_S)
73 +#define PORT_OVERRIDE_LP_FLOW_25 BIT(3) /* BCM5325 only */
74 #define PORT_OVERRIDE_RV_MII_25 BIT(4) /* BCM5325 only */
75 #define PORT_OVERRIDE_RX_FLOW BIT(4)
76 #define PORT_OVERRIDE_TX_FLOW BIT(5)