add LoongArch support

backport edk2-platform to build with edk2-2308

Signed-off-by: Xiaotian Wu <wuxiaotian@loongson.cn>
This commit is contained in:
Xiaotian Wu 2024-05-31 13:54:14 +08:00
parent 35ca8c063d
commit ec60765a8e
7 changed files with 242 additions and 2 deletions

View File

@ -0,0 +1,26 @@
From 5f72f1332ec14b1f558cab4f3ec0ce0a97d729d0 Mon Sep 17 00:00:00 2001
From: Xiaotian Wu <wuxiaotian@loongson.cn>
Date: Fri, 13 Sep 2024 10:34:32 +0800
Subject: [PATCH 1/3] Revert "Platform/Loongson/LoongArchQemuPkg: Add
ImagePropertiesRecordLib Instance"
This reverts commit 91d9680f50f1922936458bde283030f2e9459f00.
---
Platform/Loongson/LoongArchQemuPkg/Loongson.dsc | 1 -
1 file changed, 1 deletion(-)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
index 7e891ad225..42356f4abc 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
+++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
@@ -155,7 +155,6 @@
PciHostBridgeUtilityLib | OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.inf
MmuLib | Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLib.inf
FileExplorerLib | MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
- ImagePropertiesRecordLib | MdeModulePkg/Library/ImagePropertiesRecordLib/ImagePropertiesRecordLib.inf
!if $(HTTP_BOOT_ENABLE) == TRUE
HttpLib | MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.inf
--
2.45.0

View File

@ -0,0 +1,44 @@
From 877c5b3473fc02bd043f48c585a58a99d46ae58b Mon Sep 17 00:00:00 2001
From: Xiaotian Wu <wuxiaotian@loongson.cn>
Date: Fri, 13 Sep 2024 10:35:05 +0800
Subject: [PATCH 2/3] Revert "Platform/Loongson: Fix compile error"
This reverts commit ef0b6c0cb556957798c3ca5025aced871525dfae.
---
Platform/Loongson/LoongArchQemuPkg/Loongson.dsc | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
index 42356f4abc..00b28cfa50 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
+++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
@@ -179,7 +179,7 @@
#
VirtioLib | OvmfPkg/Library/VirtioLib/VirtioLib.inf
FrameBufferBltLib | MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
- QemuFwCfgLib | OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgMmioPeiLib.inf
+ QemuFwCfgLib | OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibMmio.inf
DebugLib | MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PeiServicesLib | MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
VariableFlashInfoLib | MdeModulePkg/Library/BaseVariableFlashInfoLib/BaseVariableFlashInfoLib.inf
@@ -256,7 +256,7 @@
ReportStatusCodeLib | MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
UefiScsiLib | MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
ExtractGuidedSectionLib | MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- QemuFwCfgLib | OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgMmioDxeLib.inf
+ QemuFwCfgLib | OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibMmio.inf
PciPcdProducerLib | OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.inf
[LibraryClasses.common.DXE_DRIVER]
@@ -268,7 +268,7 @@
CpuExceptionHandlerLib | UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
ExtractGuidedSectionLib | MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
QemuFwCfgS3Lib | OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
- QemuFwCfgLib | OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgMmioDxeLib.inf
+ QemuFwCfgLib | OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibMmio.inf
PciPcdProducerLib | OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.inf
PciExpressLib | MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
AcpiPlatformLib | OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf
--
2.45.0

View File

@ -0,0 +1,49 @@
From 69e129dc2faa09647294aadadca2fc8abe63f3d1 Mon Sep 17 00:00:00 2001
From: Xiaotian Wu <wuxiaotian@loongson.cn>
Date: Fri, 13 Sep 2024 10:35:51 +0800
Subject: [PATCH 3/3] Revert "LoongArchQemuPkg: auto-gen & fix SEC
ProcessLibraryConstructorList() decl"
This reverts commit a81b9f2815da1bacb91aa5ece1caa730ac5d80bb.
---
Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.c | 3 ++-
Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.inf | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.c b/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.c
index 50d898859a..3f1998c48c 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.c
+++ b/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.c
@@ -9,6 +9,7 @@
#include <PiPei.h>
+#include <Library/PeimEntryPoint.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
@@ -377,7 +378,7 @@ SecCoreStartupWithStack (
DEBUG ((DEBUG_INFO, "Entering C environment\n"));
- ProcessLibraryConstructorList ();
+ ProcessLibraryConstructorList (NULL, NULL);
DEBUG ((DEBUG_INFO,
"SecCoreStartupWithStack (0x%lx, 0x%lx)\n",
diff --git a/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.inf b/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.inf
index bb86c7c774..c0d5439d53 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.inf
+++ b/Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.inf
@@ -8,7 +8,7 @@
##
[Defines]
- INF_VERSION = 1.30
+ INF_VERSION = 0x00010005
BASE_NAME = SecMain
FILE_GUID = 57d02d4f-5a5d-4bfa-b7d6-ba0a4d2c72ce
MODULE_TYPE = SEC
--
2.45.0

View File

@ -0,0 +1,44 @@
diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/GenFw/Elf64Convert.c
index d53ecb1767..8018d68db1 100644
--- a/BaseTools/Source/C/GenFw/Elf64Convert.c
+++ b/BaseTools/Source/C/GenFw/Elf64Convert.c
@@ -1778,7 +1778,11 @@ WriteSections64 (
case R_LARCH_TLS_LD64_HI20:
case R_LARCH_TLS_GD_PC_HI20:
case R_LARCH_TLS_GD64_HI20:
+ case R_LARCH_32_PCREL:
case R_LARCH_RELAX:
+ case R_LARCH_DELETE:
+ case R_LARCH_ALIGN:
+ case R_LARCH_PCREL20_S2:
//
// These types are not used or do not require fixup.
//
@@ -2185,7 +2189,11 @@ WriteRelocations64 (
case R_LARCH_TLS_LD64_HI20:
case R_LARCH_TLS_GD_PC_HI20:
case R_LARCH_TLS_GD64_HI20:
+ case R_LARCH_32_PCREL:
case R_LARCH_RELAX:
+ case R_LARCH_DELETE:
+ case R_LARCH_ALIGN:
+ case R_LARCH_PCREL20_S2:
//
// These types are not used or do not require fixup in PE format files.
//
diff --git a/BaseTools/Source/C/GenFw/elf_common.h b/BaseTools/Source/C/GenFw/elf_common.h
index ccd32804b0..d3a5303953 100644
--- a/BaseTools/Source/C/GenFw/elf_common.h
+++ b/BaseTools/Source/C/GenFw/elf_common.h
@@ -1144,5 +1144,10 @@ typedef struct {
#define R_LARCH_TLS_LD64_HI20 96
#define R_LARCH_TLS_GD_PC_HI20 97
#define R_LARCH_TLS_GD64_HI20 98
-#define R_LARCH_RELAX 99
+#define R_LARCH_32_PCREL 99
+#define R_LARCH_RELAX 100
+#define R_LARCH_DELETE 101
+#define R_LARCH_ALIGN 102
+#define R_LARCH_PCREL20_S2 103
+
#endif /* !_SYS_ELF_COMMON_H_ */

31
edk2-loongarch64.json Normal file
View File

@ -0,0 +1,31 @@
{
"description": "UEFI firmware for LoongArch64 virtual machines",
"interface-types": [
"uefi"
],
"mapping": {
"device": "flash",
"executable": {
"filename": "/usr/share/edk2/loongarch64/QEMU_EFI-silent-pflash.raw",
"format": "raw"
},
"nvram-template": {
"filename": "/usr/share/edk2/loongarch64/vars-template-pflash.raw",
"format": "raw"
}
},
"targets": [
{
"architecture": "loongarch64",
"machines": [
"virt*"
]
}
],
"features": [
],
"tags": [
]
}

Binary file not shown.

View File

@ -7,7 +7,7 @@
Name: edk2
Version: %{stable_date}
Release: 10
Release: 11
Summary: EFI Development Kit II
License: BSD-2-Clause-Patent and OpenSSL and MIT
URL: https://github.com/tianocore/edk2
@ -17,6 +17,9 @@ Source2: brotli.%{brotli_commitid}.tar.gz
Source3: public-mipi-sys-t.%{public_mipi_sys_t_commitid}.tar.gz
Source4: edk2-aarch64-verbose-raw.json
Source5: edk2-ovmf-x64-nosb.json
Source6: edk2-loongarch64.json
# git archive from https://github.com/tianocore/edk2-platforms/tree/35bca3ca71c004b7f3d93c6f33724796c6b1bf0b
Source7: edk2-platforms-35bca3ca71c0.tar.xz
patch0: 0001-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch
patch1: 0002-add-Wno-maybe-uninitialized-to-fix-build-error.patch
@ -79,6 +82,14 @@ patch48: 0048-Add-a-test-for-ALPN-and-NPN.patch
# Fix CVE-2024-6119
patch49: 0049-Avoid-type-errors-in-EAI-related-name-check-logic.patch
# revert these patches for edk2-platforms to build with edk2-2308
patch50: 0050-Revert-Platform-Loongson-LoongArchQemuPkg-Add-ImageP.patch
patch51: 0051-Revert-Platform-Loongson-Fix-compile-error.patch
patch52: 0052-Revert-LoongArchQemuPkg-auto-gen-fix-SEC-ProcessLibr.patch
# Fix edk2 build errror with gcc-14
patch53: 0053-relax_edk2_gcc14.patch
BuildRequires: acpica-tools gcc gcc-c++ libuuid-devel python3 bc nasm python3-unversioned-command isl
%description
@ -134,16 +145,25 @@ BuildArch: noarch
EFI Development Kit II Open Virtual Machine Firmware (riscv64)
%endif
%ifarch loongarch64
%package ovmf-loongarch64
Summary: Open Virtual Machine Firmware
BuildArch: noarch
%description ovmf-loongarch64
EFI Development Kit II Open Virtual Machine Firmware (loongarch64)
%endif
%prep
%setup -n edk2-%{release_tag}
tar -xf %{SOURCE1} -C CryptoPkg/Library/OpensslLib/openssl --strip-components=1
tar -xf %{SOURCE2} -C MdeModulePkg/Library/BrotliCustomDecompressLib/brotli --strip-components=1
tar -xf %{SOURCE2} -C BaseTools/Source/C/BrotliCompress/brotli --strip-components=1
tar -xf %{SOURCE3} -C MdePkg/Library/MipiSysTLib/mipisyst --strip-components=1
tar -xf %{SOURCE7} edk2-platforms/Platform --strip-components=1
%autopatch -p1
cp -a -- %{SOURCE4} %{SOURCE5} .
cp -a -- %{SOURCE4} %{SOURCE5} %{SOURCE6} .
%build
NCPUS=`/usr/bin/getconf _NPROCESSORS_ONLN`
@ -176,6 +196,10 @@ BUILD_OPTION="$BUILD_OPTION -D TPM_CONFIG_ENABLE=TRUE"
BUILD_OPTION="-t GCC5 -n $NCPUS -b RELEASE -a RISCV64 -p OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc -D SECURE_BOOT_ENABLE=TRUE -D TPM_ENABLE=TRUE -D TPM_CONFIG_ENABLE=TRUE"
%endif
%ifarch loongarch64
BUILD_OPTION="-t GCC5 -n $NCPUS -b RELEASE -a LOONGARCH64 -p Platform/Loongson/LoongArchQemuPkg/Loongson.dsc -D SECURE_BOOT_ENABLE=TRUE -D TPM_ENABLE=TRUE -D TPM_CONFIG_ENABLE=TRUE"
%endif
build $BUILD_OPTION
%install
@ -240,6 +264,15 @@ chmod +x %{buildroot}%{_bindir}/Rsa2048Sha256GenerateKeys
cp Build/RiscVVirtQemu/RELEASE_GCC5/FV/RISCV_VIRT_VARS.fd %{buildroot}/usr/share/%{name}/ovmf-riscv64
%endif
%ifarch loongarch64
mkdir -p %{buildroot}/usr/share/%{name}/loongarch64
cp Build/LoongArchQemu/RELEASE_*/FV/*.fd %{buildroot}/usr/share/%{name}/loongarch64
dd of="%{buildroot}/usr/share/%{name}/loongarch64/QEMU_EFI-silent-pflash.raw" if="/dev/zero" bs=1M count=4
dd of="%{buildroot}/usr/share/%{name}/loongarch64/QEMU_EFI-silent-pflash.raw" if="%{buildroot}/usr/share/%{name}/loongarch64/QEMU_EFI.fd" conv=notrunc
dd of="%{buildroot}/usr/share/%{name}/loongarch64/vars-template-pflash.raw" if="/dev/zero" bs=1M count=16
install -m 0644 edk2-loongarch64.json %{buildroot}%{_datadir}/qemu/firmware/50-edk2-loongarch64.json
%endif
%files devel
%license License.txt
%license License-History.txt
@ -316,7 +349,20 @@ chmod +x %{buildroot}%{_bindir}/Rsa2048Sha256GenerateKeys
%{_datadir}/%{name}/ovmf-riscv64
%endif
%ifarch loongarch64
%license OvmfPkg/License.txt
%license LICENSE.openssl
%files ovmf-loongarch64
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/loongarch64
%{_datadir}/qemu/firmware/50-edk2-loongarch64.json
%endif
%changelog
* Fri Sep 13 2024 Xiaotian Wu <wuxiaotian@loongson.cn> - 202308-11
- add LoongArch support
- backport edk2-platform to build with edk2-2308
* Mon Sep 9 2024 shenyage<shenyage1@huawei.com> - 202308-10
- fix CVE-2024-6119