[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