diff options
author | Yu-Ping Wu <yupingso@chromium.org> | 2022-05-20 17:36:46 +0800 |
---|---|---|
committer | Julius Werner <jwerner@chromium.org> | 2022-05-27 01:46:24 +0000 |
commit | 471eda5ae183b7c2add94529e9b8fc627a155392 (patch) | |
tree | 76c3fb492af6b86b3498867e0a4cdb088b1c73e8 | |
parent | a182faeb88a0b2313ac83371fdefd6ca0d30bb8d (diff) |
Makefile.inc: Add bootblock to CBFS before others
With CBFS verification, cbfstool (CB:41121) needs bootblock to be
present in coreboot.pre in order to locate the metadata hash stored in
it. Therefore we have to ensure that bootblock is added to CBFS before
other CBFS files are added.
To solve the problem, create the 'add_bootblock' function, and call it
in the coreboot.pre recipe. Because bootblock.bin is now a prerequisite
of coreboot.pre, it will get built even if CONFIG_BOOTBLOCK_IN_CBFS=n.
BUG=b:233263447
TEST=emerge-guybrush coreboot
TEST=emerge-corsola coreboot chromeos-bootimage
TEST=cbfstool image-kingler.bin print -v
TEST=Kingler booted successfully
BRANCH=none
Change-Id: I385deb8231e44310ee139c3f69f449e75b92b2be
Signed-off-by: Yu-Ping Wu <yupingso@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/64547
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r-- | Makefile.inc | 14 | ||||
-rw-r--r-- | src/arch/x86/Makefile.inc | 10 |
2 files changed, 10 insertions, 14 deletions
diff --git a/Makefile.inc b/Makefile.inc index 8da6cba004..da1458a1e5 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -1100,13 +1100,19 @@ ifeq ($(CONFIG_INTEL_ADD_TOP_SWAP_BOOTBLOCK),y) TS_OPTIONS := -j $(CONFIG_INTEL_TOP_SWAP_BOOTBLOCK_SIZE) endif +ifneq ($(CONFIG_ARCH_X86),y) +add_bootblock = $(CBFSTOOL) $(1) write -u -r BOOTBLOCK -f $(2) +endif + # coreboot.pre doesn't follow the standard Make conventions. It gets modified # by multiple rules, and thus we can't compute the dependencies correctly. $(shell rm -f $(obj)/coreboot.pre) ifneq ($(CONFIG_UPDATE_IMAGE),y) -$(obj)/coreboot.pre: $$(prebuilt-files) $(CBFSTOOL) $(obj)/fmap.fmap $(obj)/fmap.desc +$(obj)/coreboot.pre: $$(prebuilt-files) $(CBFSTOOL) $(obj)/fmap.fmap $(obj)/fmap.desc $(objcbfs)/bootblock.bin $(CBFSTOOL) $@.tmp create -M $(obj)/fmap.fmap -r $(shell cat $(obj)/fmap.desc) + printf " BOOTBLOCK\n" + $(call add_bootblock,$@.tmp,$(objcbfs)/bootblock.bin) $(prebuild-files) true mv $@.tmp $@ else # ifneq ($(CONFIG_UPDATE_IMAGE),y) @@ -1136,12 +1142,6 @@ add_intermediate = \ $(1): $(obj)/coreboot.pre $(2) | $(INTERMEDIATE) \ $(eval INTERMEDIATE+=$(1)) $(eval PHONY+=$(1)) -ifneq ($(CONFIG_ARCH_X86),y) -$(call add_intermediate, add_bootblock, $(objcbfs)/bootblock.bin) - printf " FMAP writing BOOTBLOCK region\n" - $(CBFSTOOL) $< write -u -r BOOTBLOCK -f $(objcbfs)/bootblock.bin -endif - $(obj)/coreboot.rom: $(obj)/coreboot.pre $(CBFSTOOL) $(IFITTOOL) $$(INTERMEDIATE) @printf " CBFS $(subst $(obj)/,,$(@))\n" # The full ROM may be larger than the CBFS part, so create an empty diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc index 02ee902e38..eaced1f220 100644 --- a/src/arch/x86/Makefile.inc +++ b/src/arch/x86/Makefile.inc @@ -102,15 +102,11 @@ else $(eval $(call early_x86_stage,bootblock,elf64-x86-64)) endif -ifneq ($(CONFIG_UPDATE_IMAGE),y) ifeq ($(CONFIG_BOOTBLOCK_IN_CBFS),y) -$(call add_intermediate, add_bootblock, $(objcbfs)/bootblock.bin) - @printf " CBFS $(subst $(obj)/,,$(@))\n" - $(CBFSTOOL) $< add -f $(objcbfs)/bootblock.bin -n bootblock -t bootblock $(TXTIBB) -b -$(call file-size,$(objcbfs)/bootblock.bin) \ +add_bootblock = \ + $(CBFSTOOL) $(1) add -f $(2) -n bootblock -t bootblock $(TXTIBB) \ + -b -$(call file-size,$(2)) \ $(cbfs-autogen-attributes) $(TS_OPTIONS) $(CBFSTOOL_ADD_CMD_OPTIONS) -else # Make sure the bootblock gets build, if only for buildtesting -$(call add_intermediate, gen_bootblock, $(objcbfs)/bootblock.bin) -endif endif $(call src-to-obj,bootblock,$(dir)/walkcbfs.S): $(obj)/fmap_config.h |