Message ID | 56E0AC28.4010705@suse.de |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
On Thu, Mar 10, 2016 at 12:05:12AM +0100, Alexander Graf wrote: > > > On 04.03.16 01:10, Alexander Graf wrote: > > UEFI defines a simple boot protocol for removable media. There we should look > > at the EFI (first GPT FAT) partition and search for /efi/boot/bootXXX.efi with > > XXX being different between different platforms (x86, x64, arm, aa64, ...). > > > > This patch implements a simple version of that protocol for the default distro > > boot script. With this we can automatically boot from valid UEFI enabled > > removable media. > > > > Because from all I could see U-Boot by default doesn't deliver device tree > > blobs with its firmware, we also need to load the dtb from somewhere. Traverse > > the same EFI partition for an fdt file that fits our current board so that > > an OS receives a valid device tree when booted automatically. > > > > Signed-off-by: Alexander Graf <agraf@suse.de> > > Reviewed-by: Simon Glass <sjg@chromium.org> > > --- > > include/config_distro_bootcmd.h | 47 ++++++++++++++++++++++++++++++++++++++++- > > 1 file changed, 46 insertions(+), 1 deletion(-) > > > > diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h > > index 37c6b43..c19f1b0 100644 > > --- a/include/config_distro_bootcmd.h > > +++ b/include/config_distro_bootcmd.h > > @@ -90,6 +90,48 @@ > > BOOT_TARGET_DEVICES_references_UBIFS_without_CONFIG_CMD_UBIFS > > #endif > > > > +#ifdef CONFIG_EFI_LOADER > > +#if defined(CONFIG_ARM64) > > +#define BOOTEFI_NAME "bootaa64.efi" > > +#elif defined(CONFIG_ARM) > > +#define BOOTEFI_NAME "bootarm.efi" > > +#endif > > +#endif > > + > > +#ifdef BOOTEFI_NAME > > +#define BOOTENV_SHARED_EFI \ > > + "boot_efi_binary=" \ > > + "load ${devtype} ${devnum}:${distro_bootpart} " \ > > + "${kernel_addr_r} efi/boot/"BOOTEFI_NAME"; " \ > > + "bootefi ${kernel_addr_r}\0" \ > > + \ > > + "load_efi_dtb=" \ > > + "load ${devtype} ${devnum}:${distro_bootpart} " \ > > + "${fdt_addr_r} ${prefix}${fdt_name}; " \ > > + "fdt addr ${fdt_addr_r}\0" \ > > + \ > > + "efi_dtb_prefixes=/ /dtb/ /dtb/current/\0" \ > > + "scan_dev_for_efi=" \ > > + "for prefix in ${efi_dtb_prefixes}; do " \ > > + "if test -e ${devtype} " \ > > + "${devnum}:${distro_bootpart} " \ > > + "${prefix}${fdt_name}; then " \ > > + "run load_efi_dtb; " \ > > + "fi;" \ > > + "done;" \ > > + "if test -e ${devtype} ${devnum}:${distro_bootpart} " \ > > + "efi/boot/"BOOTEFI_NAME"; then " \ > > + "echo Found EFI removable media binary " \ > > + "efi/boot/"BOOTEFI_NAME"; " \ > > + "run boot_efi_binary; " \ > > + "echo EFI LOAD FAILED: continuing...; " \ > > + "fi; " > > Whoever applies this, please also apply the patch below on top and > squash it in (or tell me to resend). Without the fix, we end up slurping > the boot_prefix variable into the scan_dev_for_efi variable. > > > Alex > > diff --git a/include/config_distro_bootcmd.h > b/include/config_distro_bootcmd.h > index e7d7002..ad9045e 100644 > --- a/include/config_distro_bootcmd.h > +++ b/include/config_distro_bootcmd.h > @@ -125,7 +125,7 @@ > "efi/boot/"BOOTEFI_NAME"; " \ > "run boot_efi_binary; " \ > "echo EFI LOAD FAILED: continuing...; " \ > - "fi; " > + "fi; \0" > #define SCAN_DEV_FOR_EFI "run scan_dev_for_efi;" > #else > #define BOOTENV_SHARED_EFI Please make just a v6 of this patch and re-post, thanks!
diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h index e7d7002..ad9045e 100644 --- a/include/config_distro_bootcmd.h +++ b/include/config_distro_bootcmd.h @@ -125,7 +125,7 @@ "efi/boot/"BOOTEFI_NAME"; " \ "run boot_efi_binary; " \ "echo EFI LOAD FAILED: continuing...; " \ - "fi; " + "fi; \0" #define SCAN_DEV_FOR_EFI "run scan_dev_for_efi;" #else #define BOOTENV_SHARED_EFI