Some boards may want to show the SKU ID or other information obtained at
runtime. Allow this to come from sysinfo. The board can then provide a
sysinfo driver to provide it.

Signed-off-by: Simon Glass <s...@chromium.org>
Reviewed-by: Bin Meng <bmeng...@gmail.com>
---

(no changes since v3)

Changes in v3:
- Rebase to master

 common/board_info.c | 37 +++++++++++++++++++++++++++++--------
 include/sysinfo.h   |  4 ++++
 2 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/common/board_info.c b/common/board_info.c
index a6db087f960..20a2dea1f35 100644
--- a/common/board_info.c
+++ b/common/board_info.c
@@ -1,30 +1,51 @@
 // SPDX-License-Identifier: GPL-2.0+
 
 #include <common.h>
+#include <dm.h>
 #include <init.h>
+#include <sysinfo.h>
 #include <linux/libfdt.h>
 #include <linux/compiler.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 int __weak checkboard(void)
 {
        return 0;
 }
 
 /*
- * If the root node of the DTB has a "model" property, show it.
+ * Check sysinfo for board information. Failing that if the root node of the 
DTB
+ * has a "model" property, show it.
+ *
  * Then call checkboard().
  */
 int __weak show_board_info(void)
 {
-#ifdef CONFIG_OF_CONTROL
-       DECLARE_GLOBAL_DATA_PTR;
-       const char *model;
+       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 = uclass_first_device_err(UCLASS_SYSINFO, &dev);
+                       if (!ret)
+                               ret = sysinfo_get_str(dev,
+                                                     SYSINFO_ID_BOARD_MODEL,
+                                                     sizeof(str), str);
+               }
 
-       model = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
+               /* Fail back to the main 'model' if available */
+               if (ret)
+                       model = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
+               else
+                       model = str;
 
-       if (model)
-               printf("Model: %s\n", model);
-#endif
+               if (model)
+                       printf("Model: %s\n", model);
+       }
 
        return checkboard();
 }
diff --git a/include/sysinfo.h b/include/sysinfo.h
index 743f3554659..f4ffb1a3503 100644
--- a/include/sysinfo.h
+++ b/include/sysinfo.h
@@ -35,9 +35,13 @@
 enum sysinfo_id {
        SYSINFO_ID_NONE,
 
+       /* For SMBIOS tables */
        SYSINFO_ID_SMBIOS_SYSTEM_VERSION,
        SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,
 
+       /* For show_board_info() */
+       SYSINFO_ID_BOARD_MODEL,
+
        /* First value available for downstream/board used */
        SYSINFO_ID_USER = 0x1000,
 };
-- 
2.30.0.478.g8a0d178c01-goog

Reply via email to