riscv: Simplify payload handling
1. Simplify payload code and convert it to C 2. Save the FDT pointer to HLS (hart-local storage). 3. Don't use mscratch to pass FDT pointer as it is used for exception handling. Change-Id: I32bf2a99e07a65358a7f19b899259f0816eb45e8 Signed-off-by: Xiang Wang <wxjstz@126.com> Signed-off-by: Philipp Hug <philipp@hug.cx> Reviewed-on: https://review.coreboot.org/c/31179 Reviewed-by: ron minnich <rminnich@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
c47d43a8af
commit
820dcfceb3
10 changed files with 94 additions and 59 deletions
|
|
@ -16,6 +16,12 @@
|
|||
#ifndef ARCH_RISCV_INCLUDE_ARCH_BOOT_H
|
||||
#define ARCH_RISCV_INCLUDE_ARCH_BOOT_H
|
||||
|
||||
extern const void *rom_fdt;
|
||||
#include <program_loading.h>
|
||||
|
||||
#define RISCV_PAYLOAD_MODE_U 0
|
||||
#define RISCV_PAYLOAD_MODE_S 1
|
||||
#define RISCV_PAYLOAD_MODE_M 3
|
||||
|
||||
void run_payload(struct prog *prog, void *fdt, int payload_mode);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include <main_decl.h>
|
||||
|
||||
void stage_entry(void) __attribute__((section(".text.stage_entry")));
|
||||
void stage_entry(int hart_id, void *fdt)
|
||||
__attribute__((section(".text.stage_entry")));
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -52,9 +52,14 @@ typedef struct {
|
|||
int ipi_pending;
|
||||
uint64_t *timecmp;
|
||||
uint64_t *time;
|
||||
void *fdt;
|
||||
struct blocker entry;
|
||||
} hls_t;
|
||||
|
||||
_Static_assert(
|
||||
sizeof(hls_t) == HLS_SIZE,
|
||||
"HLS_SIZE must equal to sizeof(hls_t)");
|
||||
|
||||
#define MACHINE_STACK_TOP() ({ \
|
||||
/* coverity[uninit_use] : FALSE */ \
|
||||
register uintptr_t sp asm ("sp"); \
|
||||
|
|
@ -66,7 +71,8 @@ typedef struct {
|
|||
|
||||
#define MACHINE_STACK_SIZE RISCV_PGSIZE
|
||||
|
||||
void hls_init(uint32_t hart_id); // need to call this before launching linux
|
||||
// need to call this before launching linux
|
||||
void hls_init(uint32_t hart_id, void *fdt);
|
||||
|
||||
/* This function is used to initialize HLS()->time/HLS()->timecmp */
|
||||
void mtime_init(void);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue