mirror of
https://github.com/immortalwrt/immortalwrt.git
synced 2025-08-11 06:11:53 +08:00

Backport accepted BCM5325 patches from net-next. These patches will be merged in the v6.17 kernel window. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
78 lines
2.5 KiB
Diff
78 lines
2.5 KiB
Diff
From 37883bbc45a8555d6eca88d3a9730504d2dac86c Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
|
|
Date: Sat, 14 Jun 2025 09:59:57 +0200
|
|
Subject: [PATCH] net: dsa: b53: prevent GMII_PORT_OVERRIDE_CTRL access on
|
|
BCM5325
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
BCM5325 doesn't implement GMII_PORT_OVERRIDE_CTRL register so we should
|
|
avoid reading or writing it.
|
|
PORT_OVERRIDE_RX_FLOW and PORT_OVERRIDE_TX_FLOW aren't defined on BCM5325
|
|
and we should use PORT_OVERRIDE_LP_FLOW_25 instead.
|
|
|
|
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-12-noltari@gmail.com
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/dsa/b53/b53_common.c | 21 +++++++++++++++++----
|
|
drivers/net/dsa/b53/b53_regs.h | 1 +
|
|
2 files changed, 18 insertions(+), 4 deletions(-)
|
|
|
|
--- a/drivers/net/dsa/b53/b53_common.c
|
|
+++ b/drivers/net/dsa/b53/b53_common.c
|
|
@@ -1279,6 +1279,8 @@ static void b53_force_link(struct b53_de
|
|
if (port == dev->imp_port) {
|
|
off = B53_PORT_OVERRIDE_CTRL;
|
|
val = PORT_OVERRIDE_EN;
|
|
+ } else if (is5325(dev)) {
|
|
+ return;
|
|
} else {
|
|
off = B53_GMII_PORT_OVERRIDE_CTRL(port);
|
|
val = GMII_PO_EN;
|
|
@@ -1303,6 +1305,8 @@ static void b53_force_port_config(struct
|
|
if (port == dev->imp_port) {
|
|
off = B53_PORT_OVERRIDE_CTRL;
|
|
val = PORT_OVERRIDE_EN;
|
|
+ } else if (is5325(dev)) {
|
|
+ return;
|
|
} else {
|
|
off = B53_GMII_PORT_OVERRIDE_CTRL(port);
|
|
val = GMII_PO_EN;
|
|
@@ -1333,10 +1337,19 @@ static void b53_force_port_config(struct
|
|
return;
|
|
}
|
|
|
|
- if (rx_pause)
|
|
- reg |= PORT_OVERRIDE_RX_FLOW;
|
|
- if (tx_pause)
|
|
- reg |= PORT_OVERRIDE_TX_FLOW;
|
|
+ if (rx_pause) {
|
|
+ if (is5325(dev))
|
|
+ reg |= PORT_OVERRIDE_LP_FLOW_25;
|
|
+ else
|
|
+ reg |= PORT_OVERRIDE_RX_FLOW;
|
|
+ }
|
|
+
|
|
+ if (tx_pause) {
|
|
+ if (is5325(dev))
|
|
+ reg |= PORT_OVERRIDE_LP_FLOW_25;
|
|
+ else
|
|
+ reg |= PORT_OVERRIDE_TX_FLOW;
|
|
+ }
|
|
|
|
b53_write8(dev, B53_CTRL_PAGE, off, reg);
|
|
}
|
|
--- a/drivers/net/dsa/b53/b53_regs.h
|
|
+++ b/drivers/net/dsa/b53/b53_regs.h
|
|
@@ -95,6 +95,7 @@
|
|
#define PORT_OVERRIDE_SPEED_10M (0 << PORT_OVERRIDE_SPEED_S)
|
|
#define PORT_OVERRIDE_SPEED_100M (1 << PORT_OVERRIDE_SPEED_S)
|
|
#define PORT_OVERRIDE_SPEED_1000M (2 << PORT_OVERRIDE_SPEED_S)
|
|
+#define PORT_OVERRIDE_LP_FLOW_25 BIT(3) /* BCM5325 only */
|
|
#define PORT_OVERRIDE_RV_MII_25 BIT(4) /* BCM5325 only */
|
|
#define PORT_OVERRIDE_RX_FLOW BIT(4)
|
|
#define PORT_OVERRIDE_TX_FLOW BIT(5)
|