[{"id":3399776,"web_url":"http://patchwork.ozlabs.org/comment/3399776/","msgid":"<CAFLszTgYaBh8ccEVoRAhGDAysY=XY=5es1k6TmF=mWBEHyYUAA@mail.gmail.com>","list_archive_url":null,"date":"2024-10-22T17:00:47","subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","submitter":{"id":6170,"url":"http://patchwork.ozlabs.org/api/people/6170/","name":"Simon Glass","email":"sjg@chromium.org"},"content":"On Tue, 22 Oct 2024 at 08:06, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n>\n> From: Li Hua Qian <huaqian.li@siemens.com>\n>\n> This brings a sysinfo driver and DT entry for the IOT2050 board series.\n> It translates the board information passed from SE-Boot to SPL into\n> values that can be retrieved via the sysinfo API. Will is already used\n> to fill the SMBIOS table when booting via EFI.\n>\n> Signed-off-by: Li Hua Qian <huaqian.li@siemens.com>\n> [Jan: split-off as separate patch, cleanup]\n> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>\n> ---\n>  .../dts/k3-am65-iot2050-common-u-boot.dtsi    |  18 +++\n>  configs/iot2050_defconfig                     |   1 +\n>  drivers/sysinfo/Kconfig                       |   7 +\n>  drivers/sysinfo/Makefile                      |   1 +\n>  drivers/sysinfo/iot2050.c                     | 143 ++++++++++++++++++\n>  drivers/sysinfo/iot2050.h                     |  26 ++++\n>  6 files changed, 196 insertions(+)\n>  create mode 100644 drivers/sysinfo/iot2050.c\n>  create mode 100644 drivers/sysinfo/iot2050.h\n\nI think strlcpy() might be better than strncpy() for this case\n\nThe idea with sysinfo is that we use the same enum for all boards, so\nplease add your new things to sysinfo.h\n\nDo you actually want all the sysinfo info in capitals? If so, that's\nfine, just checking...\n\n>\n> diff --git a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> index b6d2c816acc..55337179f9f 100644\n> --- a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> +++ b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> @@ -14,6 +14,24 @@\n>                 spi0 = &ospi0;\n>         };\n>\n> +       sysinfo {\n> +               compatible = \"siemens,sysinfo-iot2050\";\n> +               /* TI_SRAM_SCRATCH_BOARD_EEPROM_START */\n> +               offset = <0x40280000>;\n> +               bootph-all;\n> +\n> +               smbios {\n> +                       system {\n> +                               manufacturer = \"SIEMENS AG\";\n> +                               product = \"SIMATIC IOT2050\";\n> +                       };\n> +\n> +                       baseboard {\n> +                               manufacturer = \"SIEMENS AG\";\n> +                       };\n> +               };\n> +       };\n> +\n>         leds {\n>                 bootph-all;\n>                 status-led-red {\n> diff --git a/configs/iot2050_defconfig b/configs/iot2050_defconfig\n> index 2624f0cb573..574e232d119 100644\n> --- a/configs/iot2050_defconfig\n> +++ b/configs/iot2050_defconfig\n> @@ -141,6 +141,7 @@ CONFIG_SOC_TI=y\n>  CONFIG_SPI=y\n>  CONFIG_DM_SPI=y\n>  CONFIG_CADENCE_QSPI=y\n> +CONFIG_SYSINFO=y\n>  CONFIG_SYSRESET=y\n>  CONFIG_SPL_SYSRESET=y\n>  CONFIG_SYSRESET_TI_SCI=y\n> diff --git a/drivers/sysinfo/Kconfig b/drivers/sysinfo/Kconfig\n> index 2030e4babc9..df83df69ffb 100644\n> --- a/drivers/sysinfo/Kconfig\n> +++ b/drivers/sysinfo/Kconfig\n> @@ -31,6 +31,13 @@ config SYSINFO_RCAR3\n>         help\n>           Support querying SoC version information for Renesas R-Car Gen3.\n>\n> +config SYSINFO_IOT2050\n> +       bool \"Enable sysinfo driver for the Siemens IOT2050\"\n> +       depends on TARGET_IOT2050_A53\n> +       default y if TARGET_IOT2050_A53\n> +       help\n> +         Support querying device information for Siemens IOT2050.\n> +\n>  config SYSINFO_SANDBOX\n>         bool \"Enable sysinfo driver for the Sandbox board\"\n>         help\n> diff --git a/drivers/sysinfo/Makefile b/drivers/sysinfo/Makefile\n> index 680dde77fe8..26ca3150999 100644\n> --- a/drivers/sysinfo/Makefile\n> +++ b/drivers/sysinfo/Makefile\n> @@ -5,6 +5,7 @@\n>  obj-y += sysinfo-uclass.o\n>  obj-$(CONFIG_SYSINFO_GAZERBEAM) += gazerbeam.o\n>  obj-$(CONFIG_SYSINFO_GPIO) += gpio.o\n> +obj-$(CONFIG_SYSINFO_IOT2050) += iot2050.o\n>  obj-$(CONFIG_SYSINFO_RCAR3) += rcar3.o\n>  obj-$(CONFIG_SYSINFO_SANDBOX) += sandbox.o\n>  obj-$(CONFIG_SYSINFO_SMBIOS) += smbios.o\n> diff --git a/drivers/sysinfo/iot2050.c b/drivers/sysinfo/iot2050.c\n> new file mode 100644\n> index 00000000000..5359d6b8d62\n> --- /dev/null\n> +++ b/drivers/sysinfo/iot2050.c\n> @@ -0,0 +1,143 @@\n> +// SPDX-License-Identifier: GPL-2.0\n> +/*\n> + * Copyright (c) Siemens AG, 2024\n> + */\n> +\n> +#include <dm.h>\n> +#include <sysinfo.h>\n> +#include <net.h>\n> +#include <asm/arch/hardware.h>\n> +\n> +#include \"iot2050.h\"\n> +\n> +#define IOT2050_INFO_MAGIC             0x20502050\n> +\n> +struct iot2050_info {\n> +       u32 magic;\n> +       u16 size;\n> +       char name[20 + 1];\n> +       char serial[16 + 1];\n> +       char mlfb[18 + 1];\n> +       char uuid[32 + 1];\n> +       char a5e[18 + 1];\n> +       u8 mac_addr_cnt;\n> +       u8 mac_addr[8][ARP_HLEN];\n> +       char seboot_version[40 + 1];\n> +       u8 padding[3];\n> +       u32 ddr_size_mb;\n> +} __packed;\n> +\n> +/**\n> + * struct sysinfo_iot2050_priv - sysinfo private data\n> + * @info: iot2050 board info\n> + */\n> +struct sysinfo_iot2050_priv {\n> +       struct iot2050_info *info;\n> +};\n> +\n> +static int sysinfo_iot2050_detect(struct udevice *dev)\n> +{\n> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> +\n> +       if (priv->info == NULL || priv->info->magic != IOT2050_INFO_MAGIC)\n> +               return -EFAULT;\n> +\n> +       return 0;\n> +}\n> +\n> +static int sysinfo_iot2050_get_str(struct udevice *dev, int id, size_t size,\n> +                                  char *val)\n> +{\n> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> +       char byte_str[3] = {0};\n> +       unsigned int n;\n> +\n> +       switch (id) {\n> +       case BOARD_NAME:\n> +               strncpy(val, priv->info->name, size);\n> +               break;\n> +       case BOARD_SERIAL:\n> +               strncpy(val, priv->info->serial, size);\n> +               break;\n> +       case BOARD_MLFB:\n> +               strncpy(val, priv->info->mlfb, size);\n> +               break;\n> +       case BOARD_UUID:\n> +               for (n = 0; n < min(size, (size_t)16); n++) {\n> +                       memcpy(byte_str, priv->info->uuid + n * 2, 2);\n> +                       val[n] = (char)hextoul(byte_str, NULL);\n> +               }\n> +               break;\n> +       case BOARD_A5E:\n> +               strncpy(val, priv->info->a5e, size);\n> +               break;\n> +       case BOARD_SEBOOT_VER:\n> +               strncpy(val, priv->info->seboot_version, size);\n> +               break;\n> +       case BOARD_MAC_ADDR_1:\n> +       case BOARD_MAC_ADDR_2:\n> +       case BOARD_MAC_ADDR_3:\n> +       case BOARD_MAC_ADDR_4:\n> +       case BOARD_MAC_ADDR_5:\n> +       case BOARD_MAC_ADDR_6:\n> +       case BOARD_MAC_ADDR_7:\n> +       case BOARD_MAC_ADDR_8:\n> +               memcpy(val, priv->info->mac_addr[id - BOARD_MAC_ADDR_START],\n> +                      ARP_HLEN);\n\nFor this, we really need another parameter to get_str(), i.e. the\nindex, since we don't know how many MACs there will be. So how about\nadding a few new operations?\n\nint (*get_item_count)(struct udevice *dev, int id);\nint (*get_str_item)(struct udevice *dev, int id, int index, size_t\nsize, char *val);\n\n> +               return 0;\n> +       case BOARD_DDR_SIZE:\n> +               memcpy(val, &priv->info->ddr_size_mb,\n> +                      sizeof(priv->info->ddr_size_mb));\n> +               return 0;\n> +       default:\n> +               return -EINVAL;\n> +       };\n> +\n> +       val[size - 1] = '\\0';\n> +       return 0;\n> +}\n> +\n> +static int sysinfo_iot2050_get_int(struct udevice *dev, int id, int *val)\n> +{\n> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> +\n> +       switch (id) {\n> +       case BOARD_MAC_ADDR_CNT:\n> +               *val = priv->info->mac_addr_cnt;\n> +               return 0;\n> +       default:\n> +               return -EINVAL;\n> +       };\n> +}\n> +\n> +static const struct sysinfo_ops sysinfo_iot2050_ops = {\n> +       .detect = sysinfo_iot2050_detect,\n> +       .get_str = sysinfo_iot2050_get_str,\n> +       .get_int = sysinfo_iot2050_get_int,\n> +};\n> +\n> +static int sysinfo_iot2050_probe(struct udevice *dev)\n> +{\n> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> +       unsigned long offset;\n> +\n> +       offset = dev_read_u32_default(dev, \"offset\",\n> +                                     TI_SRAM_SCRATCH_BOARD_EEPROM_START);\n> +       priv->info = (struct iot2050_info *)offset;\n> +\n> +       return 0;\n> +}\n> +\n> +static const struct udevice_id sysinfo_iot2050_ids[] = {\n> +       { .compatible = \"siemens,sysinfo-iot2050\" },\n> +       { /* sentinel */ }\n> +};\n> +\n> +U_BOOT_DRIVER(sysinfo_iot2050) = {\n> +       .name           = \"sysinfo_iot2050\",\n> +       .id             = UCLASS_SYSINFO,\n> +       .of_match       = sysinfo_iot2050_ids,\n> +       .ops            = &sysinfo_iot2050_ops,\n> +       .priv_auto      = sizeof(struct sysinfo_iot2050_priv),\n> +       .probe          = sysinfo_iot2050_probe,\n> +};\n> diff --git a/drivers/sysinfo/iot2050.h b/drivers/sysinfo/iot2050.h\n> new file mode 100644\n> index 00000000000..f659a8282b5\n> --- /dev/null\n> +++ b/drivers/sysinfo/iot2050.h\n> @@ -0,0 +1,26 @@\n> +/* SPDX-License-Identifier: GPL-2.0 */\n> +/*\n> + * Copyright (c) Siemens AG, 2024\n> + */\n> +\n> +#include <sysinfo.h>\n> +\n> +enum sysinfo_id_iot2050 {\n> +       BOARD_MLFB              = SYSINFO_ID_SMBIOS_SYSTEM_VERSION,\n> +       BOARD_SERIAL            = SYSINFO_ID_SMBIOS_SYSTEM_SERIAL,\n> +       BOARD_UUID              = SYSINFO_ID_SMBIOS_SYSTEM_UUID,\n> +       BOARD_A5E               = SYSINFO_ID_SMBIOS_BASEBOARD_PRODUCT,\n> +       BOARD_NAME              = SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,\n\nDo you need to rename these? It seems better to use the standard\nnames, although I do think they are quite long.\n\n> +       BOARD_SEBOOT_VER        = SYSINFO_ID_USER + 0,\n> +       BOARD_MAC_ADDR_CNT      = SYSINFO_ID_USER + 1,\n> +       BOARD_MAC_ADDR_1        = SYSINFO_ID_USER + 2,\n> +       BOARD_MAC_ADDR_START    = BOARD_MAC_ADDR_1,\n> +       BOARD_MAC_ADDR_2        = SYSINFO_ID_USER + 3,\n> +       BOARD_MAC_ADDR_3        = SYSINFO_ID_USER + 4,\n> +       BOARD_MAC_ADDR_4        = SYSINFO_ID_USER + 5,\n> +       BOARD_MAC_ADDR_5        = SYSINFO_ID_USER + 6,\n> +       BOARD_MAC_ADDR_6        = SYSINFO_ID_USER + 7,\n> +       BOARD_MAC_ADDR_7        = SYSINFO_ID_USER + 8,\n> +       BOARD_MAC_ADDR_8        = SYSINFO_ID_USER + 9,\n> +       BOARD_DDR_SIZE          = SYSINFO_ID_USER + 10,\n\nThese are the ones which should be added as standard. Be sure to\ncomment them as necessary.\n\nRegards,\nSimon","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256\n header.s=google header.b=CkWMJb33;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=85.214.62.61; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org\n header.b=\"CkWMJb33\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=pass smtp.mailfrom=sjg@chromium.org"],"Received":["from phobos.denx.de (phobos.denx.de [85.214.62.61])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (secp384r1))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4XXz3g2n2Kz1xtp\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 23 Oct 2024 04:01:35 +1100 (AEDT)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 045458925A;\n\tTue, 22 Oct 2024 19:01:27 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id 95B3F89268; Tue, 22 Oct 2024 19:01:25 +0200 (CEST)","from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com\n [IPv6:2a00:1450:4864:20::52b])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 7BB3888FD6\n for <u-boot@lists.denx.de>; Tue, 22 Oct 2024 19:01:23 +0200 (CEST)","by mail-ed1-x52b.google.com with SMTP id\n 4fb4d7f45d1cf-5cb6704ff6bso3683419a12.3\n for <u-boot@lists.denx.de>; Tue, 22 Oct 2024 10:01:23 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham\n autolearn_force=no version=3.4.2","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=chromium.org; s=google; t=1729616483; x=1730221283; darn=lists.denx.de;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:from:to:cc:subject:date:message-id:reply-to;\n bh=7mcNUeCvCnyMAxrQgZ+vaenHJhncp+4Zk3M4qbITzvE=;\n b=CkWMJb33W7f1fT6F2WHpU5gA8y415fidfzEt6IQTddKa/yLOfgGtkWhg0n7M4MgEdN\n IcLKpdKw67eRIq0qZ6zazGps0Q/r13BJwO6ONYFXqm1NWdWZKNnE9kvosGuoKwGG23B3\n 3SE0IIwMMpyJmv3HK8qeVhFX1wxRp/Gg79Fdo=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1729616483; x=1730221283;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=7mcNUeCvCnyMAxrQgZ+vaenHJhncp+4Zk3M4qbITzvE=;\n b=ZYr7mWmegLecWDOi2XDncHj34RanZeECmgHug+b+K5mQFvzugXKhlfX1qLbUiSX0XP\n QHG727+vCsj98XwBuPr5zRWr5MqmEEj2NGAgeH75usqsCXpK83TSNeppQbYot7oM0Zyk\n NxvXvIdyeqnIev6j9sz4SD0/JwSxWPr1vv5+Dt1NSVDWSNSkWaRs48x5dxZcrA+qE3AF\n EUzYgihi0V8LPVY5AcQEvEGS7soS2ci86UrsAnP99B0sU2155krFwi5LG6q+uHEN4Fr9\n PLtogfaGaKThlJx5oNEYSC9HfciwMxcVZssZEXTvwbgFoCwQqbV1m5zyuhM8aM9wbmAU\n 7qcA==","X-Gm-Message-State":"AOJu0YwxnoOzFvTKbKY6C3rr4zN1ZJyTyFSDwHaPwxHQMzY90GSSgoNz\n DPURX0+yuH6SI9h+Pjlb/rMwvi3bUWob5tuByCfTiIswLIPUGLzwvorzevdzPTapWXE5WSssmVR\n xQ3futIwurchWeJq+23SGcBtzcuiuf6iLxXAZ","X-Google-Smtp-Source":"\n AGHT+IGHhzYfYjgB21LONiAHasHnAPjtV9n8fRrMyiWIEYRoEmHUyLcyTygjE0DkX31bAEe5D5xrRvTd9WLyz9LallQ=","X-Received":"by 2002:a17:907:60ca:b0:a9a:82e2:e8ce with SMTP id\n a640c23a62f3a-a9abe099ac1mr2477066b.40.1729616482860; Tue, 22 Oct 2024\n 10:01:22 -0700 (PDT)","MIME-Version":"1.0","References":"<cover.1729577070.git.jan.kiszka@siemens.com>\n <64b2dae0ae60feded514b774f0e91c303c81a52d.1729577070.git.jan.kiszka@siemens.com>","In-Reply-To":"\n <64b2dae0ae60feded514b774f0e91c303c81a52d.1729577070.git.jan.kiszka@siemens.com>","From":"Simon Glass <sjg@chromium.org>","Date":"Tue, 22 Oct 2024 19:00:47 +0200","Message-ID":"\n <CAFLszTgYaBh8ccEVoRAhGDAysY=XY=5es1k6TmF=mWBEHyYUAA@mail.gmail.com>","Subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","To":"Jan Kiszka <jan.kiszka@siemens.com>","Cc":"U-Boot Mailing List <u-boot@lists.denx.de>, Bryan Brattlof <bb@ti.com>,\n Nishanth Menon <nm@ti.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}},{"id":3399883,"web_url":"http://patchwork.ozlabs.org/comment/3399883/","msgid":"<f1ef1ad7-f4ce-4b96-931b-d51c77a86e8d@siemens.com>","list_archive_url":null,"date":"2024-10-22T19:59:48","subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","submitter":{"id":710,"url":"http://patchwork.ozlabs.org/api/people/710/","name":"Jan Kiszka","email":"jan.kiszka@siemens.com"},"content":"On 22.10.24 19:00, Simon Glass wrote:\n> On Tue, 22 Oct 2024 at 08:06, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n>>\n>> From: Li Hua Qian <huaqian.li@siemens.com>\n>>\n>> This brings a sysinfo driver and DT entry for the IOT2050 board series.\n>> It translates the board information passed from SE-Boot to SPL into\n>> values that can be retrieved via the sysinfo API. Will is already used\n>> to fill the SMBIOS table when booting via EFI.\n>>\n>> Signed-off-by: Li Hua Qian <huaqian.li@siemens.com>\n>> [Jan: split-off as separate patch, cleanup]\n>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>\n>> ---\n>>  .../dts/k3-am65-iot2050-common-u-boot.dtsi    |  18 +++\n>>  configs/iot2050_defconfig                     |   1 +\n>>  drivers/sysinfo/Kconfig                       |   7 +\n>>  drivers/sysinfo/Makefile                      |   1 +\n>>  drivers/sysinfo/iot2050.c                     | 143 ++++++++++++++++++\n>>  drivers/sysinfo/iot2050.h                     |  26 ++++\n>>  6 files changed, 196 insertions(+)\n>>  create mode 100644 drivers/sysinfo/iot2050.c\n>>  create mode 100644 drivers/sysinfo/iot2050.h\n> \n> I think strlcpy() might be better than strncpy() for this case\n> \n\nAck.\n\n> The idea with sysinfo is that we use the same enum for all boards, so\n> please add your new things to sysinfo.h\n> \n\nSee below.\n\n> Do you actually want all the sysinfo info in capitals? If so, that's\n> fine, just checking...\n> \n\nThis is how it is being shipped already, yes.\n\n>>\n>> diff --git a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n>> index b6d2c816acc..55337179f9f 100644\n>> --- a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n>> +++ b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n>> @@ -14,6 +14,24 @@\n>>                 spi0 = &ospi0;\n>>         };\n>>\n>> +       sysinfo {\n>> +               compatible = \"siemens,sysinfo-iot2050\";\n>> +               /* TI_SRAM_SCRATCH_BOARD_EEPROM_START */\n>> +               offset = <0x40280000>;\n>> +               bootph-all;\n>> +\n>> +               smbios {\n>> +                       system {\n>> +                               manufacturer = \"SIEMENS AG\";\n>> +                               product = \"SIMATIC IOT2050\";\n>> +                       };\n>> +\n>> +                       baseboard {\n>> +                               manufacturer = \"SIEMENS AG\";\n>> +                       };\n>> +               };\n>> +       };\n>> +\n>>         leds {\n>>                 bootph-all;\n>>                 status-led-red {\n>> diff --git a/configs/iot2050_defconfig b/configs/iot2050_defconfig\n>> index 2624f0cb573..574e232d119 100644\n>> --- a/configs/iot2050_defconfig\n>> +++ b/configs/iot2050_defconfig\n>> @@ -141,6 +141,7 @@ CONFIG_SOC_TI=y\n>>  CONFIG_SPI=y\n>>  CONFIG_DM_SPI=y\n>>  CONFIG_CADENCE_QSPI=y\n>> +CONFIG_SYSINFO=y\n>>  CONFIG_SYSRESET=y\n>>  CONFIG_SPL_SYSRESET=y\n>>  CONFIG_SYSRESET_TI_SCI=y\n>> diff --git a/drivers/sysinfo/Kconfig b/drivers/sysinfo/Kconfig\n>> index 2030e4babc9..df83df69ffb 100644\n>> --- a/drivers/sysinfo/Kconfig\n>> +++ b/drivers/sysinfo/Kconfig\n>> @@ -31,6 +31,13 @@ config SYSINFO_RCAR3\n>>         help\n>>           Support querying SoC version information for Renesas R-Car Gen3.\n>>\n>> +config SYSINFO_IOT2050\n>> +       bool \"Enable sysinfo driver for the Siemens IOT2050\"\n>> +       depends on TARGET_IOT2050_A53\n>> +       default y if TARGET_IOT2050_A53\n>> +       help\n>> +         Support querying device information for Siemens IOT2050.\n>> +\n>>  config SYSINFO_SANDBOX\n>>         bool \"Enable sysinfo driver for the Sandbox board\"\n>>         help\n>> diff --git a/drivers/sysinfo/Makefile b/drivers/sysinfo/Makefile\n>> index 680dde77fe8..26ca3150999 100644\n>> --- a/drivers/sysinfo/Makefile\n>> +++ b/drivers/sysinfo/Makefile\n>> @@ -5,6 +5,7 @@\n>>  obj-y += sysinfo-uclass.o\n>>  obj-$(CONFIG_SYSINFO_GAZERBEAM) += gazerbeam.o\n>>  obj-$(CONFIG_SYSINFO_GPIO) += gpio.o\n>> +obj-$(CONFIG_SYSINFO_IOT2050) += iot2050.o\n>>  obj-$(CONFIG_SYSINFO_RCAR3) += rcar3.o\n>>  obj-$(CONFIG_SYSINFO_SANDBOX) += sandbox.o\n>>  obj-$(CONFIG_SYSINFO_SMBIOS) += smbios.o\n>> diff --git a/drivers/sysinfo/iot2050.c b/drivers/sysinfo/iot2050.c\n>> new file mode 100644\n>> index 00000000000..5359d6b8d62\n>> --- /dev/null\n>> +++ b/drivers/sysinfo/iot2050.c\n>> @@ -0,0 +1,143 @@\n>> +// SPDX-License-Identifier: GPL-2.0\n>> +/*\n>> + * Copyright (c) Siemens AG, 2024\n>> + */\n>> +\n>> +#include <dm.h>\n>> +#include <sysinfo.h>\n>> +#include <net.h>\n>> +#include <asm/arch/hardware.h>\n>> +\n>> +#include \"iot2050.h\"\n>> +\n>> +#define IOT2050_INFO_MAGIC             0x20502050\n>> +\n>> +struct iot2050_info {\n>> +       u32 magic;\n>> +       u16 size;\n>> +       char name[20 + 1];\n>> +       char serial[16 + 1];\n>> +       char mlfb[18 + 1];\n>> +       char uuid[32 + 1];\n>> +       char a5e[18 + 1];\n>> +       u8 mac_addr_cnt;\n>> +       u8 mac_addr[8][ARP_HLEN];\n>> +       char seboot_version[40 + 1];\n>> +       u8 padding[3];\n>> +       u32 ddr_size_mb;\n>> +} __packed;\n>> +\n>> +/**\n>> + * struct sysinfo_iot2050_priv - sysinfo private data\n>> + * @info: iot2050 board info\n>> + */\n>> +struct sysinfo_iot2050_priv {\n>> +       struct iot2050_info *info;\n>> +};\n>> +\n>> +static int sysinfo_iot2050_detect(struct udevice *dev)\n>> +{\n>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>> +\n>> +       if (priv->info == NULL || priv->info->magic != IOT2050_INFO_MAGIC)\n>> +               return -EFAULT;\n>> +\n>> +       return 0;\n>> +}\n>> +\n>> +static int sysinfo_iot2050_get_str(struct udevice *dev, int id, size_t size,\n>> +                                  char *val)\n>> +{\n>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>> +       char byte_str[3] = {0};\n>> +       unsigned int n;\n>> +\n>> +       switch (id) {\n>> +       case BOARD_NAME:\n>> +               strncpy(val, priv->info->name, size);\n>> +               break;\n>> +       case BOARD_SERIAL:\n>> +               strncpy(val, priv->info->serial, size);\n>> +               break;\n>> +       case BOARD_MLFB:\n>> +               strncpy(val, priv->info->mlfb, size);\n>> +               break;\n>> +       case BOARD_UUID:\n>> +               for (n = 0; n < min(size, (size_t)16); n++) {\n>> +                       memcpy(byte_str, priv->info->uuid + n * 2, 2);\n>> +                       val[n] = (char)hextoul(byte_str, NULL);\n>> +               }\n>> +               break;\n>> +       case BOARD_A5E:\n>> +               strncpy(val, priv->info->a5e, size);\n>> +               break;\n>> +       case BOARD_SEBOOT_VER:\n>> +               strncpy(val, priv->info->seboot_version, size);\n>> +               break;\n>> +       case BOARD_MAC_ADDR_1:\n>> +       case BOARD_MAC_ADDR_2:\n>> +       case BOARD_MAC_ADDR_3:\n>> +       case BOARD_MAC_ADDR_4:\n>> +       case BOARD_MAC_ADDR_5:\n>> +       case BOARD_MAC_ADDR_6:\n>> +       case BOARD_MAC_ADDR_7:\n>> +       case BOARD_MAC_ADDR_8:\n>> +               memcpy(val, priv->info->mac_addr[id - BOARD_MAC_ADDR_START],\n>> +                      ARP_HLEN);\n> \n> For this, we really need another parameter to get_str(), i.e. the\n> index, since we don't know how many MACs there will be. So how about\n> adding a few new operations?\n> \n> int (*get_item_count)(struct udevice *dev, int id);\n> int (*get_str_item)(struct udevice *dev, int id, int index, size_t\n> size, char *val);\n\nOk, makes sense.\n\n> \n>> +               return 0;\n>> +       case BOARD_DDR_SIZE:\n>> +               memcpy(val, &priv->info->ddr_size_mb,\n>> +                      sizeof(priv->info->ddr_size_mb));\n>> +               return 0;\n>> +       default:\n>> +               return -EINVAL;\n>> +       };\n>> +\n>> +       val[size - 1] = '\\0';\n>> +       return 0;\n>> +}\n>> +\n>> +static int sysinfo_iot2050_get_int(struct udevice *dev, int id, int *val)\n>> +{\n>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>> +\n>> +       switch (id) {\n>> +       case BOARD_MAC_ADDR_CNT:\n>> +               *val = priv->info->mac_addr_cnt;\n>> +               return 0;\n>> +       default:\n>> +               return -EINVAL;\n>> +       };\n>> +}\n>> +\n>> +static const struct sysinfo_ops sysinfo_iot2050_ops = {\n>> +       .detect = sysinfo_iot2050_detect,\n>> +       .get_str = sysinfo_iot2050_get_str,\n>> +       .get_int = sysinfo_iot2050_get_int,\n>> +};\n>> +\n>> +static int sysinfo_iot2050_probe(struct udevice *dev)\n>> +{\n>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>> +       unsigned long offset;\n>> +\n>> +       offset = dev_read_u32_default(dev, \"offset\",\n>> +                                     TI_SRAM_SCRATCH_BOARD_EEPROM_START);\n>> +       priv->info = (struct iot2050_info *)offset;\n>> +\n>> +       return 0;\n>> +}\n>> +\n>> +static const struct udevice_id sysinfo_iot2050_ids[] = {\n>> +       { .compatible = \"siemens,sysinfo-iot2050\" },\n>> +       { /* sentinel */ }\n>> +};\n>> +\n>> +U_BOOT_DRIVER(sysinfo_iot2050) = {\n>> +       .name           = \"sysinfo_iot2050\",\n>> +       .id             = UCLASS_SYSINFO,\n>> +       .of_match       = sysinfo_iot2050_ids,\n>> +       .ops            = &sysinfo_iot2050_ops,\n>> +       .priv_auto      = sizeof(struct sysinfo_iot2050_priv),\n>> +       .probe          = sysinfo_iot2050_probe,\n>> +};\n>> diff --git a/drivers/sysinfo/iot2050.h b/drivers/sysinfo/iot2050.h\n>> new file mode 100644\n>> index 00000000000..f659a8282b5\n>> --- /dev/null\n>> +++ b/drivers/sysinfo/iot2050.h\n>> @@ -0,0 +1,26 @@\n>> +/* SPDX-License-Identifier: GPL-2.0 */\n>> +/*\n>> + * Copyright (c) Siemens AG, 2024\n>> + */\n>> +\n>> +#include <sysinfo.h>\n>> +\n>> +enum sysinfo_id_iot2050 {\n>> +       BOARD_MLFB              = SYSINFO_ID_SMBIOS_SYSTEM_VERSION,\n>> +       BOARD_SERIAL            = SYSINFO_ID_SMBIOS_SYSTEM_SERIAL,\n>> +       BOARD_UUID              = SYSINFO_ID_SMBIOS_SYSTEM_UUID,\n>> +       BOARD_A5E               = SYSINFO_ID_SMBIOS_BASEBOARD_PRODUCT,\n>> +       BOARD_NAME              = SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,\n> \n> Do you need to rename these? It seems better to use the standard\n> names, although I do think they are quite long.\n\nWe don't rename, we map pre-existing field names in EEPROM and\npre-existing board-specific U-Boot env vars to sysinfo fields here.\n\n> \n>> +       BOARD_SEBOOT_VER        = SYSINFO_ID_USER + 0,\n>> +       BOARD_MAC_ADDR_CNT      = SYSINFO_ID_USER + 1,\n>> +       BOARD_MAC_ADDR_1        = SYSINFO_ID_USER + 2,\n>> +       BOARD_MAC_ADDR_START    = BOARD_MAC_ADDR_1,\n>> +       BOARD_MAC_ADDR_2        = SYSINFO_ID_USER + 3,\n>> +       BOARD_MAC_ADDR_3        = SYSINFO_ID_USER + 4,\n>> +       BOARD_MAC_ADDR_4        = SYSINFO_ID_USER + 5,\n>> +       BOARD_MAC_ADDR_5        = SYSINFO_ID_USER + 6,\n>> +       BOARD_MAC_ADDR_6        = SYSINFO_ID_USER + 7,\n>> +       BOARD_MAC_ADDR_7        = SYSINFO_ID_USER + 8,\n>> +       BOARD_MAC_ADDR_8        = SYSINFO_ID_USER + 9,\n>> +       BOARD_DDR_SIZE          = SYSINFO_ID_USER + 10,\n> \n> These are the ones which should be added as standard. Be sure to\n> comment them as necessary.\n\nYou mean that BOARD_MAC_ADDR and BOARD_DDR_SIZE should become\nSYSINFO_ID_BOARD_MAC_ADDR and SYSINFO_ID_BOARD_DDR_SIZE? But\nBOARD_SEBOOT_VER is nothing that has any meaning beyond our board.\n\nJan","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=siemens.com header.i=@siemens.com header.a=rsa-sha256\n header.s=selector2 header.b=gJsBMC7C;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=85.214.62.61; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=siemens.com","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=siemens.com header.i=@siemens.com header.b=\"gJsBMC7C\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=siemens.com","phobos.denx.de;\n spf=pass smtp.mailfrom=jan.kiszka@siemens.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=siemens.com;"],"Received":["from phobos.denx.de (phobos.denx.de [85.214.62.61])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (secp384r1))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4XY31V2Spqz1xw3\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 23 Oct 2024 06:59:58 +1100 (AEDT)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 0320588FA7;\n\tTue, 22 Oct 2024 21:59:55 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id DFC7C88FA7; Tue, 22 Oct 2024 21:59:53 +0200 (CEST)","from EUR05-VI1-obe.outbound.protection.outlook.com\n (mail-vi1eur05on20622.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:2613::622])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id A211888F4B\n for <u-boot@lists.denx.de>; Tue, 22 Oct 2024 21:59:51 +0200 (CEST)","from AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:588::19)\n by GV1PR10MB6242.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:150:92::5) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.15; Tue, 22 Oct\n 2024 19:59:49 +0000","from AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM\n ([fe80::8fe1:7e71:cf4a:7408]) by AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM\n ([fe80::8fe1:7e71:cf4a:7408%3]) with mapi id 15.20.8093.014; Tue, 22 Oct 2024\n 19:59:49 +0000"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_NONE autolearn=no\n autolearn_force=no version=3.4.2","ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=vmOSC2ZqAi0bSZoLeq8U/B4paLEKL1YTb4tbpOWeUxFC7MAVo1pmDMc8xI8JXE7bV1haUkPcZ9GbajYfqi0O6CrNWKawRexL31/yq5LjS/tXYvmtGgXDwsgk75vt2LjBGIB2n+Qek6f5G3/R/WuaXeyxjbp8E0p0SP2c7ew7bwM3NaWfYN72qYi3LtwhL3ipbLrrvMJMcTUt/DEf9pzHlXVuZaKAMImu4eXSlYBckhFgIZQ7zqsAeC3QDfa66uKKS1SHwS9ddxYoycOX9wcqGUQqs0p6/JfuSAwlrKa1/Us8Z2GIvV74GDxZUMpxKltAPw4as5tXlrZS6jefcUcRaA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=tbUqcJo/dVXtC6Ca9hwffeXMxvJUg4fKSDOVjFfAmn0=;\n b=uOnl2Yfn+8IcC4vVpEVyntuit8mER2pHZl0iSPzD9fPUJn9OYyBz9ZwOuefwCdajLmwhEhLRQC4iiQ8QBfmBWOTpAEkrurHjGsOKDePyvz1u0IrokjmIqKXF0vPbyCbSm4QXfPl4cDVtodIE9CmlhJmFbMC1lcGruY86qp/X4AkCktP4pyYutxhIHROlnBJothv1BZcw0gfoe29KN4tBfTsow3lJYN+fS0HKnLxyyAPvQeeOsvQaJuEKW87GgO1a3CEMT6oqUXqr1ugGT5kklmi5o8cw42On+Gaak8NQrb40yj5NLE86vw6ojzEgc/56rB4ZjmAEChZ6jSrIcp9zsg==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com;\n dkim=pass header.d=siemens.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=siemens.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=tbUqcJo/dVXtC6Ca9hwffeXMxvJUg4fKSDOVjFfAmn0=;\n b=gJsBMC7ClXaMnCaKzpaI3DEa7J5kl4VwblB233LVT2XKychcRR/SJcJs7rlgCD9ed38Cu7G2fwMckwTXm/C3eKqIxak2DZnzftKBn0CskBGPz3U2aU0r8HxFB3k9HFRBctki4HL/D0kqZf2FhUcO4YJsj5goqaqLjeD5PGAlqx2p4GpNc/DNBpKw1sOIjahw3X8vuXCXMUCcJz2meuP9fV04Ic7TYEQzrsGLrn4VemN1ea00WdXHqkP/F9n/uhbYmPWTQxVag3VdJZKQp2zYkSUA8w6Jr7hl9iCGu+1eXirR0cfyAmhRmisfI8RzzungtlnwmCLv8lObsXG/PGuHNA==","Message-ID":"<f1ef1ad7-f4ce-4b96-931b-d51c77a86e8d@siemens.com>","Date":"Tue, 22 Oct 2024 21:59:48 +0200","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","To":"Simon Glass <sjg@chromium.org>","Cc":"U-Boot Mailing List <u-boot@lists.denx.de>, Bryan Brattlof <bb@ti.com>,\n Nishanth Menon <nm@ti.com>,\n \"Li, Hua Qian (DI FA CTR IPC CN PRC4)\" <huaqian.li@siemens.com>","References":"<cover.1729577070.git.jan.kiszka@siemens.com>\n <64b2dae0ae60feded514b774f0e91c303c81a52d.1729577070.git.jan.kiszka@siemens.com>\n <CAFLszTgYaBh8ccEVoRAhGDAysY=XY=5es1k6TmF=mWBEHyYUAA@mail.gmail.com>","From":"Jan Kiszka <jan.kiszka@siemens.com>","Content-Language":"en-US","Autocrypt":"addr=jan.kiszka@siemens.com; keydata=\n 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","In-Reply-To":"\n <CAFLszTgYaBh8ccEVoRAhGDAysY=XY=5es1k6TmF=mWBEHyYUAA@mail.gmail.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-ClientProxiedBy":"FR3P281CA0108.DEUP281.PROD.OUTLOOK.COM\n (2603:10a6:d10:a3::11) To AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM\n (2603:10a6:20b:588::19)","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"AS4PR10MB6181:EE_|GV1PR10MB6242:EE_","X-MS-Office365-Filtering-Correlation-Id":"e76bb423-a053-4708-42d9-08dcf2d415e0","X-MS-Exchange-AtpMessageProperties":"SA","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;ARA:13230040|366016|1800799024|376014;","X-Microsoft-Antispam-Message-Info":"=?utf-8?q?TXKZLrUugqn7Ejhzz6WlHhZTmg2QNLI?=\n\t=?utf-8?q?GwiMWL7p50D48qBDdhILEmBydrXih2ycfrKvecbdKxSjNIWMm4HyvfLTOGCLDp/F2?=\n\t=?utf-8?q?CofR6tGW8X26qk++gJQz0nF75zpAEmoKLm2cGQBB3Gi34ZxO1zYVKx16+4IW+vwHW?=\n\t=?utf-8?q?6Nz6Oooal5TWjxUBK4x6FwfhrUAzanvgF8sAfS5B/mCoQCHfzXt2LRqgi2qeoCTLa?=\n\t=?utf-8?q?8D2Hve8Wgvgb/LpQAHWeD4wdOQd9+HB6egX3yxEBUez+wmuwURNZOahDWOxjX+0at?=\n\t=?utf-8?q?pXfuGDDol7CoFdHGybgg1pDrPHYs5+xxOCp+5ug0QxMgbmuvDz20966q4Wgu/hf94?=\n\t=?utf-8?q?+TJBZa7JwagouaP72WhuznO6xG93QXXj6U9cjFBxFnqE/kr9UJRoPFqnmZ7Z3/3hH?=\n\t=?utf-8?q?90+BFjk/vrX9JFV/O9baC2vgq9sdRjci7XsiAMOVxs+NUVI42c24rSMO/FlwW8Se6?=\n\t=?utf-8?q?cCkItpJPIdVQ1K7rYUpG2bse2S9ZB+CmSK+SEmPk4AqO38BANM/rLux38PfYyGvXq?=\n\t=?utf-8?q?FHAvzlaF+t3YVR5McSOEdnJRHwb42B2HbTi1lCzxQxq7bPor51eA7PDcef18HCp1b?=\n\t=?utf-8?q?x5B8oCIMUr2B2TXezo5B76wH+AUMkKLT9Q5YJO5w8+Y+UGUEgsVW4DjCh1aAAOVAR?=\n\t=?utf-8?q?HPD9tGWA+ZYBj96DDFV54BurFnZXXEVpFU/k8rWW/0w9bcKTGSsX6C4g5gcKce5yB?=\n\t=?utf-8?q?aWW2NONCbmU2zuZVfcAFs/NnzgoOfBGBEEbxMW1Q1F8LV7q8RY0d6khIhaIGpN5Mx?=\n\t=?utf-8?q?hNd89Ij5jqpZNkyj79d1e3enHkqRbsCtSg4V54ok6bhX6F3CeR9pkF7KGhSH2ZHDQ?=\n\t=?utf-8?q?d/btUF4cqyO8sZ52WXENJhHCkVZjmSZWuj0AupDlKw3qIfR0oMSX0u8BintAPgKdQ?=\n\t=?utf-8?q?1iRu1bxHlXKRhgllLgQEN7yX8gWe80A/U6OiFHGKneEJLVziBALGXV51v6DwwwAUb?=\n\t=?utf-8?q?I5sYPwZwmzpYaJSq0aPBmI0YKWOmJZYgKYZUYoLt4zSrJaWmTvm45DRd74p+1LtLS?=\n\t=?utf-8?q?IRWUXAgsoS/yrCQM573pVcfIqq4hUnIHehPLRlRF4sYsaRYnhh4QotmVGAmOYpYg/?=\n\t=?utf-8?q?kleDPtDh6ovbtBgQAqTnSmXJ27ozAeziSlbrrfGYz9GWJ9N0bOQ8ViNdBY92BNXR1?=\n\t=?utf-8?q?8ERzamoiOzBFawStAbHyigNMgiABgvpPUaxnzFCui7DHaIofqpOisq8Eq4z3oK/IC?=\n\t=?utf-8?q?H0YmazrGOs2xn2i+eydGN2YnGCeRk2v6z+RDlu/B8oOr4r3hBREBPXXK+/nDyyds3?=\n\t=?utf-8?q?25LRvj3apYPEF?=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE;\n SFS:(13230040)(366016)(1800799024)(376014); DIR:OUT; SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?3OIBNPqNGE7ylZsRWyiSu9o1xkjc?=\n\t=?utf-8?q?T9ryoXMfj/UDvKv9V1Vaesv8fvB0Jx9ibBtFJQAZdim2DOWq3s3IL4U+Ofok81oiV?=\n\t=?utf-8?q?aB8ozmYC8qF29lyOfzrktRwx8QRvKmMonDfygwXJeugS+z3fgkq7oBtTtNfnj6hJO?=\n\t=?utf-8?q?sjwqnPmo78rhekJoLPSLSFv3s+UcLxNBlua6Yk2ztksksk29x/1yBYRVO60s6xmMm?=\n\t=?utf-8?q?N3ASQ8sVaDww/5EHjximtqugugrD0MN8JIDOJ7ftUlmJrs7o6WhtlIaMNs+i+gOfV?=\n\t=?utf-8?q?9V8nLxaVPMxh8p8ZIgGys2GWw3CFr+MT1az0L9mYqO2SmzF12dGsqFzn3WXSkF5p+?=\n\t=?utf-8?q?Ou7zixLRwCAi9IVf8+kpckbbSdMPSN6JvO5f5S2WHqnc3qzPPlfcWv62UiM3sITG2?=\n\t=?utf-8?q?k0URdng4bk70vX4+UNKVPbTkaMt5h1IYkJgffI40dcXX9lVhPOPwKh9AJdi3ETWhv?=\n\t=?utf-8?q?sTqL3WyIV2jPQNSMcvvGVUwiFRhNpuzxchhUXM2eZoi0urdICZhTqGbP2VCEL/wpC?=\n\t=?utf-8?q?lS//IXnE9uK1r3up+vzbS2XzxGyN2Ty3y5Z3dCqCF0ykwb62kI1JbaXt7TzQsMNGb?=\n\t=?utf-8?q?dLDqQOm0cG/Uvh2RiSUpX+tw4EGJEwAHv5GXpD6CU0Y+axjwnq6kYVQ1dbcvMJFZe?=\n\t=?utf-8?q?L9CyJ8s2qJwLfpyPA0OVmZGf+vHimurTkdCUohGd5L4msZ0v2qL4wTOI0oOkhc5Np?=\n\t=?utf-8?q?bbIAGIzeEdMkxwDA30fITVe/mLvRMnEGU8Cd+AVfQbeNiLifLHtblVqo0hV7FwFl+?=\n\t=?utf-8?q?XJGgPhf4HJTLjtNZjlkU/TmNJHQ3Srp6zPE+oW6QcIrxEp1HSMjN84Lcn9uXBD6wH?=\n\t=?utf-8?q?Orr5Y4m5uMxjiQ9EmryvAvpT+GvLpPbS+gPQRxM54E71LFumR3aObJAcwPzowf+zg?=\n\t=?utf-8?q?qhX5pI+mEbqruYVlWfLBnM+yZ89o1MrEmvxEat6+N7G+rwA2jRRFnZ4e0E3MRhS76?=\n\t=?utf-8?q?hSPBC289yO1EMBsDLtmR/cnmmMQ7xmcfK4ffO/ksRMMmkHbqEeKmMKh0ozGWdUUJl?=\n\t=?utf-8?q?WVzQP/AjfeFh+VGaOd6T1N5DkdPCkeDhlLITnPZa+9a9emEpCSsvKxo4c5Qb+hgF2?=\n\t=?utf-8?q?1U0cuPnOg93bX8j8tgAYzf7AvX77gwr7PibKMXuwNkUgfzlgpqN7WIzHwC15cBXHj?=\n\t=?utf-8?q?mMUTZd1ppioV5ZcIEWc3OAyUOLNyH/Qg0fl5D60kZEXfPK31giHwqNnUlgFJbfN6d?=\n\t=?utf-8?q?R/aRJX8UOjhWQqJOGzpF4MiZNEF74F8/OtEzo6xQcVu0xJVYLBHgQutK1FILNwO0V?=\n\t=?utf-8?q?ZVRDh1se+db5VEQwp47I+hOJsMw6QpxSCU10+eeeAxcG9KdH7InDXaKvQ+H5AOPXR?=\n\t=?utf-8?q?9u3feO3QcAd/njCMIU6DVPAn+0mHpPGfkVYM/mBVB5SbtEAOqQ5FBFtJN7Zw5XXpb?=\n\t=?utf-8?q?BZ6tSzG1Oqch1wqOzK/3AV9TGbLNBKQ2xPXIpoa+S30YUQjqBhIzS9TH7SCF3TT7k?=\n\t=?utf-8?q?J0pjprf1fq7W3daDDD33CFYEnN1nN2QIpe2sXwj5p0fL+VmZWjOfUmS6XKz1bnyV/?=\n\t=?utf-8?q?KcWPAawDgiYBoPgD6DJXg+niET9Yi+xyiw=3D=3D?=","X-OriginatorOrg":"siemens.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n e76bb423-a053-4708-42d9-08dcf2d415e0","X-MS-Exchange-CrossTenant-AuthSource":"AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"22 Oct 2024 19:59:49.4571 (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"38ae3bcd-9579-4fd4-adda-b42e1495d55a","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n A9yRHa/N/v74gfWDf0/bb8nzXVwsbeVpe6DMNz6Re272Sa4BGz5fuMg184LvR3ieYrWiRZM+sFlV5ihphrWfvg==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"GV1PR10MB6242","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}},{"id":3400072,"web_url":"http://patchwork.ozlabs.org/comment/3400072/","msgid":"<CAFLszTgucPfjD5wt4jeM=_Dk7N9URxtW-5WYoNcdPiSZwm3RMA@mail.gmail.com>","list_archive_url":null,"date":"2024-10-23T03:39:09","subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","submitter":{"id":6170,"url":"http://patchwork.ozlabs.org/api/people/6170/","name":"Simon Glass","email":"sjg@chromium.org"},"content":"Hi Jan,\n\nOn Tue, 22 Oct 2024 at 21:59, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n>\n> On 22.10.24 19:00, Simon Glass wrote:\n> > On Tue, 22 Oct 2024 at 08:06, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n> >>\n> >> From: Li Hua Qian <huaqian.li@siemens.com>\n> >>\n> >> This brings a sysinfo driver and DT entry for the IOT2050 board series.\n> >> It translates the board information passed from SE-Boot to SPL into\n> >> values that can be retrieved via the sysinfo API. Will is already used\n> >> to fill the SMBIOS table when booting via EFI.\n> >>\n> >> Signed-off-by: Li Hua Qian <huaqian.li@siemens.com>\n> >> [Jan: split-off as separate patch, cleanup]\n> >> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>\n> >> ---\n> >>  .../dts/k3-am65-iot2050-common-u-boot.dtsi    |  18 +++\n> >>  configs/iot2050_defconfig                     |   1 +\n> >>  drivers/sysinfo/Kconfig                       |   7 +\n> >>  drivers/sysinfo/Makefile                      |   1 +\n> >>  drivers/sysinfo/iot2050.c                     | 143 ++++++++++++++++++\n> >>  drivers/sysinfo/iot2050.h                     |  26 ++++\n> >>  6 files changed, 196 insertions(+)\n> >>  create mode 100644 drivers/sysinfo/iot2050.c\n> >>  create mode 100644 drivers/sysinfo/iot2050.h\n> >\n> > I think strlcpy() might be better than strncpy() for this case\n> >\n>\n> Ack.\n>\n> > The idea with sysinfo is that we use the same enum for all boards, so\n> > please add your new things to sysinfo.h\n> >\n>\n> See below.\n>\n> > Do you actually want all the sysinfo info in capitals? If so, that's\n> > fine, just checking...\n> >\n>\n> This is how it is being shipped already, yes.\n>\n> >>\n> >> diff --git a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> >> index b6d2c816acc..55337179f9f 100644\n> >> --- a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> >> +++ b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> >> @@ -14,6 +14,24 @@\n> >>                 spi0 = &ospi0;\n> >>         };\n> >>\n> >> +       sysinfo {\n> >> +               compatible = \"siemens,sysinfo-iot2050\";\n> >> +               /* TI_SRAM_SCRATCH_BOARD_EEPROM_START */\n> >> +               offset = <0x40280000>;\n> >> +               bootph-all;\n> >> +\n> >> +               smbios {\n> >> +                       system {\n> >> +                               manufacturer = \"SIEMENS AG\";\n> >> +                               product = \"SIMATIC IOT2050\";\n> >> +                       };\n> >> +\n> >> +                       baseboard {\n> >> +                               manufacturer = \"SIEMENS AG\";\n> >> +                       };\n> >> +               };\n> >> +       };\n> >> +\n> >>         leds {\n> >>                 bootph-all;\n> >>                 status-led-red {\n> >> diff --git a/configs/iot2050_defconfig b/configs/iot2050_defconfig\n> >> index 2624f0cb573..574e232d119 100644\n> >> --- a/configs/iot2050_defconfig\n> >> +++ b/configs/iot2050_defconfig\n> >> @@ -141,6 +141,7 @@ CONFIG_SOC_TI=y\n> >>  CONFIG_SPI=y\n> >>  CONFIG_DM_SPI=y\n> >>  CONFIG_CADENCE_QSPI=y\n> >> +CONFIG_SYSINFO=y\n> >>  CONFIG_SYSRESET=y\n> >>  CONFIG_SPL_SYSRESET=y\n> >>  CONFIG_SYSRESET_TI_SCI=y\n> >> diff --git a/drivers/sysinfo/Kconfig b/drivers/sysinfo/Kconfig\n> >> index 2030e4babc9..df83df69ffb 100644\n> >> --- a/drivers/sysinfo/Kconfig\n> >> +++ b/drivers/sysinfo/Kconfig\n> >> @@ -31,6 +31,13 @@ config SYSINFO_RCAR3\n> >>         help\n> >>           Support querying SoC version information for Renesas R-Car Gen3.\n> >>\n> >> +config SYSINFO_IOT2050\n> >> +       bool \"Enable sysinfo driver for the Siemens IOT2050\"\n> >> +       depends on TARGET_IOT2050_A53\n> >> +       default y if TARGET_IOT2050_A53\n> >> +       help\n> >> +         Support querying device information for Siemens IOT2050.\n> >> +\n> >>  config SYSINFO_SANDBOX\n> >>         bool \"Enable sysinfo driver for the Sandbox board\"\n> >>         help\n> >> diff --git a/drivers/sysinfo/Makefile b/drivers/sysinfo/Makefile\n> >> index 680dde77fe8..26ca3150999 100644\n> >> --- a/drivers/sysinfo/Makefile\n> >> +++ b/drivers/sysinfo/Makefile\n> >> @@ -5,6 +5,7 @@\n> >>  obj-y += sysinfo-uclass.o\n> >>  obj-$(CONFIG_SYSINFO_GAZERBEAM) += gazerbeam.o\n> >>  obj-$(CONFIG_SYSINFO_GPIO) += gpio.o\n> >> +obj-$(CONFIG_SYSINFO_IOT2050) += iot2050.o\n> >>  obj-$(CONFIG_SYSINFO_RCAR3) += rcar3.o\n> >>  obj-$(CONFIG_SYSINFO_SANDBOX) += sandbox.o\n> >>  obj-$(CONFIG_SYSINFO_SMBIOS) += smbios.o\n> >> diff --git a/drivers/sysinfo/iot2050.c b/drivers/sysinfo/iot2050.c\n> >> new file mode 100644\n> >> index 00000000000..5359d6b8d62\n> >> --- /dev/null\n> >> +++ b/drivers/sysinfo/iot2050.c\n> >> @@ -0,0 +1,143 @@\n> >> +// SPDX-License-Identifier: GPL-2.0\n> >> +/*\n> >> + * Copyright (c) Siemens AG, 2024\n> >> + */\n> >> +\n> >> +#include <dm.h>\n> >> +#include <sysinfo.h>\n> >> +#include <net.h>\n> >> +#include <asm/arch/hardware.h>\n> >> +\n> >> +#include \"iot2050.h\"\n> >> +\n> >> +#define IOT2050_INFO_MAGIC             0x20502050\n> >> +\n> >> +struct iot2050_info {\n> >> +       u32 magic;\n> >> +       u16 size;\n> >> +       char name[20 + 1];\n> >> +       char serial[16 + 1];\n> >> +       char mlfb[18 + 1];\n> >> +       char uuid[32 + 1];\n> >> +       char a5e[18 + 1];\n> >> +       u8 mac_addr_cnt;\n> >> +       u8 mac_addr[8][ARP_HLEN];\n> >> +       char seboot_version[40 + 1];\n> >> +       u8 padding[3];\n> >> +       u32 ddr_size_mb;\n> >> +} __packed;\n> >> +\n> >> +/**\n> >> + * struct sysinfo_iot2050_priv - sysinfo private data\n> >> + * @info: iot2050 board info\n> >> + */\n> >> +struct sysinfo_iot2050_priv {\n> >> +       struct iot2050_info *info;\n> >> +};\n> >> +\n> >> +static int sysinfo_iot2050_detect(struct udevice *dev)\n> >> +{\n> >> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >> +\n> >> +       if (priv->info == NULL || priv->info->magic != IOT2050_INFO_MAGIC)\n> >> +               return -EFAULT;\n> >> +\n> >> +       return 0;\n> >> +}\n> >> +\n> >> +static int sysinfo_iot2050_get_str(struct udevice *dev, int id, size_t size,\n> >> +                                  char *val)\n> >> +{\n> >> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >> +       char byte_str[3] = {0};\n> >> +       unsigned int n;\n> >> +\n> >> +       switch (id) {\n> >> +       case BOARD_NAME:\n> >> +               strncpy(val, priv->info->name, size);\n> >> +               break;\n> >> +       case BOARD_SERIAL:\n> >> +               strncpy(val, priv->info->serial, size);\n> >> +               break;\n> >> +       case BOARD_MLFB:\n> >> +               strncpy(val, priv->info->mlfb, size);\n> >> +               break;\n> >> +       case BOARD_UUID:\n> >> +               for (n = 0; n < min(size, (size_t)16); n++) {\n> >> +                       memcpy(byte_str, priv->info->uuid + n * 2, 2);\n> >> +                       val[n] = (char)hextoul(byte_str, NULL);\n> >> +               }\n> >> +               break;\n> >> +       case BOARD_A5E:\n> >> +               strncpy(val, priv->info->a5e, size);\n> >> +               break;\n> >> +       case BOARD_SEBOOT_VER:\n> >> +               strncpy(val, priv->info->seboot_version, size);\n> >> +               break;\n> >> +       case BOARD_MAC_ADDR_1:\n> >> +       case BOARD_MAC_ADDR_2:\n> >> +       case BOARD_MAC_ADDR_3:\n> >> +       case BOARD_MAC_ADDR_4:\n> >> +       case BOARD_MAC_ADDR_5:\n> >> +       case BOARD_MAC_ADDR_6:\n> >> +       case BOARD_MAC_ADDR_7:\n> >> +       case BOARD_MAC_ADDR_8:\n> >> +               memcpy(val, priv->info->mac_addr[id - BOARD_MAC_ADDR_START],\n> >> +                      ARP_HLEN);\n> >\n> > For this, we really need another parameter to get_str(), i.e. the\n> > index, since we don't know how many MACs there will be. So how about\n> > adding a few new operations?\n> >\n> > int (*get_item_count)(struct udevice *dev, int id);\n> > int (*get_str_item)(struct udevice *dev, int id, int index, size_t\n> > size, char *val);\n>\n> Ok, makes sense.\n>\n> >\n> >> +               return 0;\n> >> +       case BOARD_DDR_SIZE:\n> >> +               memcpy(val, &priv->info->ddr_size_mb,\n> >> +                      sizeof(priv->info->ddr_size_mb));\n> >> +               return 0;\n> >> +       default:\n> >> +               return -EINVAL;\n> >> +       };\n> >> +\n> >> +       val[size - 1] = '\\0';\n> >> +       return 0;\n> >> +}\n> >> +\n> >> +static int sysinfo_iot2050_get_int(struct udevice *dev, int id, int *val)\n> >> +{\n> >> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >> +\n> >> +       switch (id) {\n> >> +       case BOARD_MAC_ADDR_CNT:\n> >> +               *val = priv->info->mac_addr_cnt;\n> >> +               return 0;\n> >> +       default:\n> >> +               return -EINVAL;\n> >> +       };\n> >> +}\n> >> +\n> >> +static const struct sysinfo_ops sysinfo_iot2050_ops = {\n> >> +       .detect = sysinfo_iot2050_detect,\n> >> +       .get_str = sysinfo_iot2050_get_str,\n> >> +       .get_int = sysinfo_iot2050_get_int,\n> >> +};\n> >> +\n> >> +static int sysinfo_iot2050_probe(struct udevice *dev)\n> >> +{\n> >> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >> +       unsigned long offset;\n> >> +\n> >> +       offset = dev_read_u32_default(dev, \"offset\",\n> >> +                                     TI_SRAM_SCRATCH_BOARD_EEPROM_START);\n> >> +       priv->info = (struct iot2050_info *)offset;\n> >> +\n> >> +       return 0;\n> >> +}\n> >> +\n> >> +static const struct udevice_id sysinfo_iot2050_ids[] = {\n> >> +       { .compatible = \"siemens,sysinfo-iot2050\" },\n> >> +       { /* sentinel */ }\n> >> +};\n> >> +\n> >> +U_BOOT_DRIVER(sysinfo_iot2050) = {\n> >> +       .name           = \"sysinfo_iot2050\",\n> >> +       .id             = UCLASS_SYSINFO,\n> >> +       .of_match       = sysinfo_iot2050_ids,\n> >> +       .ops            = &sysinfo_iot2050_ops,\n> >> +       .priv_auto      = sizeof(struct sysinfo_iot2050_priv),\n> >> +       .probe          = sysinfo_iot2050_probe,\n> >> +};\n> >> diff --git a/drivers/sysinfo/iot2050.h b/drivers/sysinfo/iot2050.h\n> >> new file mode 100644\n> >> index 00000000000..f659a8282b5\n> >> --- /dev/null\n> >> +++ b/drivers/sysinfo/iot2050.h\n> >> @@ -0,0 +1,26 @@\n> >> +/* SPDX-License-Identifier: GPL-2.0 */\n> >> +/*\n> >> + * Copyright (c) Siemens AG, 2024\n> >> + */\n> >> +\n> >> +#include <sysinfo.h>\n> >> +\n> >> +enum sysinfo_id_iot2050 {\n> >> +       BOARD_MLFB              = SYSINFO_ID_SMBIOS_SYSTEM_VERSION,\n> >> +       BOARD_SERIAL            = SYSINFO_ID_SMBIOS_SYSTEM_SERIAL,\n> >> +       BOARD_UUID              = SYSINFO_ID_SMBIOS_SYSTEM_UUID,\n> >> +       BOARD_A5E               = SYSINFO_ID_SMBIOS_BASEBOARD_PRODUCT,\n> >> +       BOARD_NAME              = SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,\n> >\n> > Do you need to rename these? It seems better to use the standard\n> > names, although I do think they are quite long.\n>\n> We don't rename, we map pre-existing field names in EEPROM and\n> pre-existing board-specific U-Boot env vars to sysinfo fields here.\n\nYes, that's what I mean. Can you just use the SYSINFO_ID... values\ndirectory, rather than creating mapping?\n\n>\n> >\n> >> +       BOARD_SEBOOT_VER        = SYSINFO_ID_USER + 0,\n> >> +       BOARD_MAC_ADDR_CNT      = SYSINFO_ID_USER + 1,\n> >> +       BOARD_MAC_ADDR_1        = SYSINFO_ID_USER + 2,\n> >> +       BOARD_MAC_ADDR_START    = BOARD_MAC_ADDR_1,\n> >> +       BOARD_MAC_ADDR_2        = SYSINFO_ID_USER + 3,\n> >> +       BOARD_MAC_ADDR_3        = SYSINFO_ID_USER + 4,\n> >> +       BOARD_MAC_ADDR_4        = SYSINFO_ID_USER + 5,\n> >> +       BOARD_MAC_ADDR_5        = SYSINFO_ID_USER + 6,\n> >> +       BOARD_MAC_ADDR_6        = SYSINFO_ID_USER + 7,\n> >> +       BOARD_MAC_ADDR_7        = SYSINFO_ID_USER + 8,\n> >> +       BOARD_MAC_ADDR_8        = SYSINFO_ID_USER + 9,\n> >> +       BOARD_DDR_SIZE          = SYSINFO_ID_USER + 10,\n> >\n> > These are the ones which should be added as standard. Be sure to\n> > comment them as necessary.\n>\n> You mean that BOARD_MAC_ADDR and BOARD_DDR_SIZE should become\n> SYSINFO_ID_BOARD_MAC_ADDR and SYSINFO_ID_BOARD_DDR_SIZE? But\n> BOARD_SEBOOT_VER is nothing that has any meaning beyond our board.\n\nFor BOARD_SEBOOT_VER, I don't know what it is, but just add a comment\nand put it in sysinfo.h. It is OK to add board-specific stufff there.\n\nIs BOARD_DDR_SIZE the memory size? Perhaps rename it to RAM_SIZE ?\n\nRegards,\nSimon","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256\n header.s=google header.b=Db9MBl/Q;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org\n header.b=\"Db9MBl/Q\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=fail smtp.mailfrom=sjg@chromium.org"],"Received":["from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4XYFDL1RfWz1xwf\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 23 Oct 2024 14:40:02 +1100 (AEDT)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 0FEF389251;\n\tWed, 23 Oct 2024 05:39:32 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id A893A892D0; Wed, 23 Oct 2024 05:39:29 +0200 (CEST)","from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com\n [IPv6:2a00:1450:4864:20::62c])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 1B443892D5\n for <u-boot@lists.denx.de>; Wed, 23 Oct 2024 05:39:25 +0200 (CEST)","by mail-ej1-x62c.google.com with SMTP id\n a640c23a62f3a-a9a4031f69fso911549566b.0\n for <u-boot@lists.denx.de>; Tue, 22 Oct 2024 20:39:25 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham\n autolearn_force=no version=3.4.2","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=chromium.org; s=google; t=1729654764; x=1730259564; darn=lists.denx.de;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:from:to:cc:subject:date:message-id:reply-to;\n bh=rxvZeo6Y7LNK3JAT3/6NdjLQBUw246vliLaQq2wa3C0=;\n b=Db9MBl/QsiqkA71HzBiUXMwQw09maHuLoYH6P3pqdWex0vMJkleKAu+u1pFwWyP4VN\n mB0XBaOFR9sXOUXOjpfxIpOIjjpqxCPvcAn1Nvru6Srj/fTFweA7aht3f8OllWsINTna\n l8GXqAReiRRPn8qLMq8zVkYquo5Q3jNeYlct4=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1729654764; x=1730259564;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=rxvZeo6Y7LNK3JAT3/6NdjLQBUw246vliLaQq2wa3C0=;\n b=gmYjEFEO25Z4GWPtA7zUAyfLlImxXU+8sQP4FASIo3RzexyrBCDCeG9BYro70KuZyF\n h3jrnw+Dep85LaXaobd57Xi3/6/vjuNy0AX4pjeVWd7LfoKJsqG+w6mi62FqwIq13hy+\n xGD4e2q6UA2QKCthWluso6MRn0ZeCP71QVy4IVdLwwyBAOV1pFJPUp+H2FrQQphc6qq4\n fRZN1dVeySxZ7sBjve3MPYzKmxZwuMfma2uRfZHZFspqn279MrWZXdhNqIh9u2TOauqM\n sRUowWSxTA7GE2lknAZkv8Gz7sUsVJT9D7LhaBoiSDIsPlbgMO4XTd5ws9n3IqMtRWTS\n TWYg==","X-Gm-Message-State":"AOJu0YwmAt5cK9jfsYqSfvvQEb4FErlYNs3L1slHZqqw3AWirL4Eo1Qt\n 2v3E85c35Id//rXmhZXnF+E25jhEp0KT/QPAVCQUCzSLdcvSbTtdTvml00dauziJQZ5EuNe6EqX\n lWx8sU1hwaluvJxmVca8vmFW95xreW7V45pJj","X-Google-Smtp-Source":"\n AGHT+IHhQot0O9x0O8tpRChzVGu8ep1X+oHe5buDE0Z8PG3LoRh5VI2EO8+y4JdGZY78OjTNgjBPsalQ6/t0nupU2IU=","X-Received":"by 2002:a17:907:3203:b0:a9a:714:4399 with SMTP id\n a640c23a62f3a-a9abf92cbf3mr90153066b.51.1729654764207; Tue, 22 Oct 2024\n 20:39:24 -0700 (PDT)","MIME-Version":"1.0","References":"<cover.1729577070.git.jan.kiszka@siemens.com>\n <64b2dae0ae60feded514b774f0e91c303c81a52d.1729577070.git.jan.kiszka@siemens.com>\n <CAFLszTgYaBh8ccEVoRAhGDAysY=XY=5es1k6TmF=mWBEHyYUAA@mail.gmail.com>\n <f1ef1ad7-f4ce-4b96-931b-d51c77a86e8d@siemens.com>","In-Reply-To":"<f1ef1ad7-f4ce-4b96-931b-d51c77a86e8d@siemens.com>","From":"Simon Glass <sjg@chromium.org>","Date":"Wed, 23 Oct 2024 05:39:09 +0200","Message-ID":"\n <CAFLszTgucPfjD5wt4jeM=_Dk7N9URxtW-5WYoNcdPiSZwm3RMA@mail.gmail.com>","Subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","To":"Jan Kiszka <jan.kiszka@siemens.com>","Cc":"U-Boot Mailing List <u-boot@lists.denx.de>, Bryan Brattlof <bb@ti.com>,\n Nishanth Menon <nm@ti.com>,\n \"Li, Hua Qian (DI FA CTR IPC CN PRC4)\" <huaqian.li@siemens.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}},{"id":3400081,"web_url":"http://patchwork.ozlabs.org/comment/3400081/","msgid":"<4e8a8120-7ad8-45e4-9373-2d1772ee6304@siemens.com>","list_archive_url":null,"date":"2024-10-23T04:14:42","subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","submitter":{"id":710,"url":"http://patchwork.ozlabs.org/api/people/710/","name":"Jan Kiszka","email":"jan.kiszka@siemens.com"},"content":"On 23.10.24 05:39, Simon Glass wrote:\n> Hi Jan,\n> \n> On Tue, 22 Oct 2024 at 21:59, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n>>\n>> On 22.10.24 19:00, Simon Glass wrote:\n>>> On Tue, 22 Oct 2024 at 08:06, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n>>>>\n>>>> From: Li Hua Qian <huaqian.li@siemens.com>\n>>>>\n>>>> This brings a sysinfo driver and DT entry for the IOT2050 board series.\n>>>> It translates the board information passed from SE-Boot to SPL into\n>>>> values that can be retrieved via the sysinfo API. Will is already used\n>>>> to fill the SMBIOS table when booting via EFI.\n>>>>\n>>>> Signed-off-by: Li Hua Qian <huaqian.li@siemens.com>\n>>>> [Jan: split-off as separate patch, cleanup]\n>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>\n>>>> ---\n>>>>  .../dts/k3-am65-iot2050-common-u-boot.dtsi    |  18 +++\n>>>>  configs/iot2050_defconfig                     |   1 +\n>>>>  drivers/sysinfo/Kconfig                       |   7 +\n>>>>  drivers/sysinfo/Makefile                      |   1 +\n>>>>  drivers/sysinfo/iot2050.c                     | 143 ++++++++++++++++++\n>>>>  drivers/sysinfo/iot2050.h                     |  26 ++++\n>>>>  6 files changed, 196 insertions(+)\n>>>>  create mode 100644 drivers/sysinfo/iot2050.c\n>>>>  create mode 100644 drivers/sysinfo/iot2050.h\n>>>\n>>> I think strlcpy() might be better than strncpy() for this case\n>>>\n>>\n>> Ack.\n>>\n>>> The idea with sysinfo is that we use the same enum for all boards, so\n>>> please add your new things to sysinfo.h\n>>>\n>>\n>> See below.\n>>\n>>> Do you actually want all the sysinfo info in capitals? If so, that's\n>>> fine, just checking...\n>>>\n>>\n>> This is how it is being shipped already, yes.\n>>\n>>>>\n>>>> diff --git a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n>>>> index b6d2c816acc..55337179f9f 100644\n>>>> --- a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n>>>> +++ b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n>>>> @@ -14,6 +14,24 @@\n>>>>                 spi0 = &ospi0;\n>>>>         };\n>>>>\n>>>> +       sysinfo {\n>>>> +               compatible = \"siemens,sysinfo-iot2050\";\n>>>> +               /* TI_SRAM_SCRATCH_BOARD_EEPROM_START */\n>>>> +               offset = <0x40280000>;\n>>>> +               bootph-all;\n>>>> +\n>>>> +               smbios {\n>>>> +                       system {\n>>>> +                               manufacturer = \"SIEMENS AG\";\n>>>> +                               product = \"SIMATIC IOT2050\";\n>>>> +                       };\n>>>> +\n>>>> +                       baseboard {\n>>>> +                               manufacturer = \"SIEMENS AG\";\n>>>> +                       };\n>>>> +               };\n>>>> +       };\n>>>> +\n>>>>         leds {\n>>>>                 bootph-all;\n>>>>                 status-led-red {\n>>>> diff --git a/configs/iot2050_defconfig b/configs/iot2050_defconfig\n>>>> index 2624f0cb573..574e232d119 100644\n>>>> --- a/configs/iot2050_defconfig\n>>>> +++ b/configs/iot2050_defconfig\n>>>> @@ -141,6 +141,7 @@ CONFIG_SOC_TI=y\n>>>>  CONFIG_SPI=y\n>>>>  CONFIG_DM_SPI=y\n>>>>  CONFIG_CADENCE_QSPI=y\n>>>> +CONFIG_SYSINFO=y\n>>>>  CONFIG_SYSRESET=y\n>>>>  CONFIG_SPL_SYSRESET=y\n>>>>  CONFIG_SYSRESET_TI_SCI=y\n>>>> diff --git a/drivers/sysinfo/Kconfig b/drivers/sysinfo/Kconfig\n>>>> index 2030e4babc9..df83df69ffb 100644\n>>>> --- a/drivers/sysinfo/Kconfig\n>>>> +++ b/drivers/sysinfo/Kconfig\n>>>> @@ -31,6 +31,13 @@ config SYSINFO_RCAR3\n>>>>         help\n>>>>           Support querying SoC version information for Renesas R-Car Gen3.\n>>>>\n>>>> +config SYSINFO_IOT2050\n>>>> +       bool \"Enable sysinfo driver for the Siemens IOT2050\"\n>>>> +       depends on TARGET_IOT2050_A53\n>>>> +       default y if TARGET_IOT2050_A53\n>>>> +       help\n>>>> +         Support querying device information for Siemens IOT2050.\n>>>> +\n>>>>  config SYSINFO_SANDBOX\n>>>>         bool \"Enable sysinfo driver for the Sandbox board\"\n>>>>         help\n>>>> diff --git a/drivers/sysinfo/Makefile b/drivers/sysinfo/Makefile\n>>>> index 680dde77fe8..26ca3150999 100644\n>>>> --- a/drivers/sysinfo/Makefile\n>>>> +++ b/drivers/sysinfo/Makefile\n>>>> @@ -5,6 +5,7 @@\n>>>>  obj-y += sysinfo-uclass.o\n>>>>  obj-$(CONFIG_SYSINFO_GAZERBEAM) += gazerbeam.o\n>>>>  obj-$(CONFIG_SYSINFO_GPIO) += gpio.o\n>>>> +obj-$(CONFIG_SYSINFO_IOT2050) += iot2050.o\n>>>>  obj-$(CONFIG_SYSINFO_RCAR3) += rcar3.o\n>>>>  obj-$(CONFIG_SYSINFO_SANDBOX) += sandbox.o\n>>>>  obj-$(CONFIG_SYSINFO_SMBIOS) += smbios.o\n>>>> diff --git a/drivers/sysinfo/iot2050.c b/drivers/sysinfo/iot2050.c\n>>>> new file mode 100644\n>>>> index 00000000000..5359d6b8d62\n>>>> --- /dev/null\n>>>> +++ b/drivers/sysinfo/iot2050.c\n>>>> @@ -0,0 +1,143 @@\n>>>> +// SPDX-License-Identifier: GPL-2.0\n>>>> +/*\n>>>> + * Copyright (c) Siemens AG, 2024\n>>>> + */\n>>>> +\n>>>> +#include <dm.h>\n>>>> +#include <sysinfo.h>\n>>>> +#include <net.h>\n>>>> +#include <asm/arch/hardware.h>\n>>>> +\n>>>> +#include \"iot2050.h\"\n>>>> +\n>>>> +#define IOT2050_INFO_MAGIC             0x20502050\n>>>> +\n>>>> +struct iot2050_info {\n>>>> +       u32 magic;\n>>>> +       u16 size;\n>>>> +       char name[20 + 1];\n>>>> +       char serial[16 + 1];\n>>>> +       char mlfb[18 + 1];\n>>>> +       char uuid[32 + 1];\n>>>> +       char a5e[18 + 1];\n>>>> +       u8 mac_addr_cnt;\n>>>> +       u8 mac_addr[8][ARP_HLEN];\n>>>> +       char seboot_version[40 + 1];\n>>>> +       u8 padding[3];\n>>>> +       u32 ddr_size_mb;\n>>>> +} __packed;\n>>>> +\n>>>> +/**\n>>>> + * struct sysinfo_iot2050_priv - sysinfo private data\n>>>> + * @info: iot2050 board info\n>>>> + */\n>>>> +struct sysinfo_iot2050_priv {\n>>>> +       struct iot2050_info *info;\n>>>> +};\n>>>> +\n>>>> +static int sysinfo_iot2050_detect(struct udevice *dev)\n>>>> +{\n>>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>>>> +\n>>>> +       if (priv->info == NULL || priv->info->magic != IOT2050_INFO_MAGIC)\n>>>> +               return -EFAULT;\n>>>> +\n>>>> +       return 0;\n>>>> +}\n>>>> +\n>>>> +static int sysinfo_iot2050_get_str(struct udevice *dev, int id, size_t size,\n>>>> +                                  char *val)\n>>>> +{\n>>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>>>> +       char byte_str[3] = {0};\n>>>> +       unsigned int n;\n>>>> +\n>>>> +       switch (id) {\n>>>> +       case BOARD_NAME:\n>>>> +               strncpy(val, priv->info->name, size);\n>>>> +               break;\n>>>> +       case BOARD_SERIAL:\n>>>> +               strncpy(val, priv->info->serial, size);\n>>>> +               break;\n>>>> +       case BOARD_MLFB:\n>>>> +               strncpy(val, priv->info->mlfb, size);\n>>>> +               break;\n>>>> +       case BOARD_UUID:\n>>>> +               for (n = 0; n < min(size, (size_t)16); n++) {\n>>>> +                       memcpy(byte_str, priv->info->uuid + n * 2, 2);\n>>>> +                       val[n] = (char)hextoul(byte_str, NULL);\n>>>> +               }\n>>>> +               break;\n>>>> +       case BOARD_A5E:\n>>>> +               strncpy(val, priv->info->a5e, size);\n>>>> +               break;\n>>>> +       case BOARD_SEBOOT_VER:\n>>>> +               strncpy(val, priv->info->seboot_version, size);\n>>>> +               break;\n>>>> +       case BOARD_MAC_ADDR_1:\n>>>> +       case BOARD_MAC_ADDR_2:\n>>>> +       case BOARD_MAC_ADDR_3:\n>>>> +       case BOARD_MAC_ADDR_4:\n>>>> +       case BOARD_MAC_ADDR_5:\n>>>> +       case BOARD_MAC_ADDR_6:\n>>>> +       case BOARD_MAC_ADDR_7:\n>>>> +       case BOARD_MAC_ADDR_8:\n>>>> +               memcpy(val, priv->info->mac_addr[id - BOARD_MAC_ADDR_START],\n>>>> +                      ARP_HLEN);\n>>>\n>>> For this, we really need another parameter to get_str(), i.e. the\n>>> index, since we don't know how many MACs there will be. So how about\n>>> adding a few new operations?\n>>>\n>>> int (*get_item_count)(struct udevice *dev, int id);\n>>> int (*get_str_item)(struct udevice *dev, int id, int index, size_t\n>>> size, char *val);\n>>\n>> Ok, makes sense.\n>>\n>>>\n>>>> +               return 0;\n>>>> +       case BOARD_DDR_SIZE:\n>>>> +               memcpy(val, &priv->info->ddr_size_mb,\n>>>> +                      sizeof(priv->info->ddr_size_mb));\n>>>> +               return 0;\n>>>> +       default:\n>>>> +               return -EINVAL;\n>>>> +       };\n>>>> +\n>>>> +       val[size - 1] = '\\0';\n>>>> +       return 0;\n>>>> +}\n>>>> +\n>>>> +static int sysinfo_iot2050_get_int(struct udevice *dev, int id, int *val)\n>>>> +{\n>>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>>>> +\n>>>> +       switch (id) {\n>>>> +       case BOARD_MAC_ADDR_CNT:\n>>>> +               *val = priv->info->mac_addr_cnt;\n>>>> +               return 0;\n>>>> +       default:\n>>>> +               return -EINVAL;\n>>>> +       };\n>>>> +}\n>>>> +\n>>>> +static const struct sysinfo_ops sysinfo_iot2050_ops = {\n>>>> +       .detect = sysinfo_iot2050_detect,\n>>>> +       .get_str = sysinfo_iot2050_get_str,\n>>>> +       .get_int = sysinfo_iot2050_get_int,\n>>>> +};\n>>>> +\n>>>> +static int sysinfo_iot2050_probe(struct udevice *dev)\n>>>> +{\n>>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n>>>> +       unsigned long offset;\n>>>> +\n>>>> +       offset = dev_read_u32_default(dev, \"offset\",\n>>>> +                                     TI_SRAM_SCRATCH_BOARD_EEPROM_START);\n>>>> +       priv->info = (struct iot2050_info *)offset;\n>>>> +\n>>>> +       return 0;\n>>>> +}\n>>>> +\n>>>> +static const struct udevice_id sysinfo_iot2050_ids[] = {\n>>>> +       { .compatible = \"siemens,sysinfo-iot2050\" },\n>>>> +       { /* sentinel */ }\n>>>> +};\n>>>> +\n>>>> +U_BOOT_DRIVER(sysinfo_iot2050) = {\n>>>> +       .name           = \"sysinfo_iot2050\",\n>>>> +       .id             = UCLASS_SYSINFO,\n>>>> +       .of_match       = sysinfo_iot2050_ids,\n>>>> +       .ops            = &sysinfo_iot2050_ops,\n>>>> +       .priv_auto      = sizeof(struct sysinfo_iot2050_priv),\n>>>> +       .probe          = sysinfo_iot2050_probe,\n>>>> +};\n>>>> diff --git a/drivers/sysinfo/iot2050.h b/drivers/sysinfo/iot2050.h\n>>>> new file mode 100644\n>>>> index 00000000000..f659a8282b5\n>>>> --- /dev/null\n>>>> +++ b/drivers/sysinfo/iot2050.h\n>>>> @@ -0,0 +1,26 @@\n>>>> +/* SPDX-License-Identifier: GPL-2.0 */\n>>>> +/*\n>>>> + * Copyright (c) Siemens AG, 2024\n>>>> + */\n>>>> +\n>>>> +#include <sysinfo.h>\n>>>> +\n>>>> +enum sysinfo_id_iot2050 {\n>>>> +       BOARD_MLFB              = SYSINFO_ID_SMBIOS_SYSTEM_VERSION,\n>>>> +       BOARD_SERIAL            = SYSINFO_ID_SMBIOS_SYSTEM_SERIAL,\n>>>> +       BOARD_UUID              = SYSINFO_ID_SMBIOS_SYSTEM_UUID,\n>>>> +       BOARD_A5E               = SYSINFO_ID_SMBIOS_BASEBOARD_PRODUCT,\n>>>> +       BOARD_NAME              = SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,\n>>>\n>>> Do you need to rename these? It seems better to use the standard\n>>> names, although I do think they are quite long.\n>>\n>> We don't rename, we map pre-existing field names in EEPROM and\n>> pre-existing board-specific U-Boot env vars to sysinfo fields here.\n> \n> Yes, that's what I mean. Can you just use the SYSINFO_ID... values\n> directory, rather than creating mapping?\n> \n\nThe mapping is unavoidable (\"pre-existing\"), and here is the most\nlogical point for me as it avoids that we have to do it twice: first in\nthe sysinfo driver (EEPROM->SYSINFO_ID) and then again in\nset_board_info_env (SYSINFO_ID->env-vars).\n\n>>\n>>>\n>>>> +       BOARD_SEBOOT_VER        = SYSINFO_ID_USER + 0,\n>>>> +       BOARD_MAC_ADDR_CNT      = SYSINFO_ID_USER + 1,\n>>>> +       BOARD_MAC_ADDR_1        = SYSINFO_ID_USER + 2,\n>>>> +       BOARD_MAC_ADDR_START    = BOARD_MAC_ADDR_1,\n>>>> +       BOARD_MAC_ADDR_2        = SYSINFO_ID_USER + 3,\n>>>> +       BOARD_MAC_ADDR_3        = SYSINFO_ID_USER + 4,\n>>>> +       BOARD_MAC_ADDR_4        = SYSINFO_ID_USER + 5,\n>>>> +       BOARD_MAC_ADDR_5        = SYSINFO_ID_USER + 6,\n>>>> +       BOARD_MAC_ADDR_6        = SYSINFO_ID_USER + 7,\n>>>> +       BOARD_MAC_ADDR_7        = SYSINFO_ID_USER + 8,\n>>>> +       BOARD_MAC_ADDR_8        = SYSINFO_ID_USER + 9,\n>>>> +       BOARD_DDR_SIZE          = SYSINFO_ID_USER + 10,\n>>>\n>>> These are the ones which should be added as standard. Be sure to\n>>> comment them as necessary.\n>>\n>> You mean that BOARD_MAC_ADDR and BOARD_DDR_SIZE should become\n>> SYSINFO_ID_BOARD_MAC_ADDR and SYSINFO_ID_BOARD_DDR_SIZE? But\n>> BOARD_SEBOOT_VER is nothing that has any meaning beyond our board.\n> \n> For BOARD_SEBOOT_VER, I don't know what it is, but just add a comment\n> and put it in sysinfo.h. It is OK to add board-specific stufff there.\n> \n\nThis still makes no sense to me. What is the point of SYSINFO_ID_USER\nthen? Why does it exists and is being used elsewhere when it shouldn't?\n\n> Is BOARD_DDR_SIZE the memory size? Perhaps rename it to RAM_SIZE ?\n> \n\nYes, and I'm also considering to append \"_MB\" in order to clarify the unit.\n\nJan","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=siemens.com header.i=@siemens.com header.a=rsa-sha256\n header.s=selector2 header.b=ANn1AWKQ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=siemens.com","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=siemens.com header.i=@siemens.com header.b=\"ANn1AWKQ\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=siemens.com","phobos.denx.de;\n spf=fail smtp.mailfrom=jan.kiszka@siemens.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=siemens.com;"],"Received":["from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4XYG0X5xSmz1xwr\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 23 Oct 2024 15:14:52 +1100 (AEDT)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id BDA3588A4C;\n\tWed, 23 Oct 2024 06:14:50 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id A237488A3D; Wed, 23 Oct 2024 06:14:48 +0200 (CEST)","from EUR02-DB5-obe.outbound.protection.outlook.com\n (mail-db5eur02on20615.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:2608::615])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id DDFD5892D4\n for <u-boot@lists.denx.de>; Wed, 23 Oct 2024 06:14:44 +0200 (CEST)","from AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:588::19)\n by AS1PR10MB7959.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:471::17)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.16; Wed, 23 Oct\n 2024 04:14:43 +0000","from AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM\n ([fe80::8fe1:7e71:cf4a:7408]) by AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM\n ([fe80::8fe1:7e71:cf4a:7408%3]) with mapi id 15.20.8093.014; Wed, 23 Oct 2024\n 04:14:43 +0000"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_NONE autolearn=no\n autolearn_force=no version=3.4.2","ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=d9T5ea8TpMtW0lZ8PSPm5opuQJsL9bVPBVizIWiDB5T3eCeegq0Vpf5NFI8awa4Gr6Aftg8jcWTrZfrZhrhrYL5cCoxUiacIxCqsqFAXUfpyrMxR7Nm+LNTOgibobl7OsyUJvAw4K+YotKjUhIMLfQVI0fpqnLsXL1PpDWg/YIH6v+386M03ELZJvL6QuIZCXxbMIkLunY8+W2Mg7eKzgBa1fk2DGd9wzAr5B5IP6v/kqmS4c0qiu3eO3E09GPPobOA434jJiLmV+PQclSBvGV6Oo5i9TjvwTS0cum6+scA0Sr5HlQiBFmUSMb+QDzW3Vdd9gWYHddHb6daISGh1rg==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=xfYZcigZE3lBH93Gvuyls4t2+U4UeuNOq3Tfq5P0JFM=;\n b=eFTcQIiPOL+90caA576GyHGZ4gy/OGiR/mvumZXvOFcRaIdsifBD8QIjIhFznySGeWAZ4zUyV9+jd79jVoM9d5Nnd2/SFRV1Y0MjS6UelO5NzfTj5VybAzyRcRYjAxS4hOJ1bsCRP0wKJhNmogNAdQ6SfCyp9T3JKdeajs8BUFwo76qKEDGUEk/Sz+No4Ga1M2RC8cMH8s/NoCpuHafMhJXtZzJyzGku6ShZyfRV9exQLkDjCfzV0ExGjTUUjlKN/ceg0m6rM4TXsgXH8wHIfxEd/aw7vCXYlgO6Xy/JIMeE4rQu11W1pbe80x9xpK1bQ9+CqPM6761dkfwkRQBcOg==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com;\n dkim=pass header.d=siemens.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=siemens.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=xfYZcigZE3lBH93Gvuyls4t2+U4UeuNOq3Tfq5P0JFM=;\n b=ANn1AWKQnDzxAzKPhHcyX7lzBnKBVzbI5gz6DNgm4knSGYGQfroBrJ3uO9MAWZ47qpwv4DkFNFTdrWstSDx3K7XDFR1L5oHWcsSOEBMlZhGQn3RHAjkbaCgmK5JX3TeeFa7+LLVUm9lhgC0VmOVvPVkUZqRTntnZLlYy/PLRNjVUor/OklrGqe+bRG66eR1Rpo+BpdYAqEyMs9rpTBodycbWGNSiGI7reqanPHBMmZLjd4jbzRYGRUJWdN26bJb0picS6MbQrvMUBFe3lkuOUvfdDtFEler4r+tSldBRkzP3OLd6hGJQn9tBukwa0emHLUY9zOhfGh7cmfFLF3Llpg==","Message-ID":"<4e8a8120-7ad8-45e4-9373-2d1772ee6304@siemens.com>","Date":"Wed, 23 Oct 2024 06:14:42 +0200","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","To":"Simon Glass <sjg@chromium.org>","Cc":"U-Boot Mailing List <u-boot@lists.denx.de>, Bryan Brattlof <bb@ti.com>,\n Nishanth Menon <nm@ti.com>,\n \"Li, Hua Qian (DI FA CTR IPC CN PRC4)\" <huaqian.li@siemens.com>","References":"<cover.1729577070.git.jan.kiszka@siemens.com>\n <64b2dae0ae60feded514b774f0e91c303c81a52d.1729577070.git.jan.kiszka@siemens.com>\n <CAFLszTgYaBh8ccEVoRAhGDAysY=XY=5es1k6TmF=mWBEHyYUAA@mail.gmail.com>\n <f1ef1ad7-f4ce-4b96-931b-d51c77a86e8d@siemens.com>\n <CAFLszTgucPfjD5wt4jeM=_Dk7N9URxtW-5WYoNcdPiSZwm3RMA@mail.gmail.com>","From":"Jan Kiszka <jan.kiszka@siemens.com>","Content-Language":"en-US","Autocrypt":"addr=jan.kiszka@siemens.com; keydata=\n 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","In-Reply-To":"\n <CAFLszTgucPfjD5wt4jeM=_Dk7N9URxtW-5WYoNcdPiSZwm3RMA@mail.gmail.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-ClientProxiedBy":"FR5P281CA0028.DEUP281.PROD.OUTLOOK.COM\n (2603:10a6:d10:f1::10) To AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM\n (2603:10a6:20b:588::19)","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"AS4PR10MB6181:EE_|AS1PR10MB7959:EE_","X-MS-Office365-Filtering-Correlation-Id":"27fe051e-3622-44b5-e419-08dcf3193915","X-MS-Exchange-AtpMessageProperties":"SA","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;ARA:13230040|1800799024|376014|366016;","X-Microsoft-Antispam-Message-Info":"=?utf-8?q?HSjDSSFxDrpNHzrdWc0moBoKculw4WK?=\n\t=?utf-8?q?G6wK9i75Svr9YuyizYRVNpJR1UpV99ro8NglW9E18wciGOfaVgr/K1WKOUGd/K26Q?=\n\t=?utf-8?q?A0GGfNzx3lCGvT1ekhoIF0yVS7t1G3RFGr86iX2dt3jhVDjSZJsA9cx0CPXXSf252?=\n\t=?utf-8?q?zNfyGTfzBp7bL0sbhRPP1HHHJsgm3WXycf6IIjLMwIl45vvdcN/f1ymbyA+Wh58hs?=\n\t=?utf-8?q?WymV+8yQL836r4mTtzG5fKJG0b65rtfbOOMXVcvXzrIGjUYNMYS6LAzZQLST+7NBI?=\n\t=?utf-8?q?8wOLaKq+f/fymOUmh0IWMiiL1SsCttfvaYH6e3yVaRKClFWr5ep6CVTSP2Oo/lGQl?=\n\t=?utf-8?q?+iD2MytYZhyLdFsFyRnzQK4S6DsNLQPqhrK431EKhAyWgfknPHv1Moy+KDwq2ANX+?=\n\t=?utf-8?q?g7Qjgvn3rgFViej+oryP7UI+5VYZubNd87o7CQYUgm/Drxlzv3yc27Z7ju5ltVwKG?=\n\t=?utf-8?q?bo0mM0Lj2l5+1at3dGjcUdazf+Uh+Ev5ih3Ub2/W+Ep0Ofu4tbkLnj5Cfu5oZgH/3?=\n\t=?utf-8?q?s4nevDR0Nn8l3ho2BkkYqugZfDsTCObQoXabXVQ0GNeqFffjzLZguT3kvkkMYFm/z?=\n\t=?utf-8?q?FVwoxkIUSDNe8CmC3x2W2FxSUAiEk6gdTY1At1qqAM8RibwtfRYhMZalwLESAjnlJ?=\n\t=?utf-8?q?DZYCl3BTk94EL+ppuzD/1xhPCfxjOHwI1R0LJtAwQAeVA2c98Si7r+EPUEWp5uwp1?=\n\t=?utf-8?q?Wja2mb78LtKejUonFGUeH+eaohgb35OwBGomr6Sr28edNv8keaSGkGxW3BEjqKDyW?=\n\t=?utf-8?q?3beLGTGJivnPIwNRUv4Pk1lP+bS9VuQ40O/sPLlymFKXygUAXtuDluj7YIW7xTT2w?=\n\t=?utf-8?q?atT3jpJrvLlfp6A2uXDbeIlQ5GirnJ48MNo2QdfacyrOpSDR90Y4NxbFUEqZfqBbg?=\n\t=?utf-8?q?jh0l9M6rzCxMiSFLYJzt5OW2BJOgJP6sFuE1u2K57UGH0GDyou4Q58RZimby9ap7u?=\n\t=?utf-8?q?XfRhsCevq8D7Nag+wVnXMzezotJiAl6/VWuFdQ49YbSpsSWLC1dcSckXTPhvskEAc?=\n\t=?utf-8?q?593/WNF8qmlCiw8zJZbXhHGrkihbgDC5xAVvmGppX9VHDFDVNNMpqq8nJRA2ZV3em?=\n\t=?utf-8?q?uBt1AA+Dax6DdFozXzNqvt8n4Un1E6oJd11+RDNkYp9emrxtdVajv89eHMn4nsev6?=\n\t=?utf-8?q?b0/uDT3kAjmQkPj1GSktt1gFfqx3hXS64c+jtq0+Lyn5vuWVynRGGDWV/4+FoJNdL?=\n\t=?utf-8?q?XPZbojZ7SrDTLDGvHokHOcoIs3EuklZ5x1TzO6auBZYhcA0rNKxsLxybdCHBTgqft?=\n\t=?utf-8?q?AQEWPl9dm0XO3?=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE;\n SFS:(13230040)(1800799024)(376014)(366016); DIR:OUT; SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?AO6UG3XvVoIQpLgoX/2ZF7zFNpJv?=\n\t=?utf-8?q?J2f3808y5Pderi3hbrDdqtx3fg+cx8eubvuMJ79yvowXZbWdgb6a5B78YLYx2WNv2?=\n\t=?utf-8?q?L94E2LOqhzCRVqRy/WxFCF2yu1jtzKAp+RJxxr6L1+X/j1X2rOzudl/B3h8XIM0Vj?=\n\t=?utf-8?q?xkVk8/4dJvUmGZuflfIh6ofNxTDG7pPmrKwvPgPmnUbaxpLWTnsuE+bxTtA3uGujZ?=\n\t=?utf-8?q?dvF6EnQ07Jyk7wkInn5mlug51IA/zgdbNe5dDsuHDpKWCHkT+L0sLcpm2yktl9T87?=\n\t=?utf-8?q?5AfStFyyQSLcbXHbf48cGjzCqYfMly+Rs1Jm5081+aVb7OHQpeOjr6eu15aP8AZoK?=\n\t=?utf-8?q?maY+k+BeMcGChD4BPdXkQctVSCqsYSayuSUOqPrL3kvsm1PRlvee+oGeabYJQe9Yo?=\n\t=?utf-8?q?gd7lwA506j9PQ4dbsfOoWTs5wIBwy7/8c0DJw3PJ88vS1gKtsHgC7NE5SXG+7gypd?=\n\t=?utf-8?q?ILUYgO1bMmjBb592Xw/4haPQ3DBBXQaEavLFIDCkEkIXZeIQUBT9gWQoo+YqI6nOX?=\n\t=?utf-8?q?vR9PtMNVQrNOU3kUYKV2eTDABFD83kdU+BDOZwMLlbWQGHmuOfI/WVrouJMjx4pXr?=\n\t=?utf-8?q?0/w06rEx9+Bc2gjIAb3+gF5j/PQEXs0L/6V992SSHQwDWIphx4hJIfKd+bkXjreJC?=\n\t=?utf-8?q?oAG0aG0+dzc1xcRg28IIPEfg2svbHZeEtesJdAu5IsjRHsLfphmT2sprxAISc5ES7?=\n\t=?utf-8?q?HzgnD/tEE7gY0TG5jhE+RzW6p07L71xx2w2PxKK8gXGbK/r7SBX933mPIFFusJh6J?=\n\t=?utf-8?q?yiUdXVO2HU8hcswnHHzSrBi6CHGPedQWSwdEdGCTTci+tZt7cBn4VL9fcSlP1xuSO?=\n\t=?utf-8?q?k7aGzgc+iTDx3T4O4D81+9Px09zGOaKNXYDpr+E8fsarzIzbOsmyYt3HCS9uTmUjJ?=\n\t=?utf-8?q?FY8sUvaztYGffT1XHdKuua/CB9ZTalcok19uQ22ZKk9RaUH9XVukgrz2SScDA83Lo?=\n\t=?utf-8?q?207tlacINHAoKWeEnd1T6qlYxD7HH+7DCV1OhRUSg4oAMRz+S5cnnui0TTZFkPCsL?=\n\t=?utf-8?q?hBqmFHRG2b4LQCoxtpeFP2qOG66Hxk2qg8pNzxcoYesL0DZqG79+JzDB2ImNd6w1x?=\n\t=?utf-8?q?mRCZuaBdGdfPo4PYwJZFN0D9EcwBpSJQ0pFK4LaZB5asoTRVY+McBjk8JFGm6iETx?=\n\t=?utf-8?q?SxK+LZe/EyGB58OWaauWBI7HfsF4SvAxCDb0AdlH5JaZx73SXXdUm5Dhj+3K7nmzL?=\n\t=?utf-8?q?XfTPn0qQFxuM348zXbTOqmr0crrqYC5cQuWYQjhsSjK352G2F8jZRqmypW/823VWq?=\n\t=?utf-8?q?SC+3Rhk4cf4kr/FF0qapaFlGqqxMJDNATcS07bdq1hH+Ad4oafiHT4/M5uhKrP1Nd?=\n\t=?utf-8?q?0/Rn1ez/U+izpr2KHgrTIGKpf7ZMyDqaZ0LMydzZIgSB1H9TfHyfSjr8QmQR7gXct?=\n\t=?utf-8?q?x9YWqe5bzJ/aBuygKfDYvz0FA1gpxrCRhO+AzdbbOLXOfJ3WzPe27lZUIYordqpqL?=\n\t=?utf-8?q?5CIWxJ8p2CsfqbXU0sxewgJtKYocvbNAe0leD8oy4z+NjD1L1CM2VwfIybeVK428I?=\n\t=?utf-8?q?qFaMKFpfM1c324F+sL6Dw0de500uYNEFNA=3D=3D?=","X-OriginatorOrg":"siemens.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 27fe051e-3622-44b5-e419-08dcf3193915","X-MS-Exchange-CrossTenant-AuthSource":"AS4PR10MB6181.EURPRD10.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"23 Oct 2024 04:14:43.7998 (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"38ae3bcd-9579-4fd4-adda-b42e1495d55a","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n FI2rX1qNZRAP5TQSynhahI0RchTYkXUR1xylLiXVIWNBj0ddgJakMhq21iCZHRcJYf4ZAIh7ls7bTzq0TVkWDQ==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AS1PR10MB7959","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}},{"id":3406127,"web_url":"http://patchwork.ozlabs.org/comment/3406127/","msgid":"<CAFLszTjk2Sqidf94XJJa-57M-foSCx83v3V1h1ObiseoizBv9Q@mail.gmail.com>","list_archive_url":null,"date":"2024-10-31T17:51:30","subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","submitter":{"id":6170,"url":"http://patchwork.ozlabs.org/api/people/6170/","name":"Simon Glass","email":"sjg@chromium.org"},"content":"Hi Jan,\n\nOn Wed, 23 Oct 2024 at 06:14, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n>\n> On 23.10.24 05:39, Simon Glass wrote:\n> > Hi Jan,\n> >\n> > On Tue, 22 Oct 2024 at 21:59, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n> >>\n> >> On 22.10.24 19:00, Simon Glass wrote:\n> >>> On Tue, 22 Oct 2024 at 08:06, Jan Kiszka <jan.kiszka@siemens.com> wrote:\n> >>>>\n> >>>> From: Li Hua Qian <huaqian.li@siemens.com>\n> >>>>\n> >>>> This brings a sysinfo driver and DT entry for the IOT2050 board series.\n> >>>> It translates the board information passed from SE-Boot to SPL into\n> >>>> values that can be retrieved via the sysinfo API. Will is already used\n> >>>> to fill the SMBIOS table when booting via EFI.\n> >>>>\n> >>>> Signed-off-by: Li Hua Qian <huaqian.li@siemens.com>\n> >>>> [Jan: split-off as separate patch, cleanup]\n> >>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>\n> >>>> ---\n> >>>>  .../dts/k3-am65-iot2050-common-u-boot.dtsi    |  18 +++\n> >>>>  configs/iot2050_defconfig                     |   1 +\n> >>>>  drivers/sysinfo/Kconfig                       |   7 +\n> >>>>  drivers/sysinfo/Makefile                      |   1 +\n> >>>>  drivers/sysinfo/iot2050.c                     | 143 ++++++++++++++++++\n> >>>>  drivers/sysinfo/iot2050.h                     |  26 ++++\n> >>>>  6 files changed, 196 insertions(+)\n> >>>>  create mode 100644 drivers/sysinfo/iot2050.c\n> >>>>  create mode 100644 drivers/sysinfo/iot2050.h\n> >>>\n> >>> I think strlcpy() might be better than strncpy() for this case\n> >>>\n> >>\n> >> Ack.\n> >>\n> >>> The idea with sysinfo is that we use the same enum for all boards, so\n> >>> please add your new things to sysinfo.h\n> >>>\n> >>\n> >> See below.\n> >>\n> >>> Do you actually want all the sysinfo info in capitals? If so, that's\n> >>> fine, just checking...\n> >>>\n> >>\n> >> This is how it is being shipped already, yes.\n> >>\n> >>>>\n> >>>> diff --git a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> >>>> index b6d2c816acc..55337179f9f 100644\n> >>>> --- a/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> >>>> +++ b/arch/arm/dts/k3-am65-iot2050-common-u-boot.dtsi\n> >>>> @@ -14,6 +14,24 @@\n> >>>>                 spi0 = &ospi0;\n> >>>>         };\n> >>>>\n> >>>> +       sysinfo {\n> >>>> +               compatible = \"siemens,sysinfo-iot2050\";\n> >>>> +               /* TI_SRAM_SCRATCH_BOARD_EEPROM_START */\n> >>>> +               offset = <0x40280000>;\n> >>>> +               bootph-all;\n> >>>> +\n> >>>> +               smbios {\n> >>>> +                       system {\n> >>>> +                               manufacturer = \"SIEMENS AG\";\n> >>>> +                               product = \"SIMATIC IOT2050\";\n> >>>> +                       };\n> >>>> +\n> >>>> +                       baseboard {\n> >>>> +                               manufacturer = \"SIEMENS AG\";\n> >>>> +                       };\n> >>>> +               };\n> >>>> +       };\n> >>>> +\n> >>>>         leds {\n> >>>>                 bootph-all;\n> >>>>                 status-led-red {\n> >>>> diff --git a/configs/iot2050_defconfig b/configs/iot2050_defconfig\n> >>>> index 2624f0cb573..574e232d119 100644\n> >>>> --- a/configs/iot2050_defconfig\n> >>>> +++ b/configs/iot2050_defconfig\n> >>>> @@ -141,6 +141,7 @@ CONFIG_SOC_TI=y\n> >>>>  CONFIG_SPI=y\n> >>>>  CONFIG_DM_SPI=y\n> >>>>  CONFIG_CADENCE_QSPI=y\n> >>>> +CONFIG_SYSINFO=y\n> >>>>  CONFIG_SYSRESET=y\n> >>>>  CONFIG_SPL_SYSRESET=y\n> >>>>  CONFIG_SYSRESET_TI_SCI=y\n> >>>> diff --git a/drivers/sysinfo/Kconfig b/drivers/sysinfo/Kconfig\n> >>>> index 2030e4babc9..df83df69ffb 100644\n> >>>> --- a/drivers/sysinfo/Kconfig\n> >>>> +++ b/drivers/sysinfo/Kconfig\n> >>>> @@ -31,6 +31,13 @@ config SYSINFO_RCAR3\n> >>>>         help\n> >>>>           Support querying SoC version information for Renesas R-Car Gen3.\n> >>>>\n> >>>> +config SYSINFO_IOT2050\n> >>>> +       bool \"Enable sysinfo driver for the Siemens IOT2050\"\n> >>>> +       depends on TARGET_IOT2050_A53\n> >>>> +       default y if TARGET_IOT2050_A53\n> >>>> +       help\n> >>>> +         Support querying device information for Siemens IOT2050.\n> >>>> +\n> >>>>  config SYSINFO_SANDBOX\n> >>>>         bool \"Enable sysinfo driver for the Sandbox board\"\n> >>>>         help\n> >>>> diff --git a/drivers/sysinfo/Makefile b/drivers/sysinfo/Makefile\n> >>>> index 680dde77fe8..26ca3150999 100644\n> >>>> --- a/drivers/sysinfo/Makefile\n> >>>> +++ b/drivers/sysinfo/Makefile\n> >>>> @@ -5,6 +5,7 @@\n> >>>>  obj-y += sysinfo-uclass.o\n> >>>>  obj-$(CONFIG_SYSINFO_GAZERBEAM) += gazerbeam.o\n> >>>>  obj-$(CONFIG_SYSINFO_GPIO) += gpio.o\n> >>>> +obj-$(CONFIG_SYSINFO_IOT2050) += iot2050.o\n> >>>>  obj-$(CONFIG_SYSINFO_RCAR3) += rcar3.o\n> >>>>  obj-$(CONFIG_SYSINFO_SANDBOX) += sandbox.o\n> >>>>  obj-$(CONFIG_SYSINFO_SMBIOS) += smbios.o\n> >>>> diff --git a/drivers/sysinfo/iot2050.c b/drivers/sysinfo/iot2050.c\n> >>>> new file mode 100644\n> >>>> index 00000000000..5359d6b8d62\n> >>>> --- /dev/null\n> >>>> +++ b/drivers/sysinfo/iot2050.c\n> >>>> @@ -0,0 +1,143 @@\n> >>>> +// SPDX-License-Identifier: GPL-2.0\n> >>>> +/*\n> >>>> + * Copyright (c) Siemens AG, 2024\n> >>>> + */\n> >>>> +\n> >>>> +#include <dm.h>\n> >>>> +#include <sysinfo.h>\n> >>>> +#include <net.h>\n> >>>> +#include <asm/arch/hardware.h>\n> >>>> +\n> >>>> +#include \"iot2050.h\"\n> >>>> +\n> >>>> +#define IOT2050_INFO_MAGIC             0x20502050\n> >>>> +\n> >>>> +struct iot2050_info {\n> >>>> +       u32 magic;\n> >>>> +       u16 size;\n> >>>> +       char name[20 + 1];\n> >>>> +       char serial[16 + 1];\n> >>>> +       char mlfb[18 + 1];\n> >>>> +       char uuid[32 + 1];\n> >>>> +       char a5e[18 + 1];\n> >>>> +       u8 mac_addr_cnt;\n> >>>> +       u8 mac_addr[8][ARP_HLEN];\n> >>>> +       char seboot_version[40 + 1];\n> >>>> +       u8 padding[3];\n> >>>> +       u32 ddr_size_mb;\n> >>>> +} __packed;\n> >>>> +\n> >>>> +/**\n> >>>> + * struct sysinfo_iot2050_priv - sysinfo private data\n> >>>> + * @info: iot2050 board info\n> >>>> + */\n> >>>> +struct sysinfo_iot2050_priv {\n> >>>> +       struct iot2050_info *info;\n> >>>> +};\n> >>>> +\n> >>>> +static int sysinfo_iot2050_detect(struct udevice *dev)\n> >>>> +{\n> >>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >>>> +\n> >>>> +       if (priv->info == NULL || priv->info->magic != IOT2050_INFO_MAGIC)\n> >>>> +               return -EFAULT;\n> >>>> +\n> >>>> +       return 0;\n> >>>> +}\n> >>>> +\n> >>>> +static int sysinfo_iot2050_get_str(struct udevice *dev, int id, size_t size,\n> >>>> +                                  char *val)\n> >>>> +{\n> >>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >>>> +       char byte_str[3] = {0};\n> >>>> +       unsigned int n;\n> >>>> +\n> >>>> +       switch (id) {\n> >>>> +       case BOARD_NAME:\n> >>>> +               strncpy(val, priv->info->name, size);\n> >>>> +               break;\n> >>>> +       case BOARD_SERIAL:\n> >>>> +               strncpy(val, priv->info->serial, size);\n> >>>> +               break;\n> >>>> +       case BOARD_MLFB:\n> >>>> +               strncpy(val, priv->info->mlfb, size);\n> >>>> +               break;\n> >>>> +       case BOARD_UUID:\n> >>>> +               for (n = 0; n < min(size, (size_t)16); n++) {\n> >>>> +                       memcpy(byte_str, priv->info->uuid + n * 2, 2);\n> >>>> +                       val[n] = (char)hextoul(byte_str, NULL);\n> >>>> +               }\n> >>>> +               break;\n> >>>> +       case BOARD_A5E:\n> >>>> +               strncpy(val, priv->info->a5e, size);\n> >>>> +               break;\n> >>>> +       case BOARD_SEBOOT_VER:\n> >>>> +               strncpy(val, priv->info->seboot_version, size);\n> >>>> +               break;\n> >>>> +       case BOARD_MAC_ADDR_1:\n> >>>> +       case BOARD_MAC_ADDR_2:\n> >>>> +       case BOARD_MAC_ADDR_3:\n> >>>> +       case BOARD_MAC_ADDR_4:\n> >>>> +       case BOARD_MAC_ADDR_5:\n> >>>> +       case BOARD_MAC_ADDR_6:\n> >>>> +       case BOARD_MAC_ADDR_7:\n> >>>> +       case BOARD_MAC_ADDR_8:\n> >>>> +               memcpy(val, priv->info->mac_addr[id - BOARD_MAC_ADDR_START],\n> >>>> +                      ARP_HLEN);\n> >>>\n> >>> For this, we really need another parameter to get_str(), i.e. the\n> >>> index, since we don't know how many MACs there will be. So how about\n> >>> adding a few new operations?\n> >>>\n> >>> int (*get_item_count)(struct udevice *dev, int id);\n> >>> int (*get_str_item)(struct udevice *dev, int id, int index, size_t\n> >>> size, char *val);\n> >>\n> >> Ok, makes sense.\n> >>\n> >>>\n> >>>> +               return 0;\n> >>>> +       case BOARD_DDR_SIZE:\n> >>>> +               memcpy(val, &priv->info->ddr_size_mb,\n> >>>> +                      sizeof(priv->info->ddr_size_mb));\n> >>>> +               return 0;\n> >>>> +       default:\n> >>>> +               return -EINVAL;\n> >>>> +       };\n> >>>> +\n> >>>> +       val[size - 1] = '\\0';\n> >>>> +       return 0;\n> >>>> +}\n> >>>> +\n> >>>> +static int sysinfo_iot2050_get_int(struct udevice *dev, int id, int *val)\n> >>>> +{\n> >>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >>>> +\n> >>>> +       switch (id) {\n> >>>> +       case BOARD_MAC_ADDR_CNT:\n> >>>> +               *val = priv->info->mac_addr_cnt;\n> >>>> +               return 0;\n> >>>> +       default:\n> >>>> +               return -EINVAL;\n> >>>> +       };\n> >>>> +}\n> >>>> +\n> >>>> +static const struct sysinfo_ops sysinfo_iot2050_ops = {\n> >>>> +       .detect = sysinfo_iot2050_detect,\n> >>>> +       .get_str = sysinfo_iot2050_get_str,\n> >>>> +       .get_int = sysinfo_iot2050_get_int,\n> >>>> +};\n> >>>> +\n> >>>> +static int sysinfo_iot2050_probe(struct udevice *dev)\n> >>>> +{\n> >>>> +       struct sysinfo_iot2050_priv *priv = dev_get_priv(dev);\n> >>>> +       unsigned long offset;\n> >>>> +\n> >>>> +       offset = dev_read_u32_default(dev, \"offset\",\n> >>>> +                                     TI_SRAM_SCRATCH_BOARD_EEPROM_START);\n> >>>> +       priv->info = (struct iot2050_info *)offset;\n> >>>> +\n> >>>> +       return 0;\n> >>>> +}\n> >>>> +\n> >>>> +static const struct udevice_id sysinfo_iot2050_ids[] = {\n> >>>> +       { .compatible = \"siemens,sysinfo-iot2050\" },\n> >>>> +       { /* sentinel */ }\n> >>>> +};\n> >>>> +\n> >>>> +U_BOOT_DRIVER(sysinfo_iot2050) = {\n> >>>> +       .name           = \"sysinfo_iot2050\",\n> >>>> +       .id             = UCLASS_SYSINFO,\n> >>>> +       .of_match       = sysinfo_iot2050_ids,\n> >>>> +       .ops            = &sysinfo_iot2050_ops,\n> >>>> +       .priv_auto      = sizeof(struct sysinfo_iot2050_priv),\n> >>>> +       .probe          = sysinfo_iot2050_probe,\n> >>>> +};\n> >>>> diff --git a/drivers/sysinfo/iot2050.h b/drivers/sysinfo/iot2050.h\n> >>>> new file mode 100644\n> >>>> index 00000000000..f659a8282b5\n> >>>> --- /dev/null\n> >>>> +++ b/drivers/sysinfo/iot2050.h\n> >>>> @@ -0,0 +1,26 @@\n> >>>> +/* SPDX-License-Identifier: GPL-2.0 */\n> >>>> +/*\n> >>>> + * Copyright (c) Siemens AG, 2024\n> >>>> + */\n> >>>> +\n> >>>> +#include <sysinfo.h>\n> >>>> +\n> >>>> +enum sysinfo_id_iot2050 {\n> >>>> +       BOARD_MLFB              = SYSINFO_ID_SMBIOS_SYSTEM_VERSION,\n> >>>> +       BOARD_SERIAL            = SYSINFO_ID_SMBIOS_SYSTEM_SERIAL,\n> >>>> +       BOARD_UUID              = SYSINFO_ID_SMBIOS_SYSTEM_UUID,\n> >>>> +       BOARD_A5E               = SYSINFO_ID_SMBIOS_BASEBOARD_PRODUCT,\n> >>>> +       BOARD_NAME              = SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,\n> >>>\n> >>> Do you need to rename these? It seems better to use the standard\n> >>> names, although I do think they are quite long.\n> >>\n> >> We don't rename, we map pre-existing field names in EEPROM and\n> >> pre-existing board-specific U-Boot env vars to sysinfo fields here.\n> >\n> > Yes, that's what I mean. Can you just use the SYSINFO_ID... values\n> > directory, rather than creating mapping?\n> >\n>\n> The mapping is unavoidable (\"pre-existing\"), and here is the most\n> logical point for me as it avoids that we have to do it twice: first in\n> the sysinfo driver (EEPROM->SYSINFO_ID) and then again in\n> set_board_info_env (SYSINFO_ID->env-vars).\n\nIf the EEPROM is storing it in an internal format, there should be a mapping.\n\n>\n> >>\n> >>>\n> >>>> +       BOARD_SEBOOT_VER        = SYSINFO_ID_USER + 0,\n> >>>> +       BOARD_MAC_ADDR_CNT      = SYSINFO_ID_USER + 1,\n> >>>> +       BOARD_MAC_ADDR_1        = SYSINFO_ID_USER + 2,\n> >>>> +       BOARD_MAC_ADDR_START    = BOARD_MAC_ADDR_1,\n> >>>> +       BOARD_MAC_ADDR_2        = SYSINFO_ID_USER + 3,\n> >>>> +       BOARD_MAC_ADDR_3        = SYSINFO_ID_USER + 4,\n> >>>> +       BOARD_MAC_ADDR_4        = SYSINFO_ID_USER + 5,\n> >>>> +       BOARD_MAC_ADDR_5        = SYSINFO_ID_USER + 6,\n> >>>> +       BOARD_MAC_ADDR_6        = SYSINFO_ID_USER + 7,\n> >>>> +       BOARD_MAC_ADDR_7        = SYSINFO_ID_USER + 8,\n> >>>> +       BOARD_MAC_ADDR_8        = SYSINFO_ID_USER + 9,\n> >>>> +       BOARD_DDR_SIZE          = SYSINFO_ID_USER + 10,\n> >>>\n> >>> These are the ones which should be added as standard. Be sure to\n> >>> comment them as necessary.\n> >>\n> >> You mean that BOARD_MAC_ADDR and BOARD_DDR_SIZE should become\n> >> SYSINFO_ID_BOARD_MAC_ADDR and SYSINFO_ID_BOARD_DDR_SIZE? But\n> >> BOARD_SEBOOT_VER is nothing that has any meaning beyond our board.\n> >\n> > For BOARD_SEBOOT_VER, I don't know what it is, but just add a comment\n> > and put it in sysinfo.h. It is OK to add board-specific stufff there.\n> >\n>\n> This still makes no sense to me. What is the point of SYSINFO_ID_USER\n> then? Why does it exists and is being used elsewhere when it shouldn't?\n\nIt's just that we should be trying to use common things where we can.\nIf everyone creates their own set of MAC addresses, it just gets\nconfusing. If you use an implied mapping for your use case, what will\nhappen if someone else comes along and changes it?\n\n>\n> > Is BOARD_DDR_SIZE the memory size? Perhaps rename it to RAM_SIZE ?\n> >\n>\n> Yes, and I'm also considering to append \"_MB\" in order to clarify the unit.\n\nYes that's a good idea.\n\nI've sent a patch changing the naming, BTW.\n\nRegards,\nSimon","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256\n header.s=google header.b=eFC/Sx8a;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=85.214.62.61; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org\n header.b=\"eFC/Sx8a\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=pass smtp.mailfrom=sjg@chromium.org"],"Received":["from phobos.denx.de (phobos.denx.de [85.214.62.61])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4XfWlT4xzDz1xwc\n\tfor <incoming@patchwork.ozlabs.org>; Fri,  1 Nov 2024 04:51:49 +1100 (AEDT)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id A787F88B0C;\n\tThu, 31 Oct 2024 18:51:46 +0100 (CET)","by phobos.denx.de (Postfix, from userid 109)\n id D3FE188DF1; Thu, 31 Oct 2024 18:51:45 +0100 (CET)","from mail-ej1-x631.google.com (mail-ej1-x631.google.com\n [IPv6:2a00:1450:4864:20::631])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 9CCD488A4C\n for <u-boot@lists.denx.de>; Thu, 31 Oct 2024 18:51:43 +0100 (CET)","by mail-ej1-x631.google.com with SMTP id\n a640c23a62f3a-a9a6b4ca29bso133357666b.3\n for <u-boot@lists.denx.de>; Thu, 31 Oct 2024 10:51:43 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham\n autolearn_force=no version=3.4.2","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=chromium.org; s=google; t=1730397103; x=1731001903; darn=lists.denx.de;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:from:to:cc:subject:date:message-id:reply-to;\n bh=FWjM5ZkPow+T3MX8vYAqm7/FXa59qRTBRLHAm6mgrls=;\n b=eFC/Sx8asg2GUG+xb10T58/JoKJguFHSZuySREKd9QQCnsCRHxL+g2YwnC/4+JKpul\n McWuunJwvZ7OFImc+B2DQRYRou06g4DViB6LQGJwjK7W32tiVQcUTyXq+eOjW7E9aZ2g\n Gf26wShotSo/MgYAg+25B7CHVW/Cl8RW7PJyk=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1730397103; x=1731001903;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=FWjM5ZkPow+T3MX8vYAqm7/FXa59qRTBRLHAm6mgrls=;\n b=PJTdF5kiPl523qdfNfiSyGD4NUSYCRQoMMxOTfYfar0XGblC1wc5YzaBhqCWW2AYZu\n 2r+lndpF9Gg5M6Ndlex7rj5d7NTB6zaSIh2QWsCKfGnC3kCZy92uCmQRRyGpasl1jjp6\n o5nlAMHaosXEzeXz5Bov5unZZLjdPX4Ljn6jdpMbdXi0jhjDPVlmD+vg98MeSz9BFjtt\n PNRO6zZjnENCq/fHap0XYqECLcNcSoseazsZZ56henHtvsY4xgzzHPKmgrcxjH9kKyk1\n 5CFea83Z0xCjT15RPNNIlHzsKuzq4Kuru/0rJR3aNcLfKJ/x8n/dxtyv4gCg1+IdEmC/\n WbkQ==","X-Gm-Message-State":"AOJu0YzL8Om36sCh8LbgBRrmKlwjVdiYJ7rlaAFR8846ebmuu0zvVrIW\n 5mRZ1Ow6MOsVm+abDRNJP1CwmFbqKqZyrsOi1NJO8KfJ/eTa3VFYcyA6aqMEmU7GAp0V1oOyrh6\n Kqzk/KyQl/CMwrzoA9FCjj7Q4T3QWwbdixO0O","X-Google-Smtp-Source":"\n AGHT+IGrp/STMCeEyTgblevMHK19qwhcKS/8vjsrh+YO+3h+bYnGYwv5uIfTzPDTIYOcQlgWeSLX7/3Dsxp1CzfGldA=","X-Received":"by 2002:a17:907:7208:b0:a9e:2e72:f8f4 with SMTP id\n a640c23a62f3a-a9e5089d50cmr352163866b.1.1730397102956; Thu, 31 Oct 2024\n 10:51:42 -0700 (PDT)","MIME-Version":"1.0","References":"<cover.1729577070.git.jan.kiszka@siemens.com>\n <64b2dae0ae60feded514b774f0e91c303c81a52d.1729577070.git.jan.kiszka@siemens.com>\n <CAFLszTgYaBh8ccEVoRAhGDAysY=XY=5es1k6TmF=mWBEHyYUAA@mail.gmail.com>\n <f1ef1ad7-f4ce-4b96-931b-d51c77a86e8d@siemens.com>\n <CAFLszTgucPfjD5wt4jeM=_Dk7N9URxtW-5WYoNcdPiSZwm3RMA@mail.gmail.com>\n <4e8a8120-7ad8-45e4-9373-2d1772ee6304@siemens.com>","In-Reply-To":"<4e8a8120-7ad8-45e4-9373-2d1772ee6304@siemens.com>","From":"Simon Glass <sjg@chromium.org>","Date":"Thu, 31 Oct 2024 18:51:30 +0100","Message-ID":"\n <CAFLszTjk2Sqidf94XJJa-57M-foSCx83v3V1h1ObiseoizBv9Q@mail.gmail.com>","Subject":"Re: [PATCH v2 12/13] sysinfo: Add driver for IOT2050 boards","To":"Jan Kiszka <jan.kiszka@siemens.com>","Cc":"U-Boot Mailing List <u-boot@lists.denx.de>, Bryan Brattlof <bb@ti.com>,\n Nishanth Menon <nm@ti.com>,\n \"Li, Hua Qian (DI FA CTR IPC CN PRC4)\" <huaqian.li@siemens.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}}]