On comparing raw bytes from manufacturer data in EEPROM to having done
mac initialize and each of the commands incl. 'mac vendor' to
construct again that data, looks good.

On Thu, May 9, 2024 at 10:52 PM Heinrich Schuchardt
<heinrich.schucha...@canonical.com> wrote:
>
> As boards from multiple vendors (Milk-V, StarFive, Pine64) use the mac
> command provide a sub-command to set the vendor string.
>
> Reported-by: E. Shattow <luc...@gmail.com>
> Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
> ---
> v4:
>         no change
> v3:
>         new patch
> ---
>  .../visionfive2/visionfive2-i2c-eeprom.c      | 25 ++++++++++++++++++-
>  1 file changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/board/starfive/visionfive2/visionfive2-i2c-eeprom.c 
> b/board/starfive/visionfive2/visionfive2-i2c-eeprom.c
> index 9648a270494..141d3db8667 100644
> --- a/board/starfive/visionfive2/visionfive2-i2c-eeprom.c
> +++ b/board/starfive/visionfive2/visionfive2-i2c-eeprom.c
> @@ -404,6 +404,24 @@ static void set_product_id(char *string)
>         update_crc();
>  }
>
> +/**
> + * set_vendor() - set vendor name
> + *
> + * Takes a pointer to a string representing the vendor name, e.g.
> + * "StarFive Technology Co., Ltd.", stores it in the vendor field
> + * of the EEPROM local copy, and updates the CRC of the local copy.
> + */
> +static void set_vendor(char *string)
> +{
> +       memset(pbuf.eeprom.atom1.data.vstr, 0,
> +              sizeof(pbuf.eeprom.atom1.data.vstr));
> +
> +       snprintf(pbuf.eeprom.atom1.data.vstr,
> +                sizeof(pbuf.eeprom.atom1.data.vstr), string);
> +
> +       update_crc();
> +}
> +
>  const char *get_product_id_from_eeprom(void)
>  {
>         if (read_eeprom())
> @@ -463,6 +481,9 @@ int do_mac(struct cmd_tbl *cmdtp, int flag, int argc, 
> char *const argv[])
>         } else if (!strcmp(cmd, "product_id")) {
>                 set_product_id(argv[2]);
>                 return 0;
> +       } else if (!strcmp(cmd, "vendor")) {
> +               set_vendor(argv[2]);
> +               return 0;
>         }
>
>         return CMD_RET_USAGE;
> @@ -586,7 +607,9 @@ U_BOOT_LONGHELP(mac,
>         "mac bom_revision <A>\n"
>         "    - stores a StarFive BOM revision into the local EEPROM copy\n"
>         "mac product_id <VF7110A1-2228-D008E000-xxxxxxxx>\n"
> -       "    - stores a StarFive product ID into the local EEPROM copy\n");
> +       "    - stores a StarFive product ID into the local EEPROM copy\n"
> +       "mac vendor <Vendor Name>\n"
> +       "    - set vendor string\n");
>
>  U_BOOT_CMD(
>         mac, 3, 1,  do_mac,
> --
> 2.43.0
>

Tested-by: E Shattow <luc...@gmail.com>

Reply via email to