lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250612083747.26531-5-noltari@gmail.com>
Date: Thu, 12 Jun 2025 10:37:37 +0200
From: Álvaro Fernández Rojas <noltari@...il.com>
To: jonas.gorski@...il.com,
	florian.fainelli@...adcom.com,
	andrew@...n.ch,
	olteanv@...il.com,
	davem@...emloft.net,
	edumazet@...gle.com,
	kuba@...nel.org,
	pabeni@...hat.com,
	horms@...nel.org,
	vivien.didelot@...il.com,
	netdev@...r.kernel.org,
	linux-kernel@...r.kernel.org,
	dgcbueu@...il.com
Cc: Álvaro Fernández Rojas <noltari@...il.com>
Subject: [PATCH net-next v3 04/14] net: dsa: b53: detect BCM5325 variants

Older BCM5325M switches lack some registers that newer BCM5325E have, so
we need to be able to differentiate them in order to check whether the
registers are available or not.

Signed-off-by: Álvaro Fernández Rojas <noltari@...il.com>
---
 drivers/net/dsa/b53/b53_common.c | 34 ++++++++++++++++++++++++++------
 drivers/net/dsa/b53/b53_priv.h   | 16 +++++++++++++--
 2 files changed, 42 insertions(+), 8 deletions(-)

 v3: detect BCM5325 variants as requested by Florian.

diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c
index 222107223d109..2975dab6ee0bb 100644
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
@@ -2490,8 +2490,18 @@ struct b53_chip_data {
 
 static const struct b53_chip_data b53_switch_chips[] = {
 	{
-		.chip_id = BCM5325_DEVICE_ID,
-		.dev_name = "BCM5325",
+		.chip_id = BCM5325M_DEVICE_ID,
+		.dev_name = "BCM5325M",
+		.vlans = 16,
+		.enabled_ports = 0x3f,
+		.arl_bins = 2,
+		.arl_buckets = 1024,
+		.imp_port = 5,
+		.duplex_reg = B53_DUPLEX_STAT_FE,
+	},
+	{
+		.chip_id = BCM5325E_DEVICE_ID,
+		.dev_name = "BCM5325E",
 		.vlans = 16,
 		.enabled_ports = 0x3f,
 		.arl_bins = 2,
@@ -2938,10 +2948,22 @@ int b53_switch_detect(struct b53_device *dev)
 		b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, 0xf);
 		b53_read16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, &tmp);
 
-		if (tmp == 0xf)
-			dev->chip_id = BCM5325_DEVICE_ID;
-		else
+		if (tmp == 0xf) {
+			u32 phy_id;
+			int val;
+
+			val = b53_phy_read16(dev->ds, 0, MII_PHYSID1);
+			phy_id = (val & 0xffff) << 16;
+			val = b53_phy_read16(dev->ds, 0, MII_PHYSID2);
+			phy_id |= (val & 0xffff);
+
+			if (phy_id == 0x0143bc30)
+				dev->chip_id = BCM5325E_DEVICE_ID;
+			else
+				dev->chip_id = BCM5325M_DEVICE_ID;
+		} else {
 			dev->chip_id = BCM5365_DEVICE_ID;
+		}
 		break;
 	case BCM5389_DEVICE_ID:
 	case BCM5395_DEVICE_ID:
@@ -2975,7 +2997,7 @@ int b53_switch_detect(struct b53_device *dev)
 		}
 	}
 
-	if (dev->chip_id == BCM5325_DEVICE_ID)
+	if (is5325(dev))
 		return b53_read8(dev, B53_STAT_PAGE, B53_REV_ID_25,
 				 &dev->core_rev);
 	else
diff --git a/drivers/net/dsa/b53/b53_priv.h b/drivers/net/dsa/b53/b53_priv.h
index a5ef7071ba07b..deea4d83f0e93 100644
--- a/drivers/net/dsa/b53/b53_priv.h
+++ b/drivers/net/dsa/b53/b53_priv.h
@@ -60,7 +60,8 @@ struct b53_io_ops {
 
 enum {
 	BCM4908_DEVICE_ID = 0x4908,
-	BCM5325_DEVICE_ID = 0x25,
+	BCM5325M_DEVICE_ID = 0x25,
+	BCM5325E_DEVICE_ID = 0x25e,
 	BCM5365_DEVICE_ID = 0x65,
 	BCM5389_DEVICE_ID = 0x89,
 	BCM5395_DEVICE_ID = 0x95,
@@ -162,7 +163,18 @@ struct b53_device {
 
 static inline int is5325(struct b53_device *dev)
 {
-	return dev->chip_id == BCM5325_DEVICE_ID;
+	return dev->chip_id == BCM5325E_DEVICE_ID ||
+		dev->chip_id == BCM5325M_DEVICE_ID;
+}
+
+static inline int is5325e(struct b53_device *dev)
+{
+	return dev->chip_id == BCM5325E_DEVICE_ID;
+}
+
+static inline int is5325m(struct b53_device *dev)
+{
+	return dev->chip_id == BCM5325M_DEVICE_ID;
 }
 
 static inline int is5365(struct b53_device *dev)
-- 
2.39.5


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ