[PATCH v3 1/2] sysinfo: Allow showing model info from sysinfo
Simon Glass
sjg at chromium.org
Fri Feb 5 05:18:39 CET 2021
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 <sjg at chromium.org>
Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
---
Changes in v3:
- Rebase to master
common/board_info.c | 37 +++++++++++++++++++++++++++++--------
include/sysinfo.h | 15 +++++++++++++++
2 files changed, 44 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 c045d316b07..8bd2343e7bf 100644
--- a/include/sysinfo.h
+++ b/include/sysinfo.h
@@ -32,6 +32,21 @@
*/
#if CONFIG_IS_ENABLED(SYSINFO)
+/** enum sysinfo_id - Standard IDs defined by U-Boot */
+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,
+};
+
struct sysinfo_ops {
/**
* detect() - Run the hardware info detection procedure for this
--
2.30.0.478.g8a0d178c01-goog
More information about the U-Boot
mailing list