mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-03-14 22:07:02 +00:00
Implementers of SPL_LOAD_IMAGE_METHOD have to correctly determine what type of image is being loaded and then call the appropriate image load function correctly. This is tricky, because some image load functions expect the whole image to already be loaded (CONFIG_SPL_LOAD_FIT_FULL), some will load the image automatically using spl_load_info.read() (CONFIG_SPL_LOAD_FIT/CONFIG_SPL_LOAD_IMX_CONTAINER), and some just parse the header and expect the caller to do the actual loading afterwards (legacy/raw images). Load methods often only support a subset of the above methods, meaning that not all image types can be used with all load methods. Further, the code to invoke these functions is duplicated between different load functions. To address this problem, this commit introduces a "spl_load" function. It aims to handle image detection and correct invocation of each of the parse/load functions. Although this function generally results in a size reduction with several users, it tends to bloat boards with only a single user. This is generally because programmers open-coding the contents of this function can make optimizations based on the specific loader. For example, NOR flash is memory-mapped, so it never bothers calling load->read. The compiler can't really make these optimizations across translation units. LTO solves this, but it is only available on some arches. To address this, perform "pseudo-LTO" by inlining spl_load when there are one or fewer users. At the moment, there are no users, so define SPL_LOAD_USERS to be 0. Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> |
||
---|---|---|
.. | ||
Kconfig | ||
Kconfig.nxp | ||
Kconfig.tpl | ||
Kconfig.vpl | ||
Makefile | ||
spl.c | ||
spl_atf.c | ||
spl_blk_fs.c | ||
spl_bootrom.c | ||
spl_dfu.c | ||
spl_ext.c | ||
spl_fat.c | ||
spl_fit.c | ||
spl_imx_container.c | ||
spl_legacy.c | ||
spl_mmc.c | ||
spl_nand.c | ||
spl_net.c | ||
spl_nor.c | ||
spl_nvme.c | ||
spl_onenand.c | ||
spl_opensbi.c | ||
spl_optee.S | ||
spl_ram.c | ||
spl_sata.c | ||
spl_sdp.c | ||
spl_semihosting.c | ||
spl_spi.c | ||
spl_ubi.c | ||
spl_usb.c | ||
spl_xip.c | ||
spl_ymodem.c |