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 <w...@csie.org>
Cc: Corentin LABBE <clabbe.montj...@gmail.com>
Cc: Amit Singh Tomar <amittome...@gmail.com>
Signed-off-by: Hans de Goede <hdego...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to