[PATCH v2] lib: utils/fdt: Allow zero length mtime when parsing ACLINT

Inochi Amaoto inochiama at outlook.com
Thu Oct 12 01:29:36 PDT 2023


Currently, the fdt_parse_aclint_node() does not allow the first reg to
be zero length. This may cause the parser to fail when the ACLINT does
not support mtime.

To be robust, delay the check of first reg in fdt_parse_aclint_node()
so the parser can handle ACLINT without mtime support.

Signed-off-by: Inochi Amaoto <inochiama at outlook.com>
---
 lib/utils/fdt/fdt_helper.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lib/utils/fdt/fdt_helper.c b/lib/utils/fdt/fdt_helper.c
index 9ae7f09..972e529 100644
--- a/lib/utils/fdt/fdt_helper.c
+++ b/lib/utils/fdt/fdt_helper.c
@@ -891,8 +891,10 @@ int fdt_parse_aclint_node(void *fdt, int nodeoffset, bool for_timer,
 
 	rc = fdt_get_node_addr_size(fdt, nodeoffset, 0,
 				    &reg_addr, &reg_size);
-	if (rc < 0 || !reg_size)
+	if (rc < 0)
 		return SBI_ENODEV;
+	if (!reg_size)
+		reg_addr = reg_size = 0;
 	*out_addr1 = reg_addr;
 	*out_size1 = reg_size;
 
@@ -900,6 +902,8 @@ int fdt_parse_aclint_node(void *fdt, int nodeoffset, bool for_timer,
 				    &reg_addr, &reg_size);
 	if (rc < 0 || !reg_size)
 		reg_addr = reg_size = 0;
+	if (!reg_size && *out_size1 == 0)
+		return SBI_ENODEV;
 	if (out_addr2)
 		*out_addr2 = reg_addr;
 	if (out_size2)
-- 
2.42.0




More information about the opensbi mailing list