The firmware handoff specification provides for a devicetree pointer in a register. Provide access to that so we don't have to parse the bloblist to get it.
Signed-off-by: Simon Glass <s...@chromium.org> --- arch/arm/lib/xferlist.c | 6 ++++-- common/bloblist.c | 5 +++-- include/bloblist.h | 5 +++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/arm/lib/xferlist.c b/arch/arm/lib/xferlist.c index 6425936d354..16c28e34604 100644 --- a/arch/arm/lib/xferlist.c +++ b/arch/arm/lib/xferlist.c @@ -8,7 +8,7 @@ #include <bloblist.h> #include "xferlist.h" -int xferlist_from_boot_arg(ulong *addr) +int xferlist_from_boot_arg(ulong *addrp, ulong *fdtp) { int ret; @@ -17,7 +17,9 @@ int xferlist_from_boot_arg(ulong *addr) if (ret) return ret; - *addr = bloblist_get_base(); + *addrp = saved_args[3]; + if (fdtp) + *fdtp = saved_args[0]; return 0; } diff --git a/common/bloblist.c b/common/bloblist.c index 135fb149626..83d9de2749e 100644 --- a/common/bloblist.c +++ b/common/bloblist.c @@ -505,7 +505,8 @@ int bloblist_reloc(void *to, uint to_size) /* * Weak default function for getting bloblist from boot args. */ -int __weak xferlist_from_boot_arg(ulong __always_unused *addr) +int __weak xferlist_from_boot_arg(ulong __always_unused *addrp, + ulong __always_unused *fdtp) { return -ENOENT; } @@ -536,7 +537,7 @@ int bloblist_init(void) size = CONFIG_BLOBLIST_SIZE; if (from_boot_arg) { - ret = xferlist_from_boot_arg(&addr); + ret = xferlist_from_boot_arg(&addr, NULL); /* * If Firmware Handoff is mandatory but no transfer list is * observed, report it as an error. diff --git a/include/bloblist.h b/include/bloblist.h index f32faf78560..7ff70e9554c 100644 --- a/include/bloblist.h +++ b/include/bloblist.h @@ -509,9 +509,10 @@ int bloblist_check_reg_conv(ulong rfdt, ulong rzero, ulong rsig, ulong xlist); /** * xferlist_from_boot_arg() - Get bloblist from the boot args. * - * @addr: Address of the bloblist + * @addrp: Returns address of the bloblist + * @fdtp: If non-NULL, returns address of the FDT * Return: 0 if OK, else on error */ -int xferlist_from_boot_arg(ulong *addr); +int xferlist_from_boot_arg(ulong *addrp, ulong *fdtp); #endif /* __BLOBLIST_H */ -- 2.43.0