[PATCH 43/67] upl: Add RAM to the memory region

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


Indicate the address and size of RAM in the UPL handoff.

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

 boot/upl_common.c | 22 +++++++++++++++++++++-
 include/upl.h     | 12 ++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/boot/upl_common.c b/boot/upl_common.c
index a5a1da9cb57..e60f22f47e0 100644
--- a/boot/upl_common.c
+++ b/boot/upl_common.c
@@ -136,6 +136,7 @@ int upl_add_graphics(struct upl_graphics *gra, ulong *basep, ulong *sizep)
 
 int upl_create(struct upl *upl)
 {
+	struct upl_mem mem;
 	ulong base, size;
 	int ret;
 
@@ -148,7 +149,14 @@ int upl_create(struct upl *upl)
 	if (IS_ENABLED(CONFIG_X86))
 		upl->addr_width =  cpu_phys_address_size();
 
-	/* no reserved memory */
+	memset(&mem, '\0', sizeof(mem));
+	alist_init_struct(&mem.region, struct memregion);
+
+	ret = upl_add_region(&mem.region, gd->ram_base, gd->ram_size);
+	if (ret)
+		return log_msg_ret("uar", ret);
+	if (!alist_add(&upl->mem, mem))
+		return log_msg_ret("arg", -ENOMEM);
 
 	ret = upl_add_serial(&upl->serial);
 	if (ret && ret != -ENOENT)
@@ -181,6 +189,18 @@ int upl_write_to_buf(struct upl *upl, ofnode root, struct abuf *buf)
 	return 0;
 }
 
+int upl_add_region(struct alist *lst, u64 base, ulong size)
+{
+	struct memregion region;
+
+	region.base = base;
+	region.size = size;
+	if (!alist_add(lst, region))
+		return log_msg_ret("uar", -ENOMEM);
+
+	return 0;
+}
+
 void upl_init(struct upl *upl)
 {
 	memset(upl, '\0', sizeof(struct upl));
diff --git a/include/upl.h b/include/upl.h
index aef23ad8e8e..5ddcd990de4 100644
--- a/include/upl.h
+++ b/include/upl.h
@@ -416,6 +416,18 @@ int upl_create(struct upl *upl);
  * Return: 0 if OK, -ve on error
  */
 int upl_write_to_buf(struct upl *upl, ofnode root, struct abuf *buf);
+
+/**
+ * upl_add_region() - Add a region to a memory-region list
+ *
+ * Adds a new entry to the end of a list
+ *
+ * @lst: List to add to (struct memregion)
+ * @base: Base address of new region
+ * @size: Size of new region
+ * Return: 0 if OK, -ve on error
+ */
+int upl_add_region(struct alist *lst, u64 base, ulong size);
 #endif
 
 /** upl_init() - Set up a UPL struct */
-- 
2.43.0



More information about the U-Boot mailing list