Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next] net: sunplus: also fix the byte order of 1c:50:1e MAC addresses
@ 2026-11-12 12:37 Andrew Gaylard
  0 siblings, 0 replies; only message in thread
From: Andrew Gaylard @ 2026-11-12 12:37 UTC (permalink / raw)
  To: Andrew Lunn, David S . Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni
  Cc: netdev

The driver reverses a MAC address from the OTP when it finds the
Sunplus OUI fc:4b:bc at the wrong end. Newer SP7021 chips have
a different Sunplus OUI (1c:50:1e), possibly stored in the same
reversed order, which the driver does not recognise. If the reversed
address has the multicast bit set, the driver rejects it and uses a
random address; otherwise it uses the reversed address as it is.

Handle both these OUIs. An address that already starts with either OUI
is left as is.  On chips that used the reversed address, the interface
now gets the correct address, so configuration tied to the old address
(DHCP reservations, udev or networkd rules) will need updating.

Tested on chips that needed each of these OUIs to be reversed.

Signed-off-by: Andrew Gaylard <ag@ffroot.co.za>
---
 drivers/net/ethernet/sunplus/spl2sw_driver.c | 36 +++++++++++++++-----
 1 file changed, 28 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/sunplus/spl2sw_driver.c b/drivers/net/ethernet/sunplus/spl2sw_driver.c
index 5e0e4c9ecbb0..ab0318bc6f6c 100644
--- a/drivers/net/ethernet/sunplus/spl2sw_driver.c
+++ b/drivers/net/ethernet/sunplus/spl2sw_driver.c
@@ -203,18 +203,38 @@ static const struct net_device_ops netdev_ops = {
 	.ndo_tx_timeout = spl2sw_ethernet_tx_timeout,
 };
 
+static const u8 spl2sw_sunplus_ouis[][3] = {
+	{ 0xfc, 0x4b, 0xbc },
+	{ 0x1c, 0x50, 0x1e },
+};
+
 static void spl2sw_check_mac_vendor_id_and_convert(u8 *mac_addr)
 {
-	/* Byte order of MAC address of some samples are reversed.
-	 * Check vendor id and convert byte order if it is wrong.
-	 * OUI of Sunplus: fc:4b:bc
+	unsigned int i;
+
+	/* Some chips have the byte order of the MAC address reversed.
+	 * Check for Sunplus OUIs and fix the byte order if it is.
 	 */
-	if (mac_addr[5] == 0xfc && mac_addr[4] == 0x4b && mac_addr[3] == 0xbc &&
-	    (mac_addr[0] != 0xfc || mac_addr[1] != 0x4b || mac_addr[2] != 0xbc)) {
+	for (i = 0; i < ARRAY_SIZE(spl2sw_sunplus_ouis); i++) {
+		const u8 *oui = spl2sw_sunplus_ouis[i];
 
-		swap(mac_addr[0], mac_addr[5]);
-		swap(mac_addr[1], mac_addr[4]);
-		swap(mac_addr[2], mac_addr[3]);
+		if (mac_addr[0] == oui[0] &&
+		    mac_addr[1] == oui[1] &&
+		    mac_addr[2] == oui[2])
+			return;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(spl2sw_sunplus_ouis); i++) {
+		const u8 *oui = spl2sw_sunplus_ouis[i];
+
+		if (mac_addr[5] == oui[0] &&
+		    mac_addr[4] == oui[1] &&
+		    mac_addr[3] == oui[2]) {
+			swap(mac_addr[0], mac_addr[5]);
+			swap(mac_addr[1], mac_addr[4]);
+			swap(mac_addr[2], mac_addr[3]);
+			return;
+		}
 	}
 }
 

base-commit: 676f3aace662fbbc180b3898b190a372fa2a516b
-- 
2.53.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-11-12 12:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-12 12:37 [PATCH net-next] net: sunplus: also fix the byte order of 1c:50:1e MAC addresses Andrew Gaylard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox