[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