[U-Boot] [PATCH v4 11/11] x86: Use binman all x86 boards

Bin Meng bmeng.cn at gmail.com
Thu Nov 3 05:11:01 CET 2016


Hi Simon,

On Fri, Oct 7, 2016 at 4:59 AM, Simon Glass <sjg at chromium.org> wrote:
> Change x86 boards to use binman to produce the ROM. This involves adding the
> image definition to the device tree and using it in the Makefile. The
> existing ifdtool features are no-longer needed.
>
> Note that the .dtsi file is common and is used for all x86 boards.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v4:
> - Remove RFC tag
> - Use binman for all x86 boards
>
> Changes in v3:
> - Put the binman definition in u-boot.dtsi
>
> Changes in v2:
> - Add automated test coverage
> - Put the binman definition in a common file for x86
> - Various changes and improvements based on using this tool for a while
>
>  Makefile                 | 45 +++--------------------------------
>  arch/x86/dts/u-boot.dtsi | 62 ++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 65 insertions(+), 42 deletions(-)
>  create mode 100644 arch/x86/dts/u-boot.dtsi
>
> diff --git a/Makefile b/Makefile
> index a5bbb24..31c3146 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1060,50 +1060,11 @@ endif
>
>  # x86 uses a large ROM. We fill it with 0xff, put the 16-bit stuff (including
>  # reset vector) at the top, Intel ME descriptor at the bottom, and U-Boot in
> -# the middle.
> +# the middle. This is handled by binman based on an image description in the
> +# board's device tree.
>  ifneq ($(CONFIG_X86_RESET_VECTOR),)
>  rom: u-boot.rom FORCE
>
> -IFDTOOL=$(objtree)/tools/ifdtool
> -IFDTOOL_FLAGS  = -f 0:$(objtree)/u-boot.dtb
> -IFDTOOL_FLAGS += -m 0x$(shell $(NM) u-boot |grep _dt_ucode_base_size |cut -d' ' -f1)
> -IFDTOOL_FLAGS += -U $(CONFIG_SYS_TEXT_BASE):$(objtree)/u-boot-nodtb.bin
> -IFDTOOL_FLAGS += -w $(CONFIG_SYS_X86_START16):$(objtree)/u-boot-x86-16bit.bin
> -IFDTOOL_FLAGS += -C
> -
> -ifneq ($(CONFIG_HAVE_INTEL_ME),)
> -IFDTOOL_ME_FLAGS  = -D $(srctree)/board/$(BOARDDIR)/descriptor.bin
> -IFDTOOL_ME_FLAGS += -i ME:$(srctree)/board/$(BOARDDIR)/me.bin
> -endif
> -
> -ifneq ($(CONFIG_HAVE_MRC),)
> -IFDTOOL_FLAGS += -w $(CONFIG_X86_MRC_ADDR):$(srctree)/board/$(BOARDDIR)/mrc.bin
> -endif
> -
> -ifneq ($(CONFIG_HAVE_FSP),)
> -IFDTOOL_FLAGS += -w $(CONFIG_FSP_ADDR):$(srctree)/board/$(BOARDDIR)/$(CONFIG_FSP_FILE)
> -endif
> -
> -ifneq ($(CONFIG_HAVE_CMC),)
> -IFDTOOL_FLAGS += -w $(CONFIG_CMC_ADDR):$(srctree)/board/$(BOARDDIR)/$(CONFIG_CMC_FILE)
> -endif
> -
> -ifneq ($(CONFIG_HAVE_VGA_BIOS),)
> -IFDTOOL_FLAGS += -w $(CONFIG_VGA_BIOS_ADDR):$(srctree)/board/$(BOARDDIR)/$(CONFIG_VGA_BIOS_FILE)
> -endif
> -
> -ifneq ($(CONFIG_HAVE_REFCODE),)
> -IFDTOOL_FLAGS += -w $(CONFIG_X86_REFCODE_ADDR):refcode.bin
> -endif
> -
> -quiet_cmd_ifdtool = IFDTOOL $@
> -cmd_ifdtool  = $(IFDTOOL) -c -r $(CONFIG_ROM_SIZE) u-boot.tmp;
> -ifneq ($(CONFIG_HAVE_INTEL_ME),)
> -cmd_ifdtool += $(IFDTOOL) $(IFDTOOL_ME_FLAGS) u-boot.tmp;
> -endif
> -cmd_ifdtool += $(IFDTOOL) $(IFDTOOL_FLAGS) u-boot.tmp;
> -cmd_ifdtool += mv u-boot.tmp $@
> -
>  refcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
>         $(call if_changed,copy)
>
> @@ -1113,7 +1074,7 @@ cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
>
>  u-boot.rom: u-boot-x86-16bit.bin u-boot.bin FORCE \
>                 $(if $(CONFIG_HAVE_REFCODE),refcode.bin)
> -       $(call if_changed,ifdtool)
> +       $(call if_changed,binman)
>
>  OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec
>  u-boot-x86-16bit.bin: u-boot FORCE
> diff --git a/arch/x86/dts/u-boot.dtsi b/arch/x86/dts/u-boot.dtsi
> new file mode 100644
> index 0000000..724913f
> --- /dev/null
> +++ b/arch/x86/dts/u-boot.dtsi
> @@ -0,0 +1,62 @@
> +/*
> + * Copyright (C) 2016 Google, Inc
> + * Written by Simon Glass <sjg at chromium.org>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#include <config.h>
> +
> +#ifdef CONFIG_ROM_SIZE
> +/ {
> +       binman {
> +               filename = "u-boot.rom";
> +               end-at-4gb;
> +               sort-by-pos;
> +               pad-byte = <0xff>;
> +               size = <CONFIG_ROM_SIZE>;
> +#ifdef CONFIG_HAVE_INTEL_ME
> +               intel-descriptor {
> +               };
> +               intel-me {
> +               };
> +#endif
> +               u-boot-with-ucode-ptr {
> +                       pos = <CONFIG_SYS_TEXT_BASE>;
> +               };
> +               u-boot-dtb-with-ucode {
> +               };

This causes build error for QEMU.

  BINMAN  u-boot.rom
Node '/binman/u-boot-dtb-with-ucode': No /microcode node found in
'./u-boot-dtb-with-ucode.dtb'
make: *** [u-boot.rom] Error 1


> +               u-boot-ucode {
> +                       align = <16>;
> +               };
> +#ifdef CONFIG_HAVE_MRC
> +               intel-mrc {
> +                       pos = <CONFIG_X86_MRC_ADDR>;
> +               };
> +#endif
> +#ifdef CONFIG_HAVE_FSP
> +               intel-fsp {
> +                       pos = <CONFIG_FSP_ADDR>;
> +               };
> +#endif
> +#ifdef CONFIG_HAVE_CMC
> +               intel-cmc {
> +                       pos = <CONFIG_CMC_ADDR>;
> +               };
> +#endif
> +#ifdef CONFIG_HAVE_VGA_BIOS
> +               intel-vga {
> +                       pos = <CONFIG_VGA_BIOS_ADDR>;
> +               };
> +#endif
> +#ifdef CONFIG_HAVE_REFCODE
> +               intel-refcode {
> +                       pos = <CONFIG_X86_REFCODE_ADDR>;
> +               };
> +#endif
> +               x86-start16 {
> +                       pos = <CONFIG_SYS_X86_START16>;
> +               };
> +       };
> +};
> +#endif

Regards,
Bin


More information about the U-Boot mailing list