10 Dec, 2019

1 commit

  • OpenSBI uses a relocation lottery to determine the hart to relocate
    OpenSBI to its link address. In the U-Boot SPL boot flow, the main hart
    schedules the secondary harts to enter OpenSBI before doing so itself.
    One of the secondary harts will therefore always be the winner of the
    relocation lottery. This is problematic if the link address ranges of
    OpenSBI and U-Boot SPL overlap. OpenSBI will be relocated and therefore
    overwrite U-Boot SPL while some harts may still run it, leading to code
    corruption.

    Avoid this problem by specifying the main hart as the preferred boot
    hart to perform the OpenSBI relocation. The main hart will be the last
    hart to enter OpenSBI, relocation can therefore occur safely.

    The boot hart field was added to version 2 of the OpenSBI FW_DYNAMIC
    info structure. The header file include/opensbi.h is synchronized with
    include/sbi/fw_dynamic.h from the OpenSBI project to update the info
    structure. The header file is recent as of commit
    7a13beb21326 ("firmware: Add preferred boot HART field in struct
    fw_dynamic_info").

    Reported-by: Rick Chen
    Suggested-by: Anup Patel
    Signed-off-by: Lukas Auer
    Reviewed-by: Rick Chen
    Tested-by: Rick Chen
    Reviewed-by: Anup Patel

    Lukas Auer
     

26 Aug, 2019

1 commit

  • RISC-V OpenSBI is an open-source implementation of the RISC-V Supervisor
    Binary Interface (SBI) specification. It is required by Linux and U-Boot
    running in supervisor mode. This patch adds support for booting via the
    OpenSBI FW_DYNAMIC firmware. It supports OpenSBI version 0.4 and higher.

    In this configuration, U-Boot SPL starts in machine mode. After loading
    OpenSBI and U-Boot proper, it will start OpenSBI. All necessary
    parameters are generated by U-Boot SPL and are passed to OpenSBI. U-Boot
    proper is started in supervisor mode by OpenSBI. Support for OpenSBI is
    enabled with CONFIG_SPL_OPENSBI. An additional configuration entry,
    CONFIG_SPL_OPENSBI_LOAD_ADDR, is used to specify the load address of the
    OpenSBI firmware binary. It is not used directly in U-Boot and instead
    is intended to make the value available to scripts such as FIT
    configuration generators.

    The header file include/opensbi.h is based on header files from the
    OpenSBI project. They are recent, as of commit bae54f764570 ("firmware:
    Add fw_dynamic firmware").

    Signed-off-by: Lukas Auer
    Reviewed-by: Bin Meng
    Tested-by: Bin Meng
    Reviewed-by: Anup Patel

    Lukas Auer