arch/riscv: Pass cbmem_top to ramstage via calling argument
Tested on the Qemu-Virt target both 32 and 64 bit. Change-Id: I5c74cd5d3ee292931c5bbd2e4075f88381429f72 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/36558 Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
7f22933e98
commit
55069d15d8
|
@ -19,6 +19,9 @@ On entry to a stage or payload (including SELF payloads),
|
|||
* all harts are running.
|
||||
* A0 is the hart ID.
|
||||
* A1 is the pointer to the Flattened Device Tree (FDT).
|
||||
* A2 contains the additional program calling argument:
|
||||
- cbmem_top for ramstage
|
||||
- the address of the payload for opensbi
|
||||
|
||||
## Additional payload handoff requirements
|
||||
The location of cbmem should be placed in a node in the FDT.
|
||||
|
|
|
@ -90,6 +90,7 @@ config ARCH_ROMSTAGE_RISCV
|
|||
config ARCH_RAMSTAGE_RISCV
|
||||
bool
|
||||
default n
|
||||
select RAMSTAGE_CBMEM_TOP_ARG
|
||||
|
||||
config RISCV_USE_ARCH_TIMER
|
||||
bool
|
||||
|
|
|
@ -36,7 +36,7 @@ struct arch_prog_run_args {
|
|||
|
||||
static void do_arch_prog_run(struct arch_prog_run_args *args)
|
||||
{
|
||||
int hart_id;
|
||||
int hart_id = HLS()->hart_id;
|
||||
struct prog *prog = args->prog;
|
||||
void *fdt = HLS()->fdt;
|
||||
|
||||
|
@ -49,11 +49,8 @@ static void do_arch_prog_run(struct arch_prog_run_args *args)
|
|||
else
|
||||
run_payload(prog, fdt, RISCV_PAYLOAD_MODE_S);
|
||||
} else {
|
||||
void (*doit)(int hart_id, void *fdt) = prog_entry(prog);
|
||||
|
||||
hart_id = HLS()->hart_id;
|
||||
|
||||
doit(hart_id, fdt);
|
||||
void (*doit)(int hart_id, void *fdt, void *arg) = prog_entry(prog);
|
||||
doit(hart_id, fdt, prog_entry_arg(prog));
|
||||
}
|
||||
|
||||
die("Failed to run stage");
|
||||
|
|
|
@ -20,6 +20,13 @@
|
|||
.section ".text._start", "ax", %progbits
|
||||
.globl _start
|
||||
_start:
|
||||
/* cbmem_top is passed via a2 */
|
||||
la t0, _cbmem_top_ptr
|
||||
#if __riscv_xlen == 32
|
||||
sw a2, (t0)
|
||||
#elif __riscv_xlen == 64
|
||||
sd a2, (t0)
|
||||
#endif
|
||||
# initialize stack point for each hart
|
||||
# and the stack must be page-aligned.
|
||||
# 0xDEADBEEF used to check stack overflow
|
||||
|
|
Loading…
Reference in New Issue