]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
toradex: common: Add sysinfo driver
authorEmanuele Ghidoli <emanuele.ghidoli@toradex.com>
Fri, 23 Feb 2024 09:11:41 +0000 (10:11 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 1 Mar 2024 14:10:44 +0000 (09:10 -0500)
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.

Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> # Verdin iMX8M Plus
Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Reviewed-by: Fabio Estevam <festevam@gmail.com>
16 files changed:
arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi
arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi
arch/arm/dts/imx6dl-colibri-eval-v3-u-boot.dtsi
arch/arm/dts/imx6q-apalis-eval-u-boot.dtsi
arch/arm/dts/imx6ull-colibri-eval-v3-u-boot.dtsi
arch/arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi
arch/arm/dts/imx8mm-verdin-wifi-dev-u-boot.dtsi
arch/arm/dts/imx8mp-verdin-wifi-dev-u-boot.dtsi
arch/arm/dts/k3-am625-verdin-wifi-dev-u-boot.dtsi
arch/arm/dts/tegra124-apalis-u-boot.dtsi [new file with mode: 0644]
arch/arm/dts/tegra20-colibri-u-boot.dtsi [new file with mode: 0644]
arch/arm/dts/tegra30-apalis-u-boot.dtsi [new file with mode: 0644]
arch/arm/dts/tegra30-colibri-u-boot.dtsi [new file with mode: 0644]
arch/arm/dts/vf610-colibri-eval-v3-u-boot.dtsi
board/toradex/common/Kconfig
board/toradex/common/tdx-common.c

index c54a59e89c5d158c43c78753785904771d42e1d1..d73be74d2112ff479b9b26ec70a3077a3de62b8b 100644 (file)
@@ -3,6 +3,12 @@
  * Copyright 2019 Toradex AG
  */
 
+/ {
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
+};
+
 &mu {
        bootph-some-ram;
 };
index 6ab6b1f9ee691234faddc98b823f6f6c840a24c7..60c4cd6fc01ffca2e48d21df09b8a249af2c91f2 100644 (file)
@@ -3,6 +3,12 @@
  * Copyright 2019 Toradex AG
  */
 
+/ {
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
+};
+
 &{/imx8qx-pm} {
 
        bootph-some-ram;
index 0eea4d1862ae095d3e56688014843cde96065222..5a91d0aca20448c3e1e097b2bc1e17a0948cfef2 100644 (file)
                mmc0 = &usdhc3;
                mmc1 = &usdhc1;
        };
+
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
 };
 
 &wdog1 {
index 3c6e503d043b649a41f9706607033d16c79410f3..59412635420ad8173c26b4de6f7b971930749132 100644 (file)
                mmc1 = &usdhc1;
                mmc2 = &usdhc2;
        };
+
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
 };
 
 &wdog1 {
index 6823b42d45145211d494c5749164863e2872d38e..731814216e1f35c990ba37b9e6055a5155c1a106 100644 (file)
@@ -9,6 +9,10 @@
                usb0 = &usbotg1; /* required for ums */
                display0 = &lcdif;
        };
+
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
 };
 
 &pinctrl_uart1 {
index b2c12a413daf1190bd85f16c64f65c87c7dce2a0..68142769d360ece93a6a5f1d699285e09c09a458 100644 (file)
                mmc0 = &usdhc3;
                mmc1 = &usdhc1;
        };
+
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
 };
 
 &lcdif {
index 515f195ab759186c4d695ccf04b2bacb76318164..38db56059d69187cbc299999df3375ef2dd94326 100644 (file)
                eeprom2 = &eeprom_display_adapter;
        };
 
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
+
        wdt-reboot {
                compatible = "wdt-reboot";
                bootph-pre-ram;
index 67f1d45ce2691bb03bfc2d39805e50a5b376aec5..03f211d5f7d3b2bedf7bb829ce8fb14151b83eb1 100644 (file)
                eeprom2 = &eeprom_display_adapter;
        };
 
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
+
        wdt-reboot {
                compatible = "wdt-reboot";
                bootph-pre-ram;
index 02f34c90c6d7741eccea74fce3656b13ea9ab566..28b697b67ae08ec38fd0a5cdfc80d4f5713c8597 100644 (file)
        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 (file)
index 0000000..a3614d2
--- /dev/null
@@ -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 (file)
index 0000000..d4a669a
--- /dev/null
@@ -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 (file)
index 0000000..37cbfbc
--- /dev/null
@@ -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 (file)
index 0000000..37cbfbc
--- /dev/null
@@ -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";
+       };
+};
index 572d40877ef985f0870dd1704a91112593669283..8c3b86c201fa48b98ad9dd91dee75c0fe8bf3600 100644 (file)
@@ -7,6 +7,10 @@
        soc {
                bootph-all;
        };
+
+       sysinfo {
+               compatible = "toradex,sysinfo";
+       };
 };
 
 &aips0 {
index 1f6a5e4db561e3fe80c82390b7bad4bb496ba23d..b85893ab44e4efebaa922a338ab78e899cb659f9 100644 (file)
@@ -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
index 6084436b48b49ae0bc6179118fdd4b76fa7dbfed..1f3253f4222e92adb65c9ea1926822ac9f3a98bf 100644 (file)
@@ -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)
 {