[PATCH v3 2/4] lib: utils: Improve fdt_serial_init

Xiang W wxjstz at 126.com
Sun May 21 22:18:07 PDT 2023


A final check of all DT nodes does not necessarily find a match, so
SBI_ENODEV needs to be returned. Optimize removal of current_driver.

Signed-off-by: Xiang W <wxjstz at 126.com>
Reviewed-by: Anup Patel <anup at brainfault.org>
---
 lib/utils/serial/fdt_serial.c | 48 +++++++++++++----------------------
 1 file changed, 17 insertions(+), 31 deletions(-)

diff --git a/lib/utils/serial/fdt_serial.c b/lib/utils/serial/fdt_serial.c
index 1a4bf9e..0baa722 100644
--- a/lib/utils/serial/fdt_serial.c
+++ b/lib/utils/serial/fdt_serial.c
@@ -17,13 +17,6 @@
 extern struct fdt_serial *fdt_serial_drivers[];
 extern unsigned long fdt_serial_drivers_size;
 
-static struct fdt_serial dummy = {
-	.match_table = NULL,
-	.init = NULL,
-};
-
-static struct fdt_serial *current_driver = &dummy;
-
 int fdt_serial_init(void)
 {
 	const void *prop;
@@ -57,20 +50,15 @@ int fdt_serial_init(void)
 		if (!match)
 			continue;
 
-		if (drv->init) {
-			rc = drv->init(fdt, noff, match);
-			if (rc == SBI_ENODEV)
-				continue;
-			if (rc)
-				return rc;
-		}
-		current_driver = drv;
-		break;
-	}
+		/* drv->init must not be NULL */
+		if (drv->init == NULL)
+			return SBI_EFAIL;
 
-	/* Check if we found desired driver */
-	if (current_driver != &dummy)
-		goto done;
+		rc = drv->init(fdt, noff, match);
+		if (rc == SBI_ENODEV)
+			continue;
+		return rc;
+	}
 
 	/* Lastly check all DT nodes */
 	for (pos = 0; pos < fdt_serial_drivers_size; pos++) {
@@ -80,17 +68,15 @@ int fdt_serial_init(void)
 		if (noff < 0)
 			continue;
 
-		if (drv->init) {
-			rc = drv->init(fdt, noff, match);
-			if (rc == SBI_ENODEV)
-				continue;
-			if (rc)
-				return rc;
-		}
-		current_driver = drv;
-		break;
+		/* drv->init must not be NULL */
+		if (drv->init == NULL)
+			return SBI_EFAIL;
+
+		rc = drv->init(fdt, noff, match);
+		if (rc == SBI_ENODEV)
+			continue;
+		return rc;
 	}
 
-done:
-	return 0;
+	return SBI_ENODEV;
 }
-- 
2.39.2




More information about the opensbi mailing list