diff --git a/Makefile.inc b/Makefile.inc index 25a0807880..d82de694d4 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -410,7 +410,7 @@ prebuild-files = \ prebuilt-files = $(foreach file,$(cbfs-files), $(call extract_nth,1,$(file))) $(obj)/coreboot.pre1: $(objcbfs)/bootblock.bin $$(prebuilt-files) $(CBFSTOOL) $$(cpu_ucode_cbfs_file) - $(CBFSTOOL) $@.tmp create -s $(CONFIG_COREBOOT_ROMSIZE_KB)K \ + $(CBFSTOOL) $@.tmp create \ -B $(objcbfs)/bootblock.bin -a 64 \ $(CBFSTOOL_PRE1_OPTS) $(prebuild-files) true @@ -440,7 +440,10 @@ endif $(obj)/coreboot.rom: $(obj)/coreboot.pre $(objcbfs)/ramstage.elf $(CBFSTOOL) $(call strip_quotes,$(COREBOOT_ROM_DEPENDENCIES)) $$(INTERMEDIATE) $$(VBOOT_STUB) $(REFCODE_BLOB) @printf " CBFS $(subst $(obj)/,,$(@))\n" - cp $(obj)/coreboot.pre $@.tmp +# The full ROM may be larger than the CBFS part, so create an empty +# file (filled with \377 = 0xff) and copy the CBFS image over it. + tr '\000' '\377' < /dev/zero 2> /dev/null | dd of=$@.tmp bs=8192 iflag=fullblock count=$$(($(CONFIG_ROM_SIZE) / 8192)) 2> /dev/null + dd if=$(obj)/coreboot.pre of=$@.tmp bs=8192 conv=notrunc 2> /dev/null $(CBFSTOOL) $@.tmp add-stage -f $(objcbfs)/ramstage.elf -n $(CONFIG_CBFS_PREFIX)/ramstage -c $(CBFS_COMPRESS_FLAG) ifeq ($(CONFIG_PAYLOAD_NONE),y) @printf " PAYLOAD none (as specified by user)\n" diff --git a/src/Kconfig b/src/Kconfig index 8d3d831df9..da5196dc40 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -422,8 +422,14 @@ config IOAPIC default n config CBFS_SIZE - hex + hex "Size of CBFS filesystem in ROM" default ROM_SIZE + help + This is the part of the ROM actually managed by CBFS, located at the + end of the ROM (passed through cbfstool -o) on x86 and at at the start + of the ROM (passed through cbfstool -s) everywhere else. Defaults to + span the whole ROM but can be overwritten to make coreboot live + alongside other components (like ChromeOS's vboot/FMAP). config CACHE_ROM_SIZE hex diff --git a/src/arch/arm/Makefile.inc b/src/arch/arm/Makefile.inc index 58c9c953fc..a7d85fe8f6 100644 --- a/src/arch/arm/Makefile.inc +++ b/src/arch/arm/Makefile.inc @@ -33,7 +33,9 @@ subdirs-y += armv4/ armv7/ ############################################################################### ifeq ($(CONFIG_ARCH_ROMSTAGE_ARM),y) -CBFSTOOL_PRE1_OPTS = -m arm -b $(CONFIG_BOOTBLOCK_ROM_OFFSET) -H $(CONFIG_CBFS_HEADER_ROM_OFFSET) -o $(CONFIG_CBFS_ROM_OFFSET) +CBFSTOOL_PRE1_OPTS = -m arm -b $(CONFIG_BOOTBLOCK_ROM_OFFSET) \ + -H $(CONFIG_CBFS_HEADER_ROM_OFFSET) \ + -o $(CONFIG_CBFS_ROM_OFFSET) -s $(CONFIG_CBFS_SIZE) endif ############################################################################### diff --git a/src/arch/arm64/Makefile.inc b/src/arch/arm64/Makefile.inc index bf1ba27b59..e1e8ee71c2 100644 --- a/src/arch/arm64/Makefile.inc +++ b/src/arch/arm64/Makefile.inc @@ -34,7 +34,9 @@ subdirs-y += armv8/ ################################################################################ ifeq ($(CONFIG_ARCH_ROMSTAGE_ARM64),y) -CBFSTOOL_PRE1_OPTS = -m arm64 -b $(CONFIG_BOOTBLOCK_ROM_OFFSET) -H $(CONFIG_CBFS_HEADER_ROM_OFFSET) -o $(CONFIG_CBFS_ROM_OFFSET) +CBFSTOOL_PRE1_OPTS = -m arm64 -b $(CONFIG_BOOTBLOCK_ROM_OFFSET) \ + -H $(CONFIG_CBFS_HEADER_ROM_OFFSET) \ + -o $(CONFIG_CBFS_ROM_OFFSET) -s $(CONFIG_CBFS_SIZE) endif ################################################################################ diff --git a/src/arch/mips/Makefile.inc b/src/arch/mips/Makefile.inc index 5446803368..39bb05e17a 100644 --- a/src/arch/mips/Makefile.inc +++ b/src/arch/mips/Makefile.inc @@ -24,8 +24,9 @@ ############################################################################### ifeq ($(CONFIG_ARCH_ROMSTAGE_MIPS),y) -CBFSTOOL_PRE1_OPTS = -m mips -b $(CONFIG_BOOTBLOCK_ROM_OFFSET) -H $(CONFIG_CBFS_HEADER_ROM_OFFSET) -o $(CONFIG_CBFS_ROM_OFFSET) -CBFSTOOL_PRE_OPTS = -b 0 +CBFSTOOL_PRE1_OPTS = -m mips -b $(CONFIG_BOOTBLOCK_ROM_OFFSET) \ + -H $(CONFIG_CBFS_HEADER_ROM_OFFSET) \ + -o $(CONFIG_CBFS_ROM_OFFSET) -s $(CONFIG_CBFS_SIZE) endif ############################################################################### diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc index 28f81052cb..0c7d71d38b 100644 --- a/src/arch/x86/Makefile.inc +++ b/src/arch/x86/Makefile.inc @@ -58,7 +58,8 @@ endif # CONFIG_HAVE_OPTION_TABLE ################################################################################ ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y) -CBFSTOOL_PRE1_OPTS = -m x86 -o $$(( $(CONFIG_ROM_SIZE) - $(CONFIG_CBFS_SIZE) )) +CBFSTOOL_PRE1_OPTS = -m x86 -s $(CONFIG_ROM_SIZE) \ + -o $$(( $(CONFIG_ROM_SIZE) - $(CONFIG_CBFS_SIZE) )) # Make sure that segment for .car.data is ignored while adding romstage. CBFSTOOL_PRE_OPTS = -b $(shell cat $(objcbfs)/base_xip.txt) -S ".car.data" endif diff --git a/src/mainboard/google/cosmos/Kconfig b/src/mainboard/google/cosmos/Kconfig index 56ab368f69..895fd0573e 100644 --- a/src/mainboard/google/cosmos/Kconfig +++ b/src/mainboard/google/cosmos/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_COSMOS config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_2048 select CHROMEOS select CHROMEOS_VBNV_FLASH select COMMON_CBFS_SPI_WRAPPER diff --git a/src/mainboard/google/nyan/Kconfig b/src/mainboard/google/nyan/Kconfig index 19eb6a1c1e..8a39bb7b80 100644 --- a/src/mainboard/google/nyan/Kconfig +++ b/src/mainboard/google/nyan/Kconfig @@ -21,6 +21,7 @@ if BOARD_GOOGLE_NYAN config BOARD_SPECIFIC_OPTIONS # dummy def_bool y + select BOARD_ROMSIZE_KB_4096 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/mainboard/google/nyan_big/Kconfig b/src/mainboard/google/nyan_big/Kconfig index b01dd84208..9105076095 100644 --- a/src/mainboard/google/nyan_big/Kconfig +++ b/src/mainboard/google/nyan_big/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_NYAN_BIG config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_4096 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/mainboard/google/nyan_blaze/Kconfig b/src/mainboard/google/nyan_blaze/Kconfig index e85a633fde..5b744977b7 100644 --- a/src/mainboard/google/nyan_blaze/Kconfig +++ b/src/mainboard/google/nyan_blaze/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_NYAN_BLAZE config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_4096 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/mainboard/google/rush/Kconfig b/src/mainboard/google/rush/Kconfig index f27b65846f..486c7cfadb 100644 --- a/src/mainboard/google/rush/Kconfig +++ b/src/mainboard/google/rush/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_RUSH config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_4096 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/mainboard/google/rush_ryu/Kconfig b/src/mainboard/google/rush_ryu/Kconfig index 3623f2ed21..b9b6011901 100644 --- a/src/mainboard/google/rush_ryu/Kconfig +++ b/src/mainboard/google/rush_ryu/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_RUSH_RYU config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_8192 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/mainboard/google/storm/Kconfig b/src/mainboard/google/storm/Kconfig index 7d75d7a6d5..d2626c50d2 100644 --- a/src/mainboard/google/storm/Kconfig +++ b/src/mainboard/google/storm/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_STORM config BOARD_SPECIFIC_OPTIONS def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_8192 select CHROMEOS select COMMON_CBFS_SPI_WRAPPER select MAINBOARD_HAS_BOOTBLOCK_INIT diff --git a/src/mainboard/google/veyron_jerry/Kconfig b/src/mainboard/google/veyron_jerry/Kconfig index 4d250d3424..8a48a45a86 100644 --- a/src/mainboard/google/veyron_jerry/Kconfig +++ b/src/mainboard/google/veyron_jerry/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_VEYRON_JERRY config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_4096 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/mainboard/google/veyron_mighty/Kconfig b/src/mainboard/google/veyron_mighty/Kconfig index ee61ddbefc..041fab349d 100644 --- a/src/mainboard/google/veyron_mighty/Kconfig +++ b/src/mainboard/google/veyron_mighty/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_VEYRON_MIGHTY config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_4096 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/mainboard/google/veyron_pinky/Kconfig b/src/mainboard/google/veyron_pinky/Kconfig index aac4b3cca8..7c93cbf643 100644 --- a/src/mainboard/google/veyron_pinky/Kconfig +++ b/src/mainboard/google/veyron_pinky/Kconfig @@ -22,6 +22,7 @@ if BOARD_GOOGLE_VEYRON_PINKY config BOARD_SPECIFIC_OPTIONS # dummy def_bool y select BOARD_ID_SUPPORT + select BOARD_ROMSIZE_KB_4096 select CHROMEOS select CHROMEOS_VBNV_EC select EC_GOOGLE_CHROMEEC diff --git a/src/soc/qualcomm/Kconfig b/src/soc/qualcomm/Kconfig index 918093b7d8..b7a12d4f9c 100644 --- a/src/soc/qualcomm/Kconfig +++ b/src/soc/qualcomm/Kconfig @@ -1,9 +1 @@ source src/soc/qualcomm/ipq806x/Kconfig - -config CBFS_SIZE - hex "Size of CBFS filesystem in ROM" - default ROM_SIZE - help - CBFS size needs to match the size of memory allocated to the - coreboot blob elsewhere in the system. Make sure this config option - is fine tuned in the board config file. diff --git a/src/vendorcode/google/chromeos/Kconfig b/src/vendorcode/google/chromeos/Kconfig index d0fae0a83c..2cf7ec2c69 100644 --- a/src/vendorcode/google/chromeos/Kconfig +++ b/src/vendorcode/google/chromeos/Kconfig @@ -87,6 +87,7 @@ config FLASHMAP_OFFSET hex "Flash Map Offset" default 0x00670000 if NORTHBRIDGE_INTEL_SANDYBRIDGE default 0x00610000 if NORTHBRIDGE_INTEL_IVYBRIDGE + default CBFS_SIZE if !ARCH_X86 default 0 help Offset of flash map in firmware image @@ -161,4 +162,4 @@ config PHYSICAL_REC_SWITCH Whether this platform has a physical recovery switch source src/vendorcode/google/chromeos/vboot1/Kconfig -source src/vendorcode/google/chromeos/vboot2/Kconfig \ No newline at end of file +source src/vendorcode/google/chromeos/vboot2/Kconfig