Added loongarch UEFI BIOS support to compiled scripts.

  UEFI code images require 16M alignment, flash images require
16M alignment, under the loongarch architecture.This is agreed
upon when the firmware is loaded in QEMU under Loongarch.

  The naming of UEFI under loongarch refers to the x86 and arm naming methods,
and the UEFI image names in x86 and arm are:
edk2-i386-code.fd
edk2-i386-vars.fd
edk2-arm-code.fd
edk2-arm-vars.fd
So on loongarch, we named it:
edk2-loongarch64-code.fd
edk2-loongarch64-vars.fd

Signed-off-by: Xianglai Li <lixiang...@loongson.cn>
---
Cc: Song Gao <gaos...@loongson.cn> 
Cc: Jiaxun Yang <jiaxun.y...@flygoat.com> 
Cc: Paolo Bonzini <pbonz...@redhat.com> 
Cc: "Marc-André Lureau" <marcandre.lur...@redhat.com> 
Cc: "Daniel P. Berrangé" <berra...@redhat.com> 
Cc: Thomas Huth <th...@redhat.com> 
Cc: "Philippe Mathieu-Daudé" <phi...@linaro.org> 
Cc: Gerd Hoffmann <kra...@redhat.com> 
Cc: Bibo Mao <maob...@loongson.cn>
Cc: Xianglai Li <lixiang...@loongson.cn>

Hello, everyone:
  Earlier I submitted a patch that provides support for loongarch efi
compilation in qemu.
  However, the loongarch virtual machine UEFI code was in the edk2-platform
repository at the time, and community members did not integrate it because
it would cause the qemu distribution package to be too large.
  But now, the UEFI code of loongarch virtual machine has been migrated
from edK2-platform to edk2 repository. The migration work was completed
and merged into edk2 main line on 2024/6/18.
  The edk2-stable202408 release will come with support for loongarch,So
I modified my previous patch and submitted it.
  Before committing, I successfully compiled(Here I switch the edk2 repository
to the master branch in order to compile and test) the loongarch UEFI firmware
on a fedora39(x86) machine using the compile script in the roms directory in 
qemu,
and I was able to successfully run it in tcg mode in qemu using
the following command:

qemu-system-loongarch64 -bios edk2-loongarch64-code.fd -serial stdio

Thanks,
Xianglai.
---
 docs/system/loongarch/virt.rst               |  2 +-
 meson.build                                  |  2 +-
 pc-bios/descriptors/60-edk2-loongarch64.json | 32 ++++++++++++++++++++
 pc-bios/descriptors/meson.build              |  3 +-
 pc-bios/meson.build                          |  2 ++
 roms/edk2-build.config                       | 13 ++++++++
 6 files changed, 51 insertions(+), 3 deletions(-)
 create mode 100644 pc-bios/descriptors/60-edk2-loongarch64.json

diff --git a/docs/system/loongarch/virt.rst b/docs/system/loongarch/virt.rst
index 06d034b8ef..172fba079e 100644
--- a/docs/system/loongarch/virt.rst
+++ b/docs/system/loongarch/virt.rst
@@ -64,7 +64,7 @@ Note: You need get the latest cross-tools at 
https://github.com/loongson/build-t
 
 (3) Build BIOS:
 
-    See: 
https://github.com/tianocore/edk2-platforms/tree/master/Platform/Loongson/LoongArchQemuPkg#readme
+    See: 
https://github.com/tianocore/edk2/tree/master/OvmfPkg/LoongArchVirt#readme
 
 Note: To build the release version of the bios,  set --buildtarget=RELEASE,
       the bios file path:  Build/LoongArchQemu/RELEASE_GCC5/FV/QEMU_EFI.fd
diff --git a/meson.build b/meson.build
index 23f35193ee..b9bdd479c8 100644
--- a/meson.build
+++ b/meson.build
@@ -93,7 +93,7 @@ else
   iasl = find_program(get_option('iasl'), required: true)
 endif
 
-edk2_targets = [ 'arm-softmmu', 'aarch64-softmmu', 'i386-softmmu', 
'x86_64-softmmu', 'riscv64-softmmu' ]
+edk2_targets = [ 'arm-softmmu', 'aarch64-softmmu', 'i386-softmmu', 
'x86_64-softmmu', 'riscv64-softmmu', 'loongarch64-softmmu' ]
 unpack_edk2_blobs = false
 foreach target : edk2_targets
   if target in target_dirs
diff --git a/pc-bios/descriptors/60-edk2-loongarch64.json 
b/pc-bios/descriptors/60-edk2-loongarch64.json
new file mode 100644
index 0000000000..52915f729f
--- /dev/null
+++ b/pc-bios/descriptors/60-edk2-loongarch64.json
@@ -0,0 +1,32 @@
+{
+    "description": "UEFI firmware for loongarch64",
+    "interface-types": [
+        "uefi"
+    ],
+    "mapping": {
+        "device": "flash",
+        "executable": {
+            "filename": "@DATADIR@/edk2-loongarch64-code.fd",
+            "format": "raw"
+        },
+        "nvram-template": {
+            "filename": "@DATADIR@/edk2-loongarch64-vars.fd",
+            "format": "raw"
+        }
+    },
+    "targets": [
+        {
+            "architecture": "loongarch64",
+            "machines": [
+                "virt*"
+            ]
+        }
+    ],
+    "features": [
+
+    ],
+    "tags": [
+
+    ]
+}
+
diff --git a/pc-bios/descriptors/meson.build b/pc-bios/descriptors/meson.build
index 66f85d01c4..afb5a959cc 100644
--- a/pc-bios/descriptors/meson.build
+++ b/pc-bios/descriptors/meson.build
@@ -5,7 +5,8 @@ if unpack_edk2_blobs and get_option('install_blobs')
     '60-edk2-aarch64.json',
     '60-edk2-arm.json',
     '60-edk2-i386.json',
-    '60-edk2-x86_64.json'
+    '60-edk2-x86_64.json',
+    '60-edk2-loongarch64.json'
   ]
     configure_file(input: files(f),
                    output: f,
diff --git a/pc-bios/meson.build b/pc-bios/meson.build
index 8602b45b9b..090379763e 100644
--- a/pc-bios/meson.build
+++ b/pc-bios/meson.build
@@ -11,6 +11,8 @@ if unpack_edk2_blobs
     'edk2-i386-vars.fd',
     'edk2-x86_64-code.fd',
     'edk2-x86_64-secure-code.fd',
+    'edk2-loongarch64-code.fd',
+    'edk2-loongarch64-vars.fd',
   ]
 
   foreach f : fds
diff --git a/roms/edk2-build.config b/roms/edk2-build.config
index cc9b211542..9e45361fb4 100644
--- a/roms/edk2-build.config
+++ b/roms/edk2-build.config
@@ -131,3 +131,16 @@ cpy1 = FV/RISCV_VIRT_CODE.fd  edk2-riscv-code.fd
 cpy2 = FV/RISCV_VIRT_VARS.fd  edk2-riscv-vars.fd
 pad1 = edk2-riscv-code.fd     32m
 pad2 = edk2-riscv-vars.fd     32m
+
+####################################################################################
+# LoongArch64
+
+[build.loongarch64.qemu]
+conf = OvmfPkg/LoongArchVirt/LoongArchVirtQemu.dsc
+arch = LOONGARCH64
+plat = LoongArchVirtQemu
+dest = ../pc-bios
+cpy1 = FV/QEMU_EFI.fd  edk2-loongarch64-code.fd
+pad1 = edk2-loongarch64-code.fd     16m
+cpy2 = FV/QEMU_VARS.fd  edk2-loongarch64-vars.fd
+pad2 = edk2-loongarch64-vars.fd     16m
-- 
2.39.1


Reply via email to