[PATCH v2 22/49] x86: rockchip: Change how selection of ROMs works
Bin Meng
bmeng.cn at gmail.com
Mon Jun 29 09:30:37 CEST 2020
Hi Simon,
On Sun, Jun 14, 2020 at 10:57 AM Simon Glass <sjg at chromium.org> wrote:
>
> 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.
The commit tag has rockchip, but this patch only affects x86 for now.
Remove this tag?
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
> Kconfig | 18 +++++++++++++++++-
> Makefile | 18 +++++++++++++-----
> arch/Kconfig | 1 +
> arch/x86/Kconfig | 4 ++++
> arch/x86/cpu/baytrail/Kconfig | 1 +
> arch/x86/cpu/quark/Kconfig | 1 +
> 6 files changed, 37 insertions(+), 6 deletions(-)
>
> diff --git a/Kconfig b/Kconfig
> index 0e7ccc0b07..876c5db911 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -240,9 +240,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
> diff --git a/Makefile b/Makefile
> index 149f839948..8a2bb94f2c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -916,9 +916,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
> @@ -1580,7 +1583,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
> @@ -1590,11 +1593,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
> @@ -1605,6 +1609,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
> diff --git a/arch/Kconfig b/arch/Kconfig
> index a11f872938..ff417d40fd 100644
> --- a/arch/Kconfig
> +++ b/arch/Kconfig
> @@ -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
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index c8eae24c07..c688c46475 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -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
> diff --git a/arch/x86/cpu/baytrail/Kconfig b/arch/x86/cpu/baytrail/Kconfig
> index d2c3473d6a..53d945e931 100644
> --- a/arch/x86/cpu/baytrail/Kconfig
> +++ b/arch/x86/cpu/baytrail/Kconfig
> @@ -7,6 +7,7 @@ config INTEL_BAYTRAIL
> select HAVE_FSP
> select ARCH_MISC_INIT
> select CPU_INTEL_TURBO_NOT_PACKAGE_SCOPED
> + imply ROM_NEEDS_BLOBS
This is already selected by HAVE_FSP
> imply HAVE_INTEL_ME
> imply ENABLE_MRC_CACHE
> imply AHCI_PCI
> diff --git a/arch/x86/cpu/quark/Kconfig b/arch/x86/cpu/quark/Kconfig
> index 430cce184d..2fee38aed7 100644
> --- a/arch/x86/cpu/quark/Kconfig
> +++ b/arch/x86/cpu/quark/Kconfig
> @@ -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
> --
Regards,
Bin
More information about the U-Boot
mailing list