[PATCH 2/2] common: board_f: Print information for all sysresets

Michal Suchanek msuchanek at suse.de
Sun Sep 25 15:27:31 CEST 2022


Boards can have multiple sysresets, iterate all when printing sysreset
info.

Also print the symbolic error when reporting sysreset failure.

Fixes: 23471aed5c ("board_f: Add reset status printing")
Signed-off-by: Michal Suchanek <msuchanek at suse.de>
---

 common/board_f.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/common/board_f.c b/common/board_f.c
index 18e2246733..0835b376bc 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -55,7 +55,7 @@
 #include <asm/io.h>
 #include <asm/sections.h>
 #include <dm/root.h>
-#include <linux/errno.h>
+#include <errno.h>
 
 /*
  * Pointer to initial global data area
@@ -163,20 +163,27 @@ static int print_resetinfo(void)
 {
 	struct udevice *dev;
 	char status[256];
+	bool first = true;
 	int ret;
 
-	ret = uclass_first_device_err(UCLASS_SYSRESET, &dev);
-	if (ret) {
-		debug("%s: No sysreset device found (error: %d)\n",
-		      __func__, ret);
-		/* Not all boards have sysreset drivers available during early
-		 * boot, so don't fail if one can't be found.
-		 */
-		return 0;
-	}
+	/* Not all boards have sysreset drivers available during early
+	 * boot, so don't fail if one can't be found.
+	 */
+	for (ret = uclass_first_device_check(UCLASS_SYSRESET, &dev); dev;
+			ret = uclass_next_device_check(&dev)) {
+		if (ret) {
+			debug("%s: %s sysreset device (error: %d %s)\n",
+			      __func__, dev->name, ret, errno_str(ret));
+			continue;
+		}
 
-	if (!sysreset_get_status(dev, status, sizeof(status)))
-		printf("%s", status);
+		if (!sysreset_get_status(dev, status, sizeof(status))) {
+			printf("%s%s", first ? "" : " ", status);
+			first = false;
+		}
+	}
+	if (!first)
+		printf("\n");
 
 	return 0;
 }
-- 
2.37.3



More information about the U-Boot mailing list