[PATCH 08/10] platform: generic: Initialize overrides with fdt_driver

Samuel Holland samuel.holland at sifive.com
Tue Mar 25 16:43:31 PDT 2025


In addition to deduplicating the code, this also improves the match
selection logic to respect the priority order of the compatible strings,
as implemented in commit 0ffe265fd969 ("lib: utils/fdt: Respect
compatible string fallback priority").

Signed-off-by: Samuel Holland <samuel.holland at sifive.com>
---

 platform/generic/platform.c | 27 +--------------------------
 1 file changed, 1 insertion(+), 26 deletions(-)

diff --git a/platform/generic/platform.c b/platform/generic/platform.c
index 19566e69..04448d71 100644
--- a/platform/generic/platform.c
+++ b/platform/generic/platform.c
@@ -33,31 +33,6 @@
 /* List of platform override modules generated at compile time */
 extern const struct fdt_driver *const platform_override_modules[];
 
-static void fw_platform_lookup_special(const void *fdt, int root_offset)
-{
-	const struct fdt_driver *plat;
-	const struct fdt_match *match;
-	int pos, rc;
-
-	for (pos = 0; platform_override_modules[pos]; pos++) {
-		plat = platform_override_modules[pos];
-		if (!plat->match_table)
-			continue;
-
-		match = fdt_match_node(fdt, root_offset, plat->match_table);
-		if (!match)
-			continue;
-
-		if (plat->init) {
-			rc = plat->init(fdt, root_offset, match);
-			if (rc)
-				continue;
-		}
-
-		break;
-	}
-}
-
 static u32 fw_platform_calculate_heap_size(u32 hart_count)
 {
 	u32 heap_size;
@@ -177,7 +152,7 @@ unsigned long fw_platform_init(unsigned long arg0, unsigned long arg1,
 	if (root_offset < 0)
 		goto fail;
 
-	fw_platform_lookup_special(fdt, root_offset);
+	fdt_driver_init_by_offset(fdt, root_offset, platform_override_modules);
 
 	model = fdt_getprop(fdt, root_offset, "model", &len);
 	if (model)
-- 
2.47.2




More information about the opensbi mailing list