summaryrefslogtreecommitdiffstats
path: root/src/soc/amd
diff options
context:
space:
mode:
authorKarthikeyan Ramasubramanian <kramasub@google.com>2022-12-15 14:57:05 -0700
committerMartin L Roth <gaumless@gmail.com>2022-12-24 19:10:17 +0000
commit716c8f0711a464ad329d572fdbf4b3041709fa94 (patch)
tree379172e54cd2bd99d662e1a149b3515b071999bb /src/soc/amd
parentecb4e315318e20fe6b708288f5663e40bf7860ce (diff)
downloadcoreboot-716c8f0711a464ad329d572fdbf4b3041709fa94.tar.gz
coreboot-716c8f0711a464ad329d572fdbf4b3041709fa94.tar.bz2
coreboot-716c8f0711a464ad329d572fdbf4b3041709fa94.zip
soc/amd/mendocino: Split the EFS from the AMDFW body
Contents of unsigned AMDFW in RW sections are verified twice in PSP verstage - first time by vboot verifying the firmware body, second time by CBFS verification while the file is loaded to update PSP about the boot region. This redundant verification adds to boot time. Minimize the redundancy by splitting the EFS header from the AMDFW body and keep them as 2 separate CBFS files. This helps to improve the boot time by another 25 ms. BUG=None TEST=Build Skyrim BIOS image and boot to OS. Observe boot time improvement of ~25ms. Before: 6:end of verified boot 363,676 (16) 11:start of bootblock 641,392 (277,716) After: 6:end of verified boot 361,655 (16) 11:start of bootblock 616,967 (255,312) Change-Id: Ib18a4f5c6781e5a7868e9395c0f1212da0823100 Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/70839 Reviewed-by: Raul Rangel <rrangel@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/amd')
-rw-r--r--src/soc/amd/mendocino/Kconfig4
-rw-r--r--src/soc/amd/mendocino/Makefile.inc21
2 files changed, 21 insertions, 4 deletions
diff --git a/src/soc/amd/mendocino/Kconfig b/src/soc/amd/mendocino/Kconfig
index 70f81c58e099..142165c39e6a 100644
--- a/src/soc/amd/mendocino/Kconfig
+++ b/src/soc/amd/mendocino/Kconfig
@@ -527,7 +527,7 @@ if VBOOT_SLOTS_RW_A && VBOOT_STARTS_BEFORE_BOOTBLOCK
config RWA_REGION_ONLY
string
- default "apu/amdfw_a"
+ default "apu/amdfw_a apu/amdfw_a_body"
help
Add a space-delimited list of filenames that should only be in the
RW-A section.
@@ -538,7 +538,7 @@ if VBOOT_SLOTS_RW_AB && VBOOT_STARTS_BEFORE_BOOTBLOCK
config RWB_REGION_ONLY
string
- default "apu/amdfw_b"
+ default "apu/amdfw_b apu/amdfw_b_body"
help
Add a space-delimited list of filenames that should only be in the
RW-B section.
diff --git a/src/soc/amd/mendocino/Makefile.inc b/src/soc/amd/mendocino/Makefile.inc
index ab709e6ce6fa..8ad6000ad82f 100644
--- a/src/soc/amd/mendocino/Makefile.inc
+++ b/src/soc/amd/mendocino/Makefile.inc
@@ -86,6 +86,9 @@ MENDOCINO_FW_A_POSITION=$(call int-add, \
MENDOCINO_FW_B_POSITION=$(call int-add, \
$(shell awk '$$2 == "FMAP_SECTION_FW_MAIN_B_START" {print $$3}' $(obj)/fmap_config.h) \
$(AMD_FW_AB_POSITION))
+
+MENDOCINO_FW_BODY_OFFSET := 0x100
+
#
# PSP Directory Table items
#
@@ -286,6 +289,7 @@ $(obj)/amdfw_a.rom: $(obj)/amdfw.rom
$(OPT_SIGNED_AMDFW_A_POSITION) \
$(OPT_SIGNED_AMDFW_A_FILE) \
--location $(shell printf "%#x" $(MENDOCINO_FW_A_POSITION)) \
+ --body-location $(shell printf "%#x" $$(($(MENDOCINO_FW_A_POSITION) + $(MENDOCINO_FW_BODY_OFFSET)))) \
--anywhere \
--output $@
@@ -300,22 +304,35 @@ $(obj)/amdfw_b.rom: $(obj)/amdfw.rom
$(OPT_SIGNED_AMDFW_B_POSITION) \
$(OPT_SIGNED_AMDFW_B_FILE) \
--location $(shell printf "%#x" $(MENDOCINO_FW_B_POSITION)) \
+ --body-location $(shell printf "%#x" $$(($(MENDOCINO_FW_B_POSITION) + $(MENDOCINO_FW_BODY_OFFSET)))) \
--anywhere \
--output $@
+$(obj)/amdfw_a.rom.efs: $(obj)/amdfw_a.rom
+$(obj)/amdfw_b.rom.efs: $(obj)/amdfw_b.rom
ifeq ($(CONFIG_VBOOT_SLOTS_RW_A)$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK),yy)
cbfs-files-y += apu/amdfw_a
-apu/amdfw_a-file := $(obj)/amdfw_a.rom
+apu/amdfw_a-file := $(obj)/amdfw_a.rom.efs
apu/amdfw_a-position := $(AMD_FW_AB_POSITION)
apu/amdfw_a-type := raw
+
+cbfs-files-y += apu/amdfw_a_body
+apu/amdfw_a_body-file := $(obj)/amdfw_a.rom
+apu/amdfw_a_body-position := $(call int-add, $(AMD_FW_AB_POSITION) $(MENDOCINO_FW_BODY_OFFSET))
+apu/amdfw_a_body-type := raw
endif
ifeq ($(CONFIG_VBOOT_SLOTS_RW_AB)$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK),yy)
cbfs-files-y += apu/amdfw_b
-apu/amdfw_b-file := $(obj)/amdfw_b.rom
+apu/amdfw_b-file := $(obj)/amdfw_b.rom.efs
apu/amdfw_b-position := $(AMD_FW_AB_POSITION)
apu/amdfw_b-type := raw
+
+cbfs-files-y += apu/amdfw_b_body
+apu/amdfw_b_body-file := $(obj)/amdfw_b.rom
+apu/amdfw_b_body-position := $(call int-add, $(AMD_FW_AB_POSITION) $(MENDOCINO_FW_BODY_OFFSET))
+apu/amdfw_b_body-type := raw
endif
ifeq ($(CONFIG_SEPARATE_SIGNED_PSPFW)$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK),yy)