coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
boot.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <cbmem.h>
4 #include <arch/lib_helpers.h>
5 #include <arch/stages.h>
6 #include <arch/transition.h>
7 #include <bl31.h>
8 #include <program_loading.h>
9 
10 static void run_payload(struct prog *prog)
11 {
12  void (*doit)(void *);
13  void *arg;
14 
15  doit = prog_entry(prog);
17  u64 payload_spsr = get_eret_el(EL2, SPSR_USE_L);
18 
19  if (CONFIG(ARM64_USE_ARM_TRUSTED_FIRMWARE))
20  run_bl31((u64)doit, (u64)arg, payload_spsr);
21  else
22  transition_to_el2(doit, arg, payload_spsr);
23 }
24 
25 void arch_prog_run(struct prog *prog)
26 {
27  void (*doit)(void *);
28 
31  return;
32  }
33 
34  doit = prog_entry(prog);
35 
36  doit(prog_entry_arg(prog));
37 }
38 
39 /* Generic stage entry point. Can be overridden by board/SoC if needed. */
40 __weak void stage_entry(uintptr_t stage_arg)
41 {
43  _cbmem_top_ptr = stage_arg;
44 
45  main();
46 }
void main(void)
Definition: romstage.c:13
__weak void stage_entry(uintptr_t stage_arg)
generic stage entry point.
Definition: boot.c:40
static void run_payload(struct prog *prog)
Definition: boot.c:10
void arch_prog_run(struct prog *prog)
Definition: boot.c:9
void run_bl31(u64 payload_entry, u64 payload_arg0, u64 payload_spsr)
Definition: bl31.c:74
uintptr_t _cbmem_top_ptr
Definition: imd_cbmem.c:14
@ CONFIG
Definition: dsi_common.h:201
struct bootblock_arg arg
Definition: decompressor.c:22
#define SPSR_USE_L
Definition: lib_helpers.h:18
#define EL2
Definition: lib_helpers.h:12
static void * prog_entry(const struct prog *prog)
static void * prog_entry_arg(const struct prog *prog)
prog_type
@ PROG_PAYLOAD
#define ENV_RAMSTAGE
Definition: rules.h:150
#define ENV_ROMSTAGE_OR_BEFORE
Definition: rules.h:263
const struct smm_save_state_ops *legacy_ops __weak
Definition: save_state.c:8
uint64_t u64
Definition: stdint.h:54
unsigned long uintptr_t
Definition: stdint.h:21
static uint8_t get_eret_el(uint8_t el, uint8_t l_or_h)
Definition: transition.h:125
void transition_to_el2(void *entry, void *arg, uint64_t spsr)
Definition: transition.c:33
typedef void(X86APIP X86EMU_intrFuncs)(int num)