[U-Boot] [PATCH 48/69] x86: Add support for running Intel reference code
Bin Meng
bmeng.cn at gmail.com
Fri Mar 11 08:29:33 CET 2016
Hi Simon,
On Mon, Mar 7, 2016 at 10:28 AM, Simon Glass <sjg at chromium.org> wrote:
> Intel has invented yet another binary blob which firmware is required to
> run. This is run after SDRAM is ready. It is linked to load at a particular
> address, typically 0, but is a relocatable ELF so can be moved if required.
>
This is really bad!
> Add support for this in the build system. The file should be placed in the
> board directory, and called refcode.elf.
Is there any public documentation that explains this binary blob? Is
this blob supposed to hide any top-secret of their chipset?! Why not
just a single FSP binary? I fail to understand Intel's firmware
strategy given they seem to actively promote FSP.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Makefile | 14 +++++++++++++-
> arch/x86/Kconfig | 11 +++++++++++
> arch/x86/include/asm/cpu.h | 12 ++++++++++++
> 3 files changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 6bb5565..76dab6f 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1044,6 +1044,10 @@ 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),)
> @@ -1052,7 +1056,15 @@ endif
> cmd_ifdtool += $(IFDTOOL) $(IFDTOOL_FLAGS) u-boot.tmp;
> cmd_ifdtool += mv u-boot.tmp $@
>
> -u-boot.rom: u-boot-x86-16bit.bin u-boot.bin FORCE
> +refcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
> + $(call if_changed,copy)
> +
> +quiet_cmd_ldr = LD $@
> +cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
> + $(filter-out FORCE,$^) -o $@
> +
> +u-boot.rom: u-boot-x86-16bit.bin u-boot.bin FORCE \
> + $(if $(CONFIG_HAVE_REFCODE),refcode.bin)
> $(call if_changed,ifdtool)
>
> OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 29df78c..2544c65 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -305,6 +305,17 @@ config DCACHE_RAM_MRC_VAR_SIZE
> memory reference code and must be set correctly or the board will
> not boot.
>
> +config HAVE_REFCODE
> + bool "Add a Reference Code binary"
> + help
> + Select this option to add a Reference Code binary to the resulting
> + U-Boot image. This is an Intel binary blob that handles system
> + initialisation, in this case the PCH and System Agent.
> +
> + Note: Without this binary (on platforms that need it such as
> + broadwell) U-Boot will be missing some critical setup steps.
> + Various peripherals may fail to work.
> +
> config SMP
> bool "Enable Symmetric Multiprocessing"
> default n
> diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h
> index 85386da..23ec764 100644
> --- a/arch/x86/include/asm/cpu.h
> +++ b/arch/x86/include/asm/cpu.h
> @@ -275,4 +275,16 @@ u32 cpu_get_family_model(void);
> */
> u32 cpu_get_stepping(void);
>
> +/**
> + * cpu_run_reference_code() - Run the platform reference code
> + *
> + * Some platforms require a binary blob to be executed once SDRAM is
> + * available. This is used to set up various platform features, such as the
> + * platform controller hub (PCB). This function should be implemented by the
typo: PCH
> + * CPU-specific code.
> + *
> + * @return 0 on success, -ve on failure
> + */
> +int cpu_run_reference_code(void);
> +
> #endif
> --
Regards,
Bin
More information about the U-Boot
mailing list