[U-Boot] [PATCH 07/16] dm: board: Support printing CPU info using the uclass
Simon Glass
sjg at chromium.org
Sun Mar 19 18:59:26 UTC 2017
With driver model we can obtain CPU information by calling the CPU uclass.
This avoids ad-hoc code for each board. Change the code to do this when
CONFIG_BOARD is enabled.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
common/board_f.c | 11 ++++++++++-
drivers/cpu/cpu-uclass.c | 19 +++++++++++++++++++
include/cpu.h | 5 +++++
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/common/board_f.c b/common/board_f.c
index df9a64a20f..4d9d2f30c7 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -852,6 +852,15 @@ int reserve_arch(void)
return board_walk_opt_phase(BOARD_F_RESERVE_ARCH);
}
+int print_cpuinfo(void)
+{
+#ifdef CONFIG_CPU
+ return cpu_print_info();
+#else
+ return 0;
+#endif
+}
+
#else
/* Architecture-specific memory reservation */
@@ -938,7 +947,7 @@ static const init_fnc_t init_sequence_f[] = {
defined(CONFIG_BOARD_ENABLE)
checkcpu,
#endif
-#if defined(CONFIG_DISPLAY_CPUINFO)
+#if defined(CONFIG_DISPLAY_CPUINFO) || defined(CONFIG_BOARD_ENABLED)
print_cpuinfo, /* display cpu info (and speed) */
#endif
#if defined(CONFIG_DISPLAY_BOARDINFO)
diff --git a/drivers/cpu/cpu-uclass.c b/drivers/cpu/cpu-uclass.c
index c57ac16b3a..2a69ea3af3 100644
--- a/drivers/cpu/cpu-uclass.c
+++ b/drivers/cpu/cpu-uclass.c
@@ -54,6 +54,25 @@ int cpu_get_vendor(struct udevice *dev, char *buf, int size)
return ops->get_vendor(dev, buf, size);
}
+int cpu_print_info(void)
+{
+ struct udevice *dev;
+ char name[60];
+ int ret;
+
+ ret = uclass_first_device(UCLASS_CPU, &dev);
+ if (ret)
+ return ret;
+ if (!dev)
+ return 0;
+ ret = cpu_get_desc(dev, name, sizeof(name));
+ if (ret)
+ return ret;
+ printf("CPU: %s\n", name);
+
+ return 0;
+}
+
U_BOOT_DRIVER(cpu_bus) = {
.name = "cpu_bus",
.id = UCLASS_SIMPLE_BUS,
diff --git a/include/cpu.h b/include/cpu.h
index 954257715a..2d5c373343 100644
--- a/include/cpu.h
+++ b/include/cpu.h
@@ -124,4 +124,9 @@ int cpu_get_count(struct udevice *dev);
*/
int cpu_get_vendor(struct udevice *dev, char *buf, int size);
+/**
+ * cpu_print_info() - Print information about the first CPU
+ */
+int cpu_print_info(void);
+
#endif
--
2.12.0.367.g23dc2f6d3c-goog
More information about the U-Boot
mailing list