On 03/01/2021 18:36, Jernej Skrabec wrote:
> From: Andre Heider <a.hei...@gmail.com>
> 
> Refactor setup_environment() so we can use the created sid for a
> Bluetooth address too.
> 
> Signed-off-by: Andre Heider <a.hei...@gmail.com>
> Acked-by: Maxime Ripard <mrip...@kernel.org>
> [rebased]
> Signed-off-by: Jernej Skrabec <jernej.skra...@siol.net>

Confirmed to be indeed just moving this code out and reversing the check.

Reviewed-by: Andre Przywara <andre.przyw...@arm.com>

Cheers,
Andre

> ---
>  board/sunxi/board.c | 121 ++++++++++++++++++++++++--------------------
>  1 file changed, 66 insertions(+), 55 deletions(-)
> 
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index 708a27ed78e9..4a29e351141b 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -789,6 +789,38 @@ static void parse_spl_header(const uint32_t spl_addr)
>       env_set_hex("fel_scriptaddr", spl->fel_script_address);
>  }
>  
> +static bool get_unique_sid(unsigned int *sid)
> +{
> +     if (sunxi_get_sid(sid) != 0)
> +             return false;
> +
> +     if (!sid[0])
> +             return false;
> +
> +     /*
> +      * The single words 1 - 3 of the SID have quite a few bits
> +      * which are the same on many models, so we take a crc32
> +      * of all 3 words, to get a more unique value.
> +      *
> +      * Note we only do this on newer SoCs as we cannot change
> +      * the algorithm on older SoCs since those have been using
> +      * fixed mac-addresses based on only using word 3 for a
> +      * long time and changing a fixed mac-address with an
> +      * u-boot update is not good.
> +      */
> +#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
> +    !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
> +    !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
> +     sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
> +#endif
> +
> +     /* Ensure the NIC specific bytes of the mac are not all 0 */
> +     if ((sid[3] & 0xffffff) == 0)
> +             sid[3] |= 0x800000;
> +
> +     return true;
> +}
> +
>  /*
>   * Note this function gets called multiple times.
>   * It must not make any changes to env variables which already exist.
> @@ -799,61 +831,40 @@ static void setup_environment(const void *fdt)
>       unsigned int sid[4];
>       uint8_t mac_addr[6];
>       char ethaddr[16];
> -     int i, ret;
> -
> -     ret = sunxi_get_sid(sid);
> -     if (ret == 0 && sid[0] != 0) {
> -             /*
> -              * The single words 1 - 3 of the SID have quite a few bits
> -              * which are the same on many models, so we take a crc32
> -              * of all 3 words, to get a more unique value.
> -              *
> -              * Note we only do this on newer SoCs as we cannot change
> -              * the algorithm on older SoCs since those have been using
> -              * fixed mac-addresses based on only using word 3 for a
> -              * long time and changing a fixed mac-address with an
> -              * u-boot update is not good.
> -              */
> -#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
> -    !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
> -    !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
> -             sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
> -#endif
> -
> -             /* Ensure the NIC specific bytes of the mac are not all 0 */
> -             if ((sid[3] & 0xffffff) == 0)
> -                     sid[3] |= 0x800000;
> -
> -             for (i = 0; i < 4; i++) {
> -                     sprintf(ethaddr, "ethernet%d", i);
> -                     if (!fdt_get_alias(fdt, ethaddr))
> -                             continue;
> -
> -                     if (i == 0)
> -                             strcpy(ethaddr, "ethaddr");
> -                     else
> -                             sprintf(ethaddr, "eth%daddr", i);
> -
> -                     if (env_get(ethaddr))
> -                             continue;
> -
> -                     /* 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;
> -
> -                     eth_env_set_enetaddr(ethaddr, mac_addr);
> -             }
> -
> -             if (!env_get("serial#")) {
> -                     snprintf(serial_string, sizeof(serial_string),
> -                             "%08x%08x", sid[0], sid[3]);
> -
> -                     env_set("serial#", serial_string);
> -             }
> +     int i;
> +
> +     if (!get_unique_sid(sid))
> +             return;
> +
> +     for (i = 0; i < 4; i++) {
> +             sprintf(ethaddr, "ethernet%d", i);
> +             if (!fdt_get_alias(fdt, ethaddr))
> +                     continue;
> +
> +             if (i == 0)
> +                     strcpy(ethaddr, "ethaddr");
> +             else
> +                     sprintf(ethaddr, "eth%daddr", i);
> +
> +             if (env_get(ethaddr))
> +                     continue;
> +
> +             /* 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;
> +
> +             eth_env_set_enetaddr(ethaddr, mac_addr);
> +     }
> +
> +     if (!env_get("serial#")) {
> +             snprintf(serial_string, sizeof(serial_string),
> +                     "%08x%08x", sid[0], sid[3]);
> +
> +             env_set("serial#", serial_string);
>       }
>  }
>  
> 

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/0c4cab2e-8a0b-93c2-8a64-d1ce46dd4391%40arm.com.

Reply via email to