From: Andrew Gaylard <ag@ffroot.co.za>
To: Andrew Lunn <andrew+netdev@lunn.ch>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: netdev@vger.kernel.org
Subject: [PATCH net-next] net: sunplus: also fix the byte order of 1c:50:1e MAC addresses
Date: Thu, 12 Nov 2026 14:37:38 +0200 [thread overview]
Message-ID: <20261112123738.429728-1-ag@ffroot.co.za> (raw)
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
reply other threads:[~2026-11-12 12:37 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261112123738.429728-1-ag@ffroot.co.za \
--to=ag@ffroot.co.za \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox