diff options
Diffstat (limited to 'common/board_info.c')
| -rw-r--r-- | common/board_info.c | 37 | 
1 files changed, 29 insertions, 8 deletions
| diff --git a/common/board_info.c b/common/board_info.c index b54aa30a944..1cfe34f7067 100644 --- a/common/board_info.c +++ b/common/board_info.c @@ -1,31 +1,52 @@  // SPDX-License-Identifier: GPL-2.0+  #include <common.h> +#include <dm.h>  #include <init.h> +#include <sysinfo.h>  #include <asm/global_data.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();  } | 
