Hello Francesco, On Tue, Feb 20, 2024 at 7:31 PM Francesco Dolcini <france...@dolcini.it> wrote: > > From: Emanuele Ghidoli <emanuele.ghid...@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.ghid...@toradex.com> > Signed-off-by: Francesco Dolcini <francesco.dolc...@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@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.opan...@gmail.com skype: igor.opanyuk http://ua.linkedin.com/in/iopaniuk