]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: Change how selection of ROMs works
authorSimon Glass <sjg@chromium.org>
Sun, 19 Jul 2020 19:55:52 +0000 (13:55 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 29 Jul 2020 01:30:39 +0000 (19:30 -0600)
Most x86 boards build a u-boot.rom which is programmed into SPI flash. But
this is not unique to x86. For example some rockchip boards can also boot
from SPI flash.

Also, at least on x86, binary blobs are sadly quite common. It is not
possible to build a functional image without them, and U-Boot needs to
know this at build time.

Introduce a new CONFIG_HAS_ROM option which selects whether u-boot.rom is
built and a new CONFIG_ROM_NEEDS_BLOBS option to indicate whether binary
blobs are also needed. If they are not needed, it is safe to build the ROM
always. Otherwise we still require the BUILD_ROM environment variable.

For now this affects only x86, but future patches will enable this for
rockchip too.

Signed-off-by: Simon Glass <sjg@chromium.org>
Kconfig
Makefile
arch/Kconfig
arch/x86/Kconfig
arch/x86/cpu/quark/Kconfig

diff --git a/Kconfig b/Kconfig
index e6308f30e5bddba4e593f6d832dbdd058e8ca951..b390c481fcf3c8aa8fcffaea1d8718b2f70b6288 100644 (file)
--- a/Kconfig
+++ b/Kconfig
@@ -276,9 +276,25 @@ config PHYS_64BIT
          This can be used not only for 64bit SoCs, but also for
          large physical address extension on 32bit SoCs.
 
+config HAS_ROM
+       bool
+       select BINMAN
+       help
+         Enables building of a u-boot.rom target. This collects U-Boot and
+         any necessary binary blobs.
+
+config ROM_NEEDS_BLOBS
+       bool
+       depends on HAS_ROM
+       help
+         Enable this if building the u-boot.rom target needs binary blobs, and
+         so cannot be done normally. In this case, pass BUILD_ROM=1 to make
+         to tell U-Boot to build the ROM.
+
 config BUILD_ROM
        bool "Build U-Boot as BIOS replacement"
-       depends on X86
+       depends on HAS_ROM
+       default y if !ROM_NEEDS_BLOBS
        help
          This option allows to build a ROM version of U-Boot.
          The build process generally requires several binary blobs
index d8b0c9319dc136256f9254edb960c2121d617960..6309bdae8063909be45c22b52fe4e38b728d0f5a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -921,9 +921,12 @@ ALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
 ALL-$(CONFIG_EFI_APP) += u-boot-app.efi
 ALL-$(CONFIG_EFI_STUB) += u-boot-payload.efi
 
+ifneq ($(CONFIG_HAS_ROM),)
 ifneq ($(BUILD_ROM)$(CONFIG_BUILD_ROM),)
-ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
+ALL-y += u-boot.rom
 endif
+endif
+
 ifeq ($(CONFIG_SYS_COREBOOT)$(CONFIG_SPL),yy)
 ALL-$(CONFIG_BINMAN) += u-boot-x86-with-spl.bin
 endif
@@ -1585,7 +1588,7 @@ endif
 # reset vector) at the top, Intel ME descriptor at the bottom, and U-Boot in
 # the middle. This is handled by binman based on an image description in the
 # board's device tree.
-ifneq ($(CONFIG_X86_RESET_VECTOR),)
+ifneq ($(CONFIG_HAS_ROM),)
 rom: u-boot.rom FORCE
 
 refcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
@@ -1595,11 +1598,12 @@ quiet_cmd_ldr = LD      $@
 cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
               $(filter-out FORCE,$^) -o $@
 
-u-boot.rom: u-boot-x86-start16.bin u-boot-x86-reset16.bin u-boot.bin \
+rom-deps := u-boot.bin
+ifdef CONFIG_X86
+rom-deps += u-boot-x86-start16.bin u-boot-x86-reset16.bin \
                $(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
                $(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin) \
-               $(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
-       $(call if_changed,binman)
+               $(if $(CONFIG_HAVE_REFCODE),refcode.bin)
 
 OBJCOPYFLAGS_u-boot-x86-start16.bin := -O binary -j .start16
 u-boot-x86-start16.bin: u-boot FORCE
@@ -1610,6 +1614,10 @@ u-boot-x86-reset16.bin: u-boot FORCE
        $(call if_changed,objcopy)
 endif
 
+u-boot.rom: $(rom-deps) FORCE
+       $(call if_changed,binman)
+endif
+
 ifneq ($(CONFIG_ARCH_SUNXI),)
 ifeq ($(CONFIG_ARM64),)
 u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE
index 9be02d1319f28505ec6c831a5ddf0c5a2e527f62..7f3cbe2ec88a974c5d8c2a9aac750742106af78e 100644 (file)
@@ -160,6 +160,7 @@ config X86
        select TIMER
        select USE_PRIVATE_LIBGCC
        select X86_TSC_TIMER
+       imply HAS_ROM if X86_RESET_VECTOR
        imply BLK
        imply CMD_DM
        imply CMD_FPGA_LOADMK
index ff4f06ed79cc47400c6afecdba06bf482d4a227b..01ffaea132c1955bc7095171ebe5b93563653763 100644 (file)
@@ -360,6 +360,8 @@ config HAVE_FSP
        bool "Add an Firmware Support Package binary"
        depends on !EFI
        select USE_HOB
+       select HAS_ROM
+       select ROM_NEEDS_BLOBS
        help
          Select this option to add an Firmware Support Package binary to
          the resulting U-Boot image. It is a binary blob which U-Boot uses
@@ -519,6 +521,8 @@ config ENABLE_MRC_CACHE
 
 config HAVE_MRC
        bool "Add a System Agent binary"
+       select HAS_ROM
+       select ROM_NEEDS_BLOBS
        depends on !HAVE_FSP
        help
          Select this option to add a System Agent binary to
index 430cce184d42129779150f4d6d2c3da284ab60fe..2fee38aed79c23895d47de83779a1cebc3afbcb0 100644 (file)
@@ -24,6 +24,7 @@ if INTEL_QUARK
 
 config HAVE_RMU
        bool "Add a Remote Management Unit (RMU) binary"
+       select ROM_NEEDS_BLOBS
        help
          Select this option to add a Remote Management Unit (RMU) binary
          to the resulting U-Boot image. It is a data block (up to 64K) of