
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@chromium.org Reviewed-by: Bin Meng bmeng.cn@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