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

Chen-Yu Tsai wens at csie.org
Thu Jul 28 05:13:26 CEST 2016


Hi,

On Thu, Jul 28, 2016 at 3:14 AM, Siarhei Siamashka
<siarhei.siamashka at gmail.com> wrote:
> Hello Hans,
>
> On Wed, 27 Jul 2016 18:10:34 +0200
> Hans de Goede <hdegoede at redhat.com> wrote:
>
>> 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);
>>               }
>
> Is it really a good idea trying to guess which parts of the SID are
> sufficiently unique, depending on the SoC generation?
>
> We can calculate some kind of hash (CRC32? SHA256?) over the whole
> SID. This will ensure that all the SID bits are accounted for.
>
> Also changing the MAC address generation algorithm is an invasive
> change, which is affecting the end users. So IMHO it's best to have
> it implemented properly right from the start, rather than evolving
> via a trial and error method. What if it turns out that word1
> from the SID is actually not sufficiently random on H3? How large
> was your sample set?

I've added the SID values from whatever H3 boards I have to:

    http://linux-sunxi.org/SID_Register_Guide#Currently_known_SID.27s

And it seems word1 is more like a batch number. Note the last 3 boards,
which have identical word1's. These were given to me by Steven at the
same time. word2 seems to follow the pattern 5xxxxxxe.

In short there are quite a few bits that are the same.

Regards
ChenYu


More information about the U-Boot mailing list