On Tue, Aug 07, 2018 at 01:11:11PM +0200, Stefano Babic wrote: > Hi Henry, > > On 14/07/2018 02:11, Henry Beberman wrote: > > From: Henry Beberman <henry.beber...@microsoft.com> > > > > This patch enables i.MX platforms to easily add a boot script to their > > U-Boot Proper environment to automatically load and execute an EFI > > firmware from the first FAT partition of an MMC device. > > > > This is a portion of enabling the Windows 10 IoT Core boot path. > > > > The go command is overridden when CONFIG_UEFI_BOOT is specified. This > > new go will perform a cache flush/disable, disable interrupts, then > > jump to the address where UEFI was loaded. > > > > This patch adds two new Kconfig options: > > CONFIG_UEFI_BOOT: Selects the UEFI bootcmd and overrides go to flush > > caches and disable interrupts. > > CONFIG_UEFI_LOAD_ADDR: Specifies the load address for the UEFI image > > > > Signed-off-by: Henry Beberman <henry.beber...@microsoft.com> > > Cc: Stefano Babic <sba...@denx.de> > > Cc: Fabio Estevam <fabio.este...@nxp.com> > > Cc: Tom Rini <tr...@konsulko.com> > > --- > > arch/arm/mach-imx/Makefile | 1 + > > arch/arm/mach-imx/boot.c | 19 +++++++++++++++++++ > > common/Kconfig | 17 +++++++++++++++++ > > include/config_uefi_bootcmd.h | 29 +++++++++++++++++++++++++++++ > > 4 files changed, 66 insertions(+) > > create mode 100644 arch/arm/mach-imx/boot.c > > create mode 100644 include/config_uefi_bootcmd.h > > > > I am really missing why we need this specially for i.MX. There is > nothing special to i.MX, and if this command is necessary, we should put > it in common code. > > Anyway, should we not try to merge it with the general support for UEFI > in U-Boot ? We have already a "bootefi" command (aarch64 and x86, > currently).
Agreed, this should be folded in with our existing UEFI support, thanks! > > > diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile > > index 733c308670..a81af51f03 100644 > > --- a/arch/arm/mach-imx/Makefile > > +++ b/arch/arm/mach-imx/Makefile > > @@ -42,6 +42,7 @@ endif > > obj-$(CONFIG_SATA) += sata.o > > obj-$(CONFIG_SECURE_BOOT) += hab.o > > obj-$(CONFIG_SYSCOUNTER_TIMER) += syscounter.o > > +obj-$(CONFIG_UEFI_BOOT) += boot.o > > endif > > ifeq ($(SOC),$(filter $(SOC),mx7ulp)) > > obj-y += cache.o > > diff --git a/arch/arm/mach-imx/boot.c b/arch/arm/mach-imx/boot.c > > new file mode 100644 > > index 0000000000..457a323fa2 > > --- /dev/null > > +++ b/arch/arm/mach-imx/boot.c > > @@ -0,0 +1,19 @@ > > +// SPDX-License-Identifier: GPL-2.0+ > > +/* > > + * Copyright (C) 2018 Microsoft Corporation > > + */ > > + > > +#include <common.h> > > +#include <command.h> > > + > > +DECLARE_GLOBAL_DATA_PTR; > > + > > +#if defined(CONFIG_UEFI_BOOT) > > +unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc, > > + char * const argv[]) > > +{ > > + cleanup_before_linux(); > > + > > + return entry(argc, argv); > > +} > > +#endif /* CONFIG_UEFI_BOOT */ > > diff --git a/common/Kconfig b/common/Kconfig > > index 4c7a1a9af8..35362b629c 100644 > > --- a/common/Kconfig > > +++ b/common/Kconfig > > @@ -217,6 +217,23 @@ config BOOTCOMMAND > > This is the string of commands that will be used as bootcmd and if > > AUTOBOOT is set, automatically run. > > > > +config UEFI_BOOT > > + bool "Boot a UEFI firmware loaded from the first FAT partition on the > > mmc" > > + default n > > + help > > + Override the CONFIG_BOOTCOMMAND to load a UEFI firmware image from the > > + first FAT partition on the mmc. Override the go command to make it > > disable > > + interrupts and flush the cache before jumping to the specified > > address. > > + > > +config UEFI_LOAD_ADDR > > + hex "Load address for the UEFI image" > > + depends on UEFI_BOOT > > + help > > + CONFIG_UEFI_BOOT uses this as the address to load the UEFI image. > > + The uefi_bootcmd script in the environment will fatload efi from the > > mmc > > + to this location, then use an overridden go command to disable caches > > and > > + interrupts then jump to this location. > > + > > menu "Console" > > > > config MENU > > diff --git a/include/config_uefi_bootcmd.h b/include/config_uefi_bootcmd.h > > new file mode 100644 > > index 0000000000..03903abf8f > > --- /dev/null > > +++ b/include/config_uefi_bootcmd.h > > @@ -0,0 +1,29 @@ > > +/* SPDX-License-Identifier: GPL-2.0+ */ > > +/* > > + * Copyright (C) 2018 Microsoft Corporation > > + */ > > + > > +#ifndef _CONFIG_UEFI_BOOTCMD_H > > +#define _CONFIG_UEFI_BOOTCMD_H > > + > > +#define BOOTENV \ > > + "uefi_image_name=imxboard_efi.fd\0" \ > > + "uefi_addr=" __stringify(CONFIG_UEFI_LOAD_ADDR) "\0" \ > > + "uefi_bootcmd=" \ > > + "part list mmc ${mmcdev} -bootable devplist; " \ > > + "env exists devplist || setenv devplist 1; " \ > > + "for bootpart in ${devplist}; do " \ > > + "if fatload mmc ${mmcdev}:${bootpart} " \ > > + "${uefi_addr} ${uefi_image_name}; then " \ > > + "echo \"Jumping to ${uefi_image_name} at " \ > > + "${uefi_addr}\"; " \ > > + "go ${uefi_addr}; " \ > > + "fi; " \ > > + "done; " \ > > + "echo \"Could not find ${uefi_image_name} on mmc ${mmcdev}\";\0" > > + > > +#ifdef CONFIG_UEFI_BOOT > > +#define CONFIG_BOOTCOMMAND "run uefi_bootcmd" > > +#endif > > + > > +#endif /* _CONFIG_UEFI_BOOTCMD_H */ > > > > Best regards, > Stefano Babic > > -- > ===================================================================== > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de > ===================================================================== -- Tom
signature.asc
Description: PGP signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot