[PATCH 47/67] upl: Move decode_addr_size() higher and rename

Simon Glass sjg at chromium.org
Wed Jan 1 23:09:33 CET 2025


Move this function higher in the file so that it can later be used by
decode_upl_params()

Name the functions decode_reg() since it operates on an entire 'reg'
property.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 boot/upl_read.c | 96 ++++++++++++++++++++++++-------------------------
 1 file changed, 48 insertions(+), 48 deletions(-)

diff --git a/boot/upl_read.c b/boot/upl_read.c
index be3e1d116e1..bf5aa8f785c 100644
--- a/boot/upl_read.c
+++ b/boot/upl_read.c
@@ -172,6 +172,49 @@ static int read_uint(ofnode node, const char *prop, uint *valp)
 	return 0;
 }
 
+/**
+ * decode_reg() - Decide a set of addr/size pairs
+ *
+ * Each base/size value from the devicetree is written to the region list
+ *
+ * @upl: UPL state
+ * @buf: Bytes to decode
+ * @size: Number of bytes to decode
+ * @regions: List of regions to process (struct memregion)
+ * Returns: number of regions found, if OK, else -ve on error
+ */
+static int decode_reg(const struct upl *upl, const char *buf, int size,
+		      struct alist *regions)
+{
+	const char *ptr, *end = buf + size;
+	int i;
+
+	alist_init_struct(regions, struct memregion);
+	ptr = buf;
+	for (i = 0; ptr < end; i++) {
+		struct memregion reg;
+
+		if (upl->addr_cells == 1)
+			reg.base = fdt32_to_cpu(*(u32 *)ptr);
+		else
+			reg.base = fdt64_to_cpu(*(u64 *)ptr);
+		ptr += upl->addr_cells * sizeof(u32);
+
+		if (upl->size_cells == 1)
+			reg.size = fdt32_to_cpu(*(u32 *)ptr);
+		else
+			reg.size = fdt64_to_cpu(*(u64 *)ptr);
+		ptr += upl->size_cells * sizeof(u32);
+		if (ptr > end)
+			return -ENOSPC;
+
+		if (!alist_add(regions, reg))
+			return log_msg_ret("reg", -ENOMEM);
+	}
+
+	return i;
+}
+
 /**
  * decode_root_props() - Decode root properties from the tree
  *
@@ -269,49 +312,6 @@ static int decode_upl_images(struct upl *upl, ofnode options)
 	return 0;
 }
 
-/**
- * decode_addr_size() - Decide a set of addr/size pairs
- *
- * Each base/size value from the devicetree is written to the region list
- *
- * @upl: UPL state
- * @buf: Bytes to decode
- * @size: Number of bytes to decode
- * @regions: List of regions to process (struct memregion)
- * Returns: number of regions found, if OK, else -ve on error
- */
-static int decode_addr_size(const struct upl *upl, const char *buf, int size,
-			    struct alist *regions)
-{
-	const char *ptr, *end = buf + size;
-	int i;
-
-	alist_init_struct(regions, struct memregion);
-	ptr = buf;
-	for (i = 0; ptr < end; i++) {
-		struct memregion reg;
-
-		if (upl->addr_cells == 1)
-			reg.base = fdt32_to_cpu(*(u32 *)ptr);
-		else
-			reg.base = fdt64_to_cpu(*(u64 *)ptr);
-		ptr += upl->addr_cells * sizeof(u32);
-
-		if (upl->size_cells == 1)
-			reg.size = fdt32_to_cpu(*(u32 *)ptr);
-		else
-			reg.size = fdt64_to_cpu(*(u64 *)ptr);
-		ptr += upl->size_cells * sizeof(u32);
-		if (ptr > end)
-			return -ENOSPC;
-
-		if (!alist_add(regions, reg))
-			return log_msg_ret("reg", -ENOMEM);
-	}
-
-	return i;
-}
-
 /**
  * node_matches_at() - Check if a node name matches "base at ..."
  *
@@ -345,7 +345,7 @@ static int decode_upl_memory_node(struct upl *upl, ofnode node)
 			    ofnode_get_name(node), UPLP_REG);
 		return log_msg_ret("reg", -EINVAL);
 	}
-	len = decode_addr_size(upl, buf, size, &mem.region);
+	len = decode_reg(upl, buf, size, &mem.region);
 	if (len < 0)
 		return log_msg_ret("buf", len);
 	mem.hotpluggable = ofnode_read_bool(node, UPLP_HOTPLUGGABLE);
@@ -381,7 +381,7 @@ static int decode_upl_memmap(struct upl *upl, ofnode root)
 			continue;
 		}
 
-		len = decode_addr_size(upl, buf, size, &memmap.region);
+		len = decode_reg(upl, buf, size, &memmap.region);
 		if (len < 0)
 			return log_msg_ret("buf", len);
 		ret = ofnode_read_bitmask(node, UPLP_USAGE, usage_names,
@@ -422,7 +422,7 @@ static int decode_upl_memres(struct upl *upl, ofnode root)
 			continue;
 		}
 
-		len = decode_addr_size(upl, buf, size, &memres.region);
+		len = decode_reg(upl, buf, size, &memres.region);
 		if (len < 0)
 			return log_msg_ret("buf", len);
 		memres.no_map = ofnode_read_bool(node, UPLP_NO_MAP);
@@ -467,7 +467,7 @@ static int decode_upl_serial(struct upl *upl, ofnode node)
 		return log_msg_ret("reg", -EINVAL);
 	}
 
-	len = decode_addr_size(upl, buf, sizeof(buf), &ser->reg);
+	len = decode_reg(upl, buf, sizeof(buf), &ser->reg);
 	if (len < 0)
 		return log_msg_ret("buf", len);
 
@@ -520,7 +520,7 @@ static int decode_upl_graphics(struct upl *upl, ofnode node)
 		return log_msg_ret("reg", -EINVAL);
 	}
 
-	len = decode_addr_size(upl, buf, size, &gra->reg);
+	len = decode_reg(upl, buf, size, &gra->reg);
 	if (len < 0)
 		return log_msg_ret("buf", len);
 
-- 
2.43.0



More information about the U-Boot mailing list