[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