[PATCH v1 5/7] toradex: common: Add sysinfo driver

Igor Opaniuk igor.opaniuk at gmail.com
Wed Feb 21 16:43:28 CET 2024


Hello Francesco,

On Tue, Feb 20, 2024 at 7:31 PM Francesco Dolcini <francesco at dolcini.it> wrote:
>
> From: Emanuele Ghidoli <emanuele.ghidoli at toradex.com>
>
> This commit introduces support for the Toradex sysinfo driver in U-Boot,
> which uses information from Toradex config block to print correct
> board model.
> In case the Toradex config block is not present sysinfo prints the model
> of the board provided by device tree removing per board specific prints.
>
> Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli at toradex.com>
> Signed-off-by: Francesco Dolcini <francesco.dolcini at toradex.com>
> ---
>  arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi    |  6 +++
>  arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi  |  6 +++
>  .../dts/imx6dl-colibri-eval-v3-u-boot.dtsi    |  4 ++
>  arch/arm/dts/imx6q-apalis-eval-u-boot.dtsi    |  4 ++
>  .../dts/imx6ull-colibri-eval-v3-u-boot.dtsi   |  4 ++
>  .../arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi |  4 ++
>  .../dts/imx8mm-verdin-wifi-dev-u-boot.dtsi    |  4 ++
>  .../dts/imx8mp-verdin-wifi-dev-u-boot.dtsi    |  4 ++
>  .../dts/k3-am625-verdin-wifi-dev-u-boot.dtsi  |  4 ++
>  arch/arm/dts/tegra124-apalis-u-boot.dtsi      | 12 +++++
>  arch/arm/dts/tegra20-colibri-u-boot.dtsi      | 12 +++++
>  arch/arm/dts/tegra30-apalis-u-boot.dtsi       | 12 +++++
>  arch/arm/dts/tegra30-colibri-u-boot.dtsi      | 12 +++++
>  .../arm/dts/vf610-colibri-eval-v3-u-boot.dtsi |  4 ++
>  board/toradex/common/Kconfig                  |  1 +
>  board/toradex/common/tdx-common.c             | 50 ++++++++++++++++---
>  16 files changed, 136 insertions(+), 7 deletions(-)
>  create mode 100644 arch/arm/dts/tegra124-apalis-u-boot.dtsi
>  create mode 100644 arch/arm/dts/tegra20-colibri-u-boot.dtsi
>  create mode 100644 arch/arm/dts/tegra30-apalis-u-boot.dtsi
>  create mode 100644 arch/arm/dts/tegra30-colibri-u-boot.dtsi
>
> diff --git a/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi b/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi
> index c54a59e89c5d..d73be74d2112 100644
> --- a/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi
> +++ b/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi
> @@ -3,6 +3,12 @@
>   * Copyright 2019 Toradex AG
>   */
>
> +/ {
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +};
> +
>  &mu {
>         bootph-some-ram;
>  };
> diff --git a/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi b/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi
> index 6ab6b1f9ee69..60c4cd6fc01f 100644
> --- a/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi
> +++ b/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi
> @@ -3,6 +3,12 @@
>   * Copyright 2019 Toradex AG
>   */
>
> +/ {
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +};
> +
>  &{/imx8qx-pm} {
>
>         bootph-some-ram;
> diff --git a/arch/arm/dts/imx6dl-colibri-eval-v3-u-boot.dtsi b/arch/arm/dts/imx6dl-colibri-eval-v3-u-boot.dtsi
> index 0eea4d1862ae..5a91d0aca204 100644
> --- a/arch/arm/dts/imx6dl-colibri-eval-v3-u-boot.dtsi
> +++ b/arch/arm/dts/imx6dl-colibri-eval-v3-u-boot.dtsi
> @@ -16,6 +16,10 @@
>                 mmc0 = &usdhc3;
>                 mmc1 = &usdhc1;
>         };
> +
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
>  };
>
>  &wdog1 {
> diff --git a/arch/arm/dts/imx6q-apalis-eval-u-boot.dtsi b/arch/arm/dts/imx6q-apalis-eval-u-boot.dtsi
> index 3c6e503d043b..59412635420a 100644
> --- a/arch/arm/dts/imx6q-apalis-eval-u-boot.dtsi
> +++ b/arch/arm/dts/imx6q-apalis-eval-u-boot.dtsi
> @@ -19,6 +19,10 @@
>                 mmc1 = &usdhc1;
>                 mmc2 = &usdhc2;
>         };
> +
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
>  };
>
>  &wdog1 {
> diff --git a/arch/arm/dts/imx6ull-colibri-eval-v3-u-boot.dtsi b/arch/arm/dts/imx6ull-colibri-eval-v3-u-boot.dtsi
> index 6823b42d4514..731814216e1f 100644
> --- a/arch/arm/dts/imx6ull-colibri-eval-v3-u-boot.dtsi
> +++ b/arch/arm/dts/imx6ull-colibri-eval-v3-u-boot.dtsi
> @@ -9,6 +9,10 @@
>                 usb0 = &usbotg1; /* required for ums */
>                 display0 = &lcdif;
>         };
> +
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
>  };
>
>  &pinctrl_uart1 {
> diff --git a/arch/arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi b/arch/arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi
> index b2c12a413daf..68142769d360 100644
> --- a/arch/arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi
> +++ b/arch/arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi
> @@ -11,6 +11,10 @@
>                 mmc0 = &usdhc3;
>                 mmc1 = &usdhc1;
>         };
> +
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
>  };
>
>  &lcdif {
> diff --git a/arch/arm/dts/imx8mm-verdin-wifi-dev-u-boot.dtsi b/arch/arm/dts/imx8mm-verdin-wifi-dev-u-boot.dtsi
> index 515f195ab759..38db56059d69 100644
> --- a/arch/arm/dts/imx8mm-verdin-wifi-dev-u-boot.dtsi
> +++ b/arch/arm/dts/imx8mm-verdin-wifi-dev-u-boot.dtsi
> @@ -12,6 +12,10 @@
>                 eeprom2 = &eeprom_display_adapter;
>         };
>
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +
Have you considered introducing some common *-u-boot.dtsi include
and putting such nodes there just to avoid code duplication?

>         wdt-reboot {
>                 compatible = "wdt-reboot";
>                 bootph-pre-ram;
> diff --git a/arch/arm/dts/imx8mp-verdin-wifi-dev-u-boot.dtsi b/arch/arm/dts/imx8mp-verdin-wifi-dev-u-boot.dtsi
> index 67f1d45ce269..03f211d5f7d3 100644
> --- a/arch/arm/dts/imx8mp-verdin-wifi-dev-u-boot.dtsi
> +++ b/arch/arm/dts/imx8mp-verdin-wifi-dev-u-boot.dtsi
> @@ -12,6 +12,10 @@
>                 eeprom2 = &eeprom_display_adapter;
>         };
>
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +
>         wdt-reboot {
>                 compatible = "wdt-reboot";
>                 bootph-pre-ram;
> diff --git a/arch/arm/dts/k3-am625-verdin-wifi-dev-u-boot.dtsi b/arch/arm/dts/k3-am625-verdin-wifi-dev-u-boot.dtsi
> index 02f34c90c6d7..28b697b67ae0 100644
> --- a/arch/arm/dts/k3-am625-verdin-wifi-dev-u-boot.dtsi
> +++ b/arch/arm/dts/k3-am625-verdin-wifi-dev-u-boot.dtsi
> @@ -19,6 +19,10 @@
>         memory at 80000000 {
>                 bootph-all;
>         };
> +
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
>  };
>
>  &main_timer0 {
> diff --git a/arch/arm/dts/tegra124-apalis-u-boot.dtsi b/arch/arm/dts/tegra124-apalis-u-boot.dtsi
> new file mode 100644
> index 000000000000..a3614d279439
> --- /dev/null
> +++ b/arch/arm/dts/tegra124-apalis-u-boot.dtsi
> @@ -0,0 +1,12 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/*
> + * Copyright 2023 Toradex
> + */
> +
> +#include "tegra124-u-boot.dtsi"
> +
> +/ {
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +};
> diff --git a/arch/arm/dts/tegra20-colibri-u-boot.dtsi b/arch/arm/dts/tegra20-colibri-u-boot.dtsi
> new file mode 100644
> index 000000000000..d4a669a288d8
> --- /dev/null
> +++ b/arch/arm/dts/tegra20-colibri-u-boot.dtsi
> @@ -0,0 +1,12 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/*
> + * Copyright 2023 Toradex
> + */
> +
> +#include "tegra20-u-boot.dtsi"
> +
> +/ {
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +};
> diff --git a/arch/arm/dts/tegra30-apalis-u-boot.dtsi b/arch/arm/dts/tegra30-apalis-u-boot.dtsi
> new file mode 100644
> index 000000000000..37cbfbcc3506
> --- /dev/null
> +++ b/arch/arm/dts/tegra30-apalis-u-boot.dtsi
> @@ -0,0 +1,12 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/*
> + * Copyright 2023 Toradex
> + */
> +
> +#include "tegra30-u-boot.dtsi"
> +
> +/ {
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +};
> diff --git a/arch/arm/dts/tegra30-colibri-u-boot.dtsi b/arch/arm/dts/tegra30-colibri-u-boot.dtsi
> new file mode 100644
> index 000000000000..37cbfbcc3506
> --- /dev/null
> +++ b/arch/arm/dts/tegra30-colibri-u-boot.dtsi
> @@ -0,0 +1,12 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/*
> + * Copyright 2023 Toradex
> + */
> +
> +#include "tegra30-u-boot.dtsi"
> +
> +/ {
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
> +};
> diff --git a/arch/arm/dts/vf610-colibri-eval-v3-u-boot.dtsi b/arch/arm/dts/vf610-colibri-eval-v3-u-boot.dtsi
> index 572d40877ef9..8c3b86c201fa 100644
> --- a/arch/arm/dts/vf610-colibri-eval-v3-u-boot.dtsi
> +++ b/arch/arm/dts/vf610-colibri-eval-v3-u-boot.dtsi
> @@ -7,6 +7,10 @@
>         soc {
>                 bootph-all;
>         };
> +
> +       sysinfo {
> +               compatible = "toradex,sysinfo";
> +       };
>  };
>
>  &aips0 {
> diff --git a/board/toradex/common/Kconfig b/board/toradex/common/Kconfig
> index 1f6a5e4db561..b85893ab44e4 100644
> --- a/board/toradex/common/Kconfig
> +++ b/board/toradex/common/Kconfig
> @@ -4,6 +4,7 @@
>  menuconfig TDX_CFG_BLOCK
>         bool "Enable Toradex config block support"
>         select OF_BOARD_SETUP
> +       select SYSINFO
>         help
>           The Toradex config block stored production data on the on-module
>           flash device (NAND, NOR or eMMC). The area is normally preserved by
> diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
> index 6084436b48b4..1f3253f4222e 100644
> --- a/board/toradex/common/tdx-common.c
> +++ b/board/toradex/common/tdx-common.c
> @@ -3,15 +3,16 @@
>   * Copyright (c) 2016 Toradex, Inc.
>   */
>
> +#include <dm.h>
>  #include <common.h>
>  #include <env.h>
>  #include <g_dnl.h>
>  #include <init.h>
>  #include <linux/libfdt.h>
> +#include <sysinfo.h>
>
>  #ifdef CONFIG_VIDEO
>  #include <bmp_logo.h>
> -#include <dm.h>
>  #include <splash.h>
>  #include <video.h>
>  #endif
> @@ -103,13 +104,8 @@ __weak int print_bootinfo(void)
>
>  int checkboard(void)
>  {
> -       if (valid_cfgblock) {
> -               printf("Model: Toradex %04d %s %s\n",
> -                      tdx_hw_tag.prodid,
> -                      toradex_modules[tdx_hw_tag.prodid].name,
> -                      tdx_board_rev_str);
> +       if (valid_cfgblock)
>                 printf("Serial#: %s\n", tdx_serial_str);
> -       }
>
>  #ifdef CONFIG_TDX_CFG_BLOCK_EXTRA
>         if (tdx_carrier_board_name)
> @@ -188,6 +184,46 @@ static int settings_r(void)
>  }
>  EVENT_SPY_SIMPLE(EVT_SETTINGS_R, settings_r);
>
> +static int tdx_detect(struct udevice *dev)
> +{
> +       return valid_cfgblock ? 0 : -EINVAL;
> +}
> +
> +static int tdx_get_str(struct udevice *dev, int id, size_t size, char *val)
> +{
> +       int ret = -ENOTSUPP;
> +
> +       switch (id) {
> +       case SYSINFO_ID_BOARD_MODEL:
> +               snprintf(val, size,
> +                        "Toradex %04d %s %s",
> +                        tdx_hw_tag.prodid,
> +                        toradex_modules[tdx_hw_tag.prodid].name,
> +                        tdx_board_rev_str);
> +
> +               ret = 0;
> +       }
> +
> +       return ret;
> +}
> +
> +static const struct udevice_id sysinfo_tdx_ids[] = {
> +       { .compatible = "toradex,sysinfo" },
> +       { /* sentinel */ }
> +};
> +
> +static const struct sysinfo_ops sysinfo_tdx_ops = {
> +       .detect         = tdx_detect,
> +       .get_str        = tdx_get_str,
> +};
> +
> +U_BOOT_DRIVER(sysinfo_toradex) = {
> +       .name           = "sysinfo_toradex",
> +       .id             = UCLASS_SYSINFO,
> +       .of_match       = sysinfo_tdx_ids,
> +       .ops            = &sysinfo_tdx_ops,
> +};
> +
>  #ifdef CONFIG_TDX_CFG_BLOCK_USB_GADGET_PID
>  int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
>  {
> --
> 2.39.2
>

-- 
Best regards - Atentamente - Meilleures salutations

Igor Opaniuk

mailto: igor.opaniuk at gmail.com
skype: igor.opanyuk
http://ua.linkedin.com/in/iopaniuk


More information about the U-Boot mailing list