On 9/8/21 3:33 PM, Simon Glass wrote:
Most modern platforms use 64-bit EFI so it is useful to have a U-Boot app
that runs under that. Add a (non-functional) build for this.

Note that --whole-archive causes the gcc 9.2 linker to crash, so disable
this for now. Once this is resolved, things should work.

For now, avoid meantioning the documentation for the 64-bit app, since it

%s/meantioning/mentioning/

does not work.

Signed-off-by: Simon Glass <s...@chromium.org>
---

  arch/x86/cpu/u-boot-64.lds                    |  2 +
  arch/x86/cpu/x86_64/Makefile                  |  4 ++
  arch/x86/cpu/x86_64/cpu.c                     | 17 --------
  arch/x86/cpu/x86_64/misc.c                    | 25 ++++++++++++
  board/efi/Kconfig                             | 15 ++++++-
  board/efi/efi-x86_app/Kconfig                 |  2 +-
  board/efi/efi-x86_app/MAINTAINERS             | 11 +++++-
  ..._app_defconfig => efi-x86_app32_defconfig} |  2 +-
  configs/efi-x86_app64_defconfig               | 39 +++++++++++++++++++
  doc/develop/uefi/u-boot_on_efi.rst            |  4 +-
  10 files changed, 96 insertions(+), 25 deletions(-)
  create mode 100644 arch/x86/cpu/x86_64/misc.c
  rename configs/{efi-x86_app_defconfig => efi-x86_app32_defconfig} (97%)
  create mode 100644 configs/efi-x86_app64_defconfig

diff --git a/arch/x86/cpu/u-boot-64.lds b/arch/x86/cpu/u-boot-64.lds
index ee0812aefbc..92a30c2a387 100644
--- a/arch/x86/cpu/u-boot-64.lds
+++ b/arch/x86/cpu/u-boot-64.lds
@@ -15,7 +15,9 @@ SECTIONS
        /DISCARD/ : { *(.u_boot_list_2_cmd_*) }
  #endif

+#ifdef CONFIG_SYS_TEXT_BASE
        . = CONFIG_SYS_TEXT_BASE;       /* Location of bootcode in flash */
+#endif
        __text_start = .;

        .text.start : { *(.text.start); }
diff --git a/arch/x86/cpu/x86_64/Makefile b/arch/x86/cpu/x86_64/Makefile
index 400f0ffe397..e929563b2c1 100644
--- a/arch/x86/cpu/x86_64/Makefile
+++ b/arch/x86/cpu/x86_64/Makefile
@@ -4,3 +4,7 @@
  #

  obj-y += cpu.o interrupts.o setjmp.o
+
+ifndef CONFIG_EFI
+obj-y += misc.o
+endif
diff --git a/arch/x86/cpu/x86_64/cpu.c b/arch/x86/cpu/x86_64/cpu.c
index e090b1b478a..fb501218e25 100644
--- a/arch/x86/cpu/x86_64/cpu.c
+++ b/arch/x86/cpu/x86_64/cpu.c
@@ -52,23 +52,6 @@ int x86_mp_init(void)
        return 0;
  }

-int misc_init_r(void)
-{
-       return 0;
-}
-
-#ifndef CONFIG_SYS_COREBOOT
-int checkcpu(void)
-{
-       return 0;
-}
-
-int print_cpuinfo(void)
-{
-       return 0;
-}
-#endif
-
  int x86_cpu_reinit_f(void)
  {
        return 0;
diff --git a/arch/x86/cpu/x86_64/misc.c b/arch/x86/cpu/x86_64/misc.c
new file mode 100644
index 00000000000..02587ff0c50
--- /dev/null
+++ b/arch/x86/cpu/x86_64/misc.c
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2016 Google, Inc
+ * Written by Simon Glass <s...@chromium.org>
+ */
+
+#include <common.h>
+#include <init.h>
+
+int misc_init_r(void)
+{
+       return 0;
+}
+
+#ifndef CONFIG_SYS_COREBOOT
+int checkcpu(void)
+{
+       return 0;
+}
+
+int print_cpuinfo(void)
+{
+       return 0;
+}
+#endif
diff --git a/board/efi/Kconfig b/board/efi/Kconfig
index 291bd2ca154..3df6e31c8ba 100644
--- a/board/efi/Kconfig
+++ b/board/efi/Kconfig
@@ -4,14 +4,25 @@ choice
        prompt "Mainboard model"
        optional

-config TARGET_EFI_APP
-       bool "efi application"
+config TARGET_EFI_APP32
+       bool "32-bit efi application"
+       select EFI_APP
        help
          This target is used for running U-Boot on top of EFI. In
          this case EFI does the early initialisation, and U-Boot
          takes over once the RAM, video and CPU are fully running.
          U-Boot is loaded as an application from EFI.

+config TARGET_EFI_APP64
+       bool "64-bit efi application"
+       select EFI_APP
+       select X86_64
+       help
+         This target is used for running U-Boot on top of EFI in 64-bit mode.
+         In this case EFI does the early initialisation, and U-Boot
+         takes over once the RAM, video and CPU are fully running.
+         U-Boot is loaded as an application from EFI.
+
  config TARGET_EFI_PAYLOAD
        bool "efi payload"
        help
diff --git a/board/efi/efi-x86_app/Kconfig b/board/efi/efi-x86_app/Kconfig
index ae87bf34d37..e412702eed7 100644
--- a/board/efi/efi-x86_app/Kconfig
+++ b/board/efi/efi-x86_app/Kconfig
@@ -1,4 +1,4 @@
-if TARGET_EFI_APP
+if EFI_APP

  config SYS_BOARD
        default "efi-x86_app"
diff --git a/board/efi/efi-x86_app/MAINTAINERS 
b/board/efi/efi-x86_app/MAINTAINERS
index fb8a6b1c2fa..b292811a8f0 100644
--- a/board/efi/efi-x86_app/MAINTAINERS
+++ b/board/efi/efi-x86_app/MAINTAINERS
@@ -1,6 +1,13 @@
-EFI-X86_APP BOARD
+EFI-X86_APP32 BOARD
  M:    Simon Glass <s...@chromium.org>
  S:    Maintained
  F:    board/efi/efi-x86_app/
  F:    include/configs/efi-x86_app.h
-F:     configs/efi-x86_app_defconfig
+F:     configs/efi-x86_app32_defconfig
+
+EFI-X86_APP64 BOARD
+M:     Simon Glass <s...@chromium.org>
+S:     Maintained
+F:     board/efi/efi-x86_app/
+F:     include/configs/efi-x86_app.h
+F:     configs/efi-x86_app64_defconfig
diff --git a/configs/efi-x86_app_defconfig b/configs/efi-x86_app32_defconfig
similarity index 97%
rename from configs/efi-x86_app_defconfig
rename to configs/efi-x86_app32_defconfig
index e9ee66250cf..43ab3fb99c7 100644
--- a/configs/efi-x86_app_defconfig
+++ b/configs/efi-x86_app32_defconfig
@@ -5,7 +5,7 @@ CONFIG_DEFAULT_DEVICE_TREE="efi-x86_app"
  CONFIG_DEBUG_UART_BASE=0
  CONFIG_DEBUG_UART_CLOCK=0
  CONFIG_VENDOR_EFI=y
-CONFIG_TARGET_EFI_APP=y
+CONFIG_TARGET_EFI_APP32=y
  CONFIG_DEBUG_UART=y
  CONFIG_FIT=y
  CONFIG_SHOW_BOOT_PROGRESS=y
diff --git a/configs/efi-x86_app64_defconfig b/configs/efi-x86_app64_defconfig
new file mode 100644
index 00000000000..a395d3eb27b
--- /dev/null
+++ b/configs/efi-x86_app64_defconfig
@@ -0,0 +1,39 @@
+CONFIG_X86=y
+CONFIG_NR_DRAM_BANKS=8
+CONFIG_ENV_SIZE=0x1000
+CONFIG_DEFAULT_DEVICE_TREE="efi-x86_app"
+CONFIG_DEBUG_UART_BASE=0
+CONFIG_DEBUG_UART_CLOCK=0
+CONFIG_VENDOR_EFI=y
+CONFIG_TARGET_EFI_APP64=y
+CONFIG_DEBUG_UART=y
+CONFIG_FIT=y
+CONFIG_SHOW_BOOT_PROGRESS=y
+CONFIG_USE_BOOTARGS=y
+CONFIG_BOOTARGS="root=/dev/sdb3 init=/sbin/init rootwait ro"
+CONFIG_SYS_CONSOLE_INFO_QUIET=y
+CONFIG_DISPLAY_BOARDINFO_LATE=y
+CONFIG_LAST_STAGE_INIT=y
+CONFIG_HUSH_PARSER=y
+# CONFIG_CMD_BOOTM is not set
+CONFIG_CMD_PART=y
+# CONFIG_CMD_NET is not set
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_MAC_PARTITION=y
+CONFIG_ISO_PARTITION=y
+CONFIG_EFI_PARTITION=y
+CONFIG_OF_EMBED=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_REGMAP=y
+CONFIG_SYSCON=y
+# CONFIG_DM_ETH is not set
+# CONFIG_REGEX is not set
+# CONFIG_GZIP is not set
+CONFIG_EFI=y
+# CONFIG_EFI_LOADER is not set
diff --git a/doc/develop/uefi/u-boot_on_efi.rst 
b/doc/develop/uefi/u-boot_on_efi.rst
index 59ee3885295..5de7215f6d1 100644
--- a/doc/develop/uefi/u-boot_on_efi.rst
+++ b/doc/develop/uefi/u-boot_on_efi.rst
@@ -48,10 +48,10 @@ for that board. It will be either 32-bit or 64-bit. 
Alternatively, you can
  opt for using QEMU [1] and the OVMF [2], as detailed below.

  To build U-Boot as an EFI application (32-bit EFI required), enable CONFIG_EFI
-and CONFIG_EFI_APP. The efi-x86_app config (efi-x86_app_defconfig) is set up
+and CONFIG_EFI_APP. The efi-x86_app config (efi-x86_app32_defconfig) is set up
  for this. Just build U-Boot as normal, e.g.::

-   make efi-x86_app_defconfig
+   make efi-x86_app32_defconfig
     make

  To build U-Boot as an EFI payload (32-bit or 64-bit EFI can be used), enable

Reply via email to