arch/riscv: Add OPENSBI_FW_DYNAMIC_BOOT_HART option

This adds another option to tell OpenSBI which hart to use for booting.

Test: Start hifive-unmatched board and see that Hart 1 (instead of 0) is
used for running OpenSBI.

Signed-off-by: Maximilian Brune <maximilian.brune@9elements.com>
Change-Id: Id58bd6ae3b55a5ef3f1a5c97dfa07c79aa4c78d0
Reviewed-on: https://review.coreboot.org/c/coreboot/+/79948
Reviewed-by: Philipp Hug <philipp@hug.cx>
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
Maximilian Brune 2024-01-14 09:20:17 +06:00 committed by Felix Held
parent f6a7809de8
commit a122041be1
2 changed files with 12 additions and 0 deletions

View File

@ -66,6 +66,16 @@ config OPENSBI_TEXT_START
help
The linking address used to build opensbi.
config OPENSBI_FW_DYNAMIC_BOOT_HART
int
default RISCV_WORKING_HARTID
help
This specifies the hart that OpenSBI will use to boot the payload. If set to
value -1, OpenSBI will use a 'lottery' scheme to figure it out itself.
This hart must be able to execute in the Supervisor priviledged mode, since
that is the mode usually used for the payload. If the hart does not support
Supervisor mode OpenSBI will again look for a hart that does support it.
config ARCH_RISCV_U
# U (user) mode is for programs.
bool

View File

@ -20,6 +20,8 @@ void run_opensbi(const int hart_id,
.version = FW_DYNAMIC_INFO_VERSION_MAX,
.next_mode = payload_mode,
.next_addr = (uintptr_t)payload,
.options = 0,
.boot_hart = CONFIG_OPENSBI_FW_DYNAMIC_BOOT_HART,
};
csr_write(mepc, opensbi);