mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 01:44:34 +00:00
spl: Plumb in the Universal Payload handoff
Specify the FIT and include information about each loaded image, as required by the UPL handoff. Write the UPL handoff into the bloblist before jumping to the next phase. Control this using a runtime flag to avoid conflicting with other handoff mechanisms. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
dbe0424d4c
commit
ec2186acbc
4 changed files with 23 additions and 0 deletions
|
@ -36,6 +36,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
#include <bootm.h>
|
||||
#include <image.h>
|
||||
#include <bootstage.h>
|
||||
#include <upl.h>
|
||||
#include <u-boot/crc.h>
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -2294,6 +2295,8 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
|
|||
|
||||
bootstage_mark(bootstage_id + BOOTSTAGE_SUB_LOAD);
|
||||
|
||||
upl_add_image(fit, noffset, load, len);
|
||||
|
||||
*datap = load;
|
||||
*lenp = len;
|
||||
if (fit_unamep)
|
||||
|
|
|
@ -810,6 +810,14 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
|
|||
printf(SPL_TPL_PROMPT
|
||||
"SPL hand-off write failed (err=%d)\n", ret);
|
||||
}
|
||||
if (CONFIG_IS_ENABLED(UPL_OUT) && (gd->flags & GD_FLG_UPL)) {
|
||||
ret = spl_write_upl_handoff(&spl_image);
|
||||
if (ret) {
|
||||
printf(SPL_TPL_PROMPT
|
||||
"UPL hand-off write failed (err=%d)\n", ret);
|
||||
hang();
|
||||
}
|
||||
}
|
||||
if (CONFIG_IS_ENABLED(BLOBLIST)) {
|
||||
ret = bloblist_finish();
|
||||
if (ret)
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <memalign.h>
|
||||
#include <mapmem.h>
|
||||
#include <spl.h>
|
||||
#include <upl.h>
|
||||
#include <sysinfo.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
|
@ -336,6 +337,8 @@ static int load_simple_fit(struct spl_load_info *info, ulong fit_offset,
|
|||
image_info->entry_point = FDT_ERROR;
|
||||
}
|
||||
|
||||
upl_add_image(fit, node, load_addr, length);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -847,6 +850,8 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
|
|||
spl_image->entry_point = spl_image->load_addr;
|
||||
|
||||
spl_image->flags |= SPL_FIT_FOUND;
|
||||
upl_set_fit_info(map_to_sysmem(ctx.fit), ctx.conf_node,
|
||||
spl_image->entry_point);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -943,5 +948,8 @@ int spl_load_fit_image(struct spl_image_info *spl_image,
|
|||
}
|
||||
spl_image->flags |= SPL_FIT_FOUND;
|
||||
|
||||
upl_set_fit_info(map_to_sysmem(header), conf_noffset,
|
||||
spl_image->entry_point);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -716,6 +716,10 @@ enum gd_flags {
|
|||
* @GD_FLG_HUSH_MODERN_PARSER: Use hush 2021 parser.
|
||||
*/
|
||||
GD_FLG_HUSH_MODERN_PARSER = 0x2000000,
|
||||
/**
|
||||
* @GD_FLG_UPL: Read/write a Universal Payload (UPL) handoff
|
||||
*/
|
||||
GD_FLG_UPL = 0x4000000,
|
||||
};
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
|
Loading…
Add table
Reference in a new issue