Skip to content
  • Sean Anderson's avatar
    spl: Add generic spl_load function · 77507416
    Sean Anderson authored and Tom Rini's avatar Tom Rini committed
    
    
    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: default avatarSean Anderson <seanga2@gmail.com>
    Reviewed-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
    77507416