All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian Kohlschütter" <christian@kohlschutter.com>
To: u-boot@lists.denx.de
Cc: "Christian Kohlschütter" <christian@kohlschutter.com>
Subject: [PATCH] common: board_f: Fix crash in print_cpuinfo
Date: Thu, 29 Sep 2022 00:20:07 +0000	[thread overview]
Message-ID: <20220929002008.9177-1-christian@kohlschutter.com> (raw)

With CONFIG_DISPLAY_CPUINFO=y and CONFIG_CPU=y, the initcall sequence
may fail (and therefore hang the boot process) with an -ENODEV (err=-19)
error code.

This is caused by either cpu_get_current_dev/cpu_get_desc failing to
return CPU information.

If no CPU information can be obtained, fall-back to the non-Driver Model
implementation of print_cpuinfo.

Signed-off-by: Christian Kohlschütter <christian@kohlschutter.com>
---
 common/board_f.c | 14 +++++++++-----
 include/init.h   |  3 +--
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/common/board_f.c b/common/board_f.c
index 18e2246733..0656845e24 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -182,9 +182,12 @@ static int print_resetinfo(void)
 }
 #endif
 
-#if defined(CONFIG_DISPLAY_CPUINFO) && CONFIG_IS_ENABLED(CPU)
-static int print_cpuinfo(void)
+#if defined(CONFIG_DISPLAY_CPUINFO)
+static int print_cpuinfo_0(void)
 {
+#if !CONFIG_IS_ENABLED(CPU)
+	return print_cpuinfo();
+#else
 	struct udevice *dev;
 	char desc[512];
 	int ret;
@@ -193,19 +196,20 @@ static int print_cpuinfo(void)
 	if (!dev) {
 		debug("%s: Could not get CPU device\n",
 		      __func__);
-		return -ENODEV;
+		return print_cpuinfo(); // fallback
 	}
 
 	ret = cpu_get_desc(dev, desc, sizeof(desc));
 	if (ret) {
 		debug("%s: Could not get CPU description (err = %d)\n",
 		      dev->name, ret);
-		return ret;
+		return print_cpuinfo(); // fallback
 	}
 
 	printf("CPU:   %s\n", desc);
 
 	return 0;
+#endif
 }
 #endif
 
@@ -866,7 +870,7 @@ static const init_fnc_t init_sequence_f[] = {
 	print_resetinfo,
 #endif
 #if defined(CONFIG_DISPLAY_CPUINFO)
-	print_cpuinfo,		/* display cpu info (and speed) */
+	print_cpuinfo_0,		/* display cpu info (and speed) */
 #endif
 #if defined(CONFIG_DTB_RESELECT)
 	embedded_dtb_select,
diff --git a/include/init.h b/include/init.h
index 7b8f62c121..9837c22b75 100644
--- a/include/init.h
+++ b/include/init.h
@@ -210,14 +210,13 @@ int pci_init(void);
  */
 int init_cache_f_r(void);
 
-#if !CONFIG_IS_ENABLED(CPU)
 /**
  * print_cpuinfo() - Display information about the CPU
  *
  * Return: 0 if OK, -ve on error
  */
 int print_cpuinfo(void);
-#endif
+
 int timer_init(void);
 
 #if defined(CONFIG_DTB_RESELECT)
-- 
2.36.2


             reply	other threads:[~2022-09-29  0:20 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-29  0:20 Christian Kohlschütter [this message]
2022-09-29  2:36 ` [PATCH] common: board_f: Fix crash in print_cpuinfo Simon Glass
2022-09-29 14:24   ` Christian Kohlschütter
2022-09-29 23:55     ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220929002008.9177-1-christian@kohlschutter.com \
    --to=christian@kohlschutter.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.