[U-Boot] [PATCH 3/4] sun8i: On H3 Use word 1 instead of word 3 from the SID

Hans de Goede hdegoede at redhat.com
Wed Jul 27 18:10:34 CEST 2016


It seems that bytes 13-14 of the SID / bytes 1-2 from word 3 of the SID
are always 0 on H3 making it a poor candidate to use as source for the
serialnr / mac-address, switch to word1 which seems to be more random.

Cc: Chen-Yu Tsai <wens at csie.org>
Cc: Corentin LABBE <clabbe.montjoie at gmail.com>
Cc: Amit Singh Tomar <amittomer25 at gmail.com>
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 board/sunxi/board.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index ef3fe26..bbe5340 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -620,12 +620,17 @@ static void setup_environment(const void *fdt)
 	uint8_t mac_addr[6];
 	char ethaddr[16];
 	int i, ret;
+#ifdef CONFIG_MACH_SUN8I_H3
+	const int idx0 = 0, idx1 = 1;
+#else
+	const int idx0 = 0, idx1 = 3;
+#endif
 
 	ret = sunxi_get_sid(sid);
-	if (ret == 0 && sid[0] != 0 && sid[3] != 0) {
+	if (ret == 0 && sid[idx0] != 0 && sid[idx1] != 0) {
 		/* Ensure the NIC specific bytes of the mac are not all 0 */
-		if ((sid[3] & 0xffffff) == 0)
-			sid[3] |= 0x800000;
+		if ((sid[idx1] & 0xffffff) == 0)
+			sid[idx1] |= 0x800000;
 
 		for (i = 0; i < 4; i++) {
 			sprintf(ethaddr, "ethernet%d", i);
@@ -642,18 +647,18 @@ static void setup_environment(const void *fdt)
 
 			/* Non OUI / registered MAC address */
 			mac_addr[0] = (i << 4) | 0x02;
-			mac_addr[1] = (sid[0] >>  0) & 0xff;
-			mac_addr[2] = (sid[3] >> 24) & 0xff;
-			mac_addr[3] = (sid[3] >> 16) & 0xff;
-			mac_addr[4] = (sid[3] >>  8) & 0xff;
-			mac_addr[5] = (sid[3] >>  0) & 0xff;
+			mac_addr[1] = (sid[idx0] >>  0) & 0xff;
+			mac_addr[2] = (sid[idx1] >> 24) & 0xff;
+			mac_addr[3] = (sid[idx1] >> 16) & 0xff;
+			mac_addr[4] = (sid[idx1] >>  8) & 0xff;
+			mac_addr[5] = (sid[idx1] >>  0) & 0xff;
 
 			eth_setenv_enetaddr(ethaddr, mac_addr);
 		}
 
 		if (!getenv("serial#")) {
 			snprintf(serial_string, sizeof(serial_string),
-				"%08x%08x", sid[0], sid[3]);
+				"%08x%08x", sid[idx0], sid[idx1]);
 
 			setenv("serial#", serial_string);
 		}
-- 
2.7.4



More information about the U-Boot mailing list