At present only the model name is shown on start. Some boards want to
display more information. Add some more options to allow display of the
manufacturer as well as the version and date of any prior-stage
firmware.

This is useful for coreboot, at least. If other boards have more
information to display, it is easy to add it, now.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 common/board_info.c     | 72 +++++++++++++++++++++++++++++------------
 drivers/sysinfo/Kconfig |  7 ++++
 include/sysinfo.h       |  3 ++
 3 files changed, 61 insertions(+), 21 deletions(-)

diff --git a/common/board_info.c b/common/board_info.c
index a62c04794b90..f4c385add90c 100644
--- a/common/board_info.c
+++ b/common/board_info.c
@@ -15,35 +15,65 @@ int __weak checkboard(void)
        return 0;
 }
 
+static const struct to_show {
+       const char *name;
+       enum sysinfo_id id;
+} to_show[] = {
+       { "Manufacturer", SYSINFO_ID_BOARD_MANUFACTURER},
+       { "Prior-stage version", SYSINFO_ID_PRIOR_STAGE_VERSION },
+       { "Prior-stage date", SYSINFO_ID_PRIOR_STAGE_DATE },
+       { /* sentinel */ }
+};
+
+static int try_sysinfo(void)
+{
+       struct udevice *dev;
+       char str[80];
+       int ret;
+
+       /* This might provide more detail */
+       ret = sysinfo_get(&dev);
+       if (ret)
+               return ret;
+
+       ret = sysinfo_detect(dev);
+       if (ret)
+               return ret;
+
+       ret = sysinfo_get_str(dev, SYSINFO_ID_BOARD_MODEL, sizeof(str), str);
+       if (ret)
+               return ret;
+       printf("Model: %s\n", str);
+
+       if (IS_ENABLED(CONFIG_SYSINFO_EXTRA)) {
+               const struct to_show *item;
+
+               for (item = to_show; item->id; item++) {
+                       ret = sysinfo_get_str(dev, item->id, sizeof(str), str);
+                       if (!ret)
+                               printf("%s: %s\n", item->name, str);
+               }
+       }
+
+       return 0;
+}
+
 int show_board_info(void)
 {
        if (IS_ENABLED(CONFIG_OF_CONTROL)) {
-               struct udevice *dev;
-               const char *model;
-               char str[80];
                int ret = -ENOSYS;
 
-               if (IS_ENABLED(CONFIG_SYSINFO)) {
-                       /* This might provide more detail */
-                       ret = sysinfo_get(&dev);
-                       if (!ret) {
-                               ret = sysinfo_detect(dev);
-                               if (!ret) {
-                                       ret = sysinfo_get_str(dev,
-                                                     SYSINFO_ID_BOARD_MODEL,
-                                                     sizeof(str), str);
-                               }
-                       }
-               }
+               if (IS_ENABLED(CONFIG_SYSINFO))
+                       ret = try_sysinfo();
 
                /* Fail back to the main 'model' if available */
-               if (ret)
-                       model = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
-               else
-                       model = str;
+               if (ret) {
+                       const char *model;
 
-               if (model)
-                       printf("Model: %s\n", model);
+                       model = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
+                       if (model)
+                               printf("Model: %s\n", model);
+               }
        }
 
        return checkboard();
diff --git a/drivers/sysinfo/Kconfig b/drivers/sysinfo/Kconfig
index e35f7cb17914..2030e4babc9f 100644
--- a/drivers/sysinfo/Kconfig
+++ b/drivers/sysinfo/Kconfig
@@ -8,6 +8,13 @@ menuconfig SYSINFO
 
 if SYSINFO
 
+config SYSINFO_EXTRA
+       bool "Show extra information on startup"
+       help
+         Enable this to see extra information on startup. Normally only the
+         model is shown, but with this option the vendor and any prior-stage
+         firmware's version and date are shown as well.
+
 config SPL_SYSINFO
        depends on SPL_DM
        bool "Enable board driver support in SPL"
diff --git a/include/sysinfo.h b/include/sysinfo.h
index b140d742e93d..f2c1aa29d18e 100644
--- a/include/sysinfo.h
+++ b/include/sysinfo.h
@@ -46,6 +46,9 @@ enum sysinfo_id {
 
        /* For show_board_info() */
        SYSINFO_ID_BOARD_MODEL,
+       SYSINFO_ID_BOARD_MANUFACTURER,
+       SYSINFO_ID_PRIOR_STAGE_VERSION,
+       SYSINFO_ID_PRIOR_STAGE_DATE,
 
        /* First value available for downstream/board used */
        SYSINFO_ID_USER = 0x1000,
-- 
2.42.0.869.gea05f2083d-goog

Reply via email to