• Bin Meng's avatar
    x86: fsp: Move FspInitEntry call to board_init_f() · aefaff8e
    Bin Meng authored
    The call to FspInitEntry is done in arch/x86/lib/fsp/fsp_car.S so far.
    It worked pretty well but looks not that good. Apart from doing too
    much work than just enabling CAR, it cannot read the configuration
    data from device tree at that time. Now we want to move it a little
    bit later as part of init_sequence_f[] being called by board_init_f().
    This way it looks and works better in the U-Boot initialization path.
    
    Due to FSP's design, after calling FspInitEntry it will not return to
    its caller, instead it jumps to a continuation function which is given
    by bootloader with a new stack in system memory. The original stack in
    the CAR is gone, but its content is perserved by FSP and described by
    a bootloader temporary memory HOB. Technically we can recover anything
    we had before in the previous stack, but that is way too complicated.
    To make life much easier, in the FSP continuation routine we just
    simply call fsp_init_done() and jump back to car_init_ret() to redo
    the whole board_init_f() initialization, but this time with a non-zero
    HOB list pointer saved in U-Boot's global data so that we can bypass
    the FspInitEntry for the second time.
    Signed-off-by: default avatarBin Meng <bmeng.cn@gmail.com>
    Acked-by: default avatarSimon Glass <sjg@chromium.org>
    Tested-by: default avatarAndrew Bradford <andrew.bradford@kodakalaris.com>
    Tested-by: default avatarSimon Glass <sjg@chromium.org>
    aefaff8e
board_f.c 24.4 KB