From 2033afa68263834906e3eed8b3215dbd8b9bdb97 Mon Sep 17 00:00:00 2001 From: Shelley Chen Date: Fri, 25 Jun 2021 14:39:18 -0700 Subject: [PATCH] selfboot: Add support for selfload in romstage Since bootmem is not available in romstage, calls to bootmem APIs need to be compile-time eliminated in order to avoid linker error: undefined reference to `bootmem_region_targets_type BUG=None BRANCH=None TEST=./util/abuild/abuild -p none -t GOOGLE_HEROBRINE -x -a -B cherry-picked on top of CB:49392 and verified successful compilation. Change-Id: I8dfa2f2079a9a2859114c53c22bf7ef466ac2ad9 Signed-off-by: Shelley Chen Reviewed-on: https://review.coreboot.org/c/coreboot/+/55865 Reviewed-by: Julius Werner Tested-by: build bot (Jenkins) --- src/lib/selfboot.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c index 641631a03e..f1c0b97607 100644 --- a/src/lib/selfboot.c +++ b/src/lib/selfboot.c @@ -34,6 +34,14 @@ static void cbfs_decode_payload_segment(struct cbfs_payload_segment *segment, static int segment_targets_type(void *dest, unsigned long memsz, enum bootmem_type dest_type) { + /* No bootmem to check in earlier stages, caller should not use + selfload_check(). */ + if (!ENV_RAMSTAGE) { + printk(BIOS_ERR, + "Callers not supposed to call selfload_check() in romstage"); + return 0; + } + uintptr_t d = (uintptr_t) dest; if (bootmem_region_targets_type(d, memsz, dest_type)) return 1;