From 208aecfb3a5fee6eb5bf17e1ac9be946773928ee Mon Sep 17 00:00:00 2001 From: Xiaotian Wu Date: Tue, 19 Nov 2024 20:25:57 +0800 Subject: [PATCH] Update LoongArch virtual machine --- ...n-Remove-minimium-memory-size-limita.patch | 122 ++++++++++++++++++ ...n-Modify-loongarch-uefi-firmware-siz.patch | 62 +++++++++ edk2.spec | 18 ++- 3 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 0023-Platform-Loongson-Remove-minimium-memory-size-limita.patch create mode 100644 0024-Platform-Loongson-Modify-loongarch-uefi-firmware-siz.patch diff --git a/0023-Platform-Loongson-Remove-minimium-memory-size-limita.patch b/0023-Platform-Loongson-Remove-minimium-memory-size-limita.patch new file mode 100644 index 0000000..20aba0b --- /dev/null +++ b/0023-Platform-Loongson-Remove-minimium-memory-size-limita.patch @@ -0,0 +1,122 @@ +From ff113b5d376dd9054aefc8452e7ff04459489a44 Mon Sep 17 00:00:00 2001 +From: Bibo Mao +Date: Mon, 25 Mar 2024 10:50:28 +0800 +Subject: [PATCH 1/2] Platform/Loongson: Remove minimium memory size limitation + +Temparory stack memory on PEI is hardcoded now, also minimium memory +size 256M is hardcoded now. Here memory map table from fw cfg can be +parsed. If there is memory map entry contains pei stack, it can be +published as usable memory at PEI stage. + +Cc: Bibo Mao +Cc: Chao Li +Signed-off-by: Bibo Mao +Signed-off-by: Xianglai Li +Reviewed-by: Chao Li +--- + .../Loongson/LoongArchQemuPkg/Loongson.dec | 2 - + .../Loongson/LoongArchQemuPkg/Loongson.dsc | 6 --- + .../LoongArchQemuPkg/PlatformPei/MemDetect.c | 38 ++++++++++++++++++- + .../PlatformPei/PlatformPei.inf | 2 - + 4 files changed, 37 insertions(+), 11 deletions(-) + +diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dec b/Platform/Loongson/LoongArchQemuPkg/Loongson.dec +index e638b835e4..c2c6cc9596 100644 +--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dec ++++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dec +@@ -48,8 +48,6 @@ + + gLoongArchQemuPkgTokenSpaceGuid.PcdSecPeiTempRamBase|0|UINT64|0x0000000b + gLoongArchQemuPkgTokenSpaceGuid.PcdSecPeiTempRamSize|0|UINT32|0x0000000c +- gLoongArchQemuPkgTokenSpaceGuid.PcdUefiRamTop|0x0|UINT64|0x0000000d +- gLoongArchQemuPkgTokenSpaceGuid.PcdRamRegionsBottom|0x0|UINT64|0x0000000e + gLoongArchQemuPkgTokenSpaceGuid.PcdFlashSecFvBase|0x0|UINT64|0x0000000f + gLoongArchQemuPkgTokenSpaceGuid.PcdFlashSecFvSize|0x0|UINT32|0x00000010 + +diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc +index 58aa16d3a9..aab2ca9b28 100644 +--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc ++++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc +@@ -356,12 +356,6 @@ + gLoongArchQemuPkgTokenSpaceGuid.PcdSecPeiTempRamBase | 0x10000 + gLoongArchQemuPkgTokenSpaceGuid.PcdSecPeiTempRamSize | 0x10000 + gLoongArchQemuPkgTokenSpaceGuid.PcdDeviceTreeBase | 0x100000 +- # +- # minimal memory for uefi bios should be 512M +- # 0x00000000 - 0x10000000 +- # 0x90000000 - 0xA0000000 +- # +- gLoongArchQemuPkgTokenSpaceGuid.PcdUefiRamTop | 0x10000000 + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions | 0x06 + + gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile | { 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 } +diff --git a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/MemDetect.c b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/MemDetect.c +index 7e6a4a3aa9..7aa6fdc175 100644 +--- a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/MemDetect.c ++++ b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/MemDetect.c +@@ -40,12 +40,48 @@ PublishPeiMemory ( + UINT64 Base; + UINT64 Size; + UINT64 RamTop; ++ FIRMWARE_CONFIG_ITEM FwCfgItem; ++ UINTN FwCfgSize; ++ UINTN Processed; ++ LOONGARCH_MEMMAP_ENTRY MemoryMapEntry; + + // + // Determine the range of memory to use during PEI + // + Base = PcdGet64 (PcdSecPeiTempRamBase) + PcdGet32 (PcdSecPeiTempRamSize); +- RamTop = PcdGet64 (PcdUefiRamTop); ++ RamTop = 0; ++ ++ Status = QemuFwCfgFindFile ("etc/memmap", &FwCfgItem, &FwCfgSize); ++ if (EFI_ERROR (Status)) { ++ return Status; ++ } ++ ++ if (FwCfgSize % sizeof MemoryMapEntry != 0) { ++ return EFI_PROTOCOL_ERROR; ++ } ++ ++ QemuFwCfgSelectItem (FwCfgItem); ++ for (Processed = 0; Processed < FwCfgSize; Processed += sizeof MemoryMapEntry) { ++ QemuFwCfgReadBytes (sizeof MemoryMapEntry, &MemoryMapEntry); ++ if (MemoryMapEntry.Type != EfiAcpiAddressRangeMemory) { ++ continue; ++ } ++ ++ /* ++ * Find memory map entry where PEI temp stack is located ++ */ ++ if ((MemoryMapEntry.BaseAddr <= Base) && ++ (Base < (MemoryMapEntry.BaseAddr + MemoryMapEntry.Length))) { ++ RamTop = MemoryMapEntry.BaseAddr + MemoryMapEntry.Length; ++ break; ++ } ++ } ++ ++ if (RamTop == 0) { ++ DEBUG ((DEBUG_ERROR, "ERROR: No memory map entry contains temp stack \n")); ++ ASSERT (FALSE); ++ } ++ + Size = RamTop - Base; + + // +diff --git a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/PlatformPei.inf b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/PlatformPei.inf +index 6cc3513b63..65591a4d7b 100644 +--- a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/PlatformPei.inf ++++ b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/PlatformPei.inf +@@ -64,8 +64,6 @@ + [FixedPcd] + gLoongArchQemuPkgTokenSpaceGuid.PcdFlashDxeFvBase + gLoongArchQemuPkgTokenSpaceGuid.PcdFlashDxeFvSize +- gLoongArchQemuPkgTokenSpaceGuid.PcdRamRegionsBottom +- gLoongArchQemuPkgTokenSpaceGuid.PcdUefiRamTop + gLoongArchQemuPkgTokenSpaceGuid.PcdSecPeiTempRamBase + gLoongArchQemuPkgTokenSpaceGuid.PcdSecPeiTempRamSize + gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize +-- +2.46.0 + diff --git a/0024-Platform-Loongson-Modify-loongarch-uefi-firmware-siz.patch b/0024-Platform-Loongson-Modify-loongarch-uefi-firmware-siz.patch new file mode 100644 index 0000000..2ff691f --- /dev/null +++ b/0024-Platform-Loongson-Modify-loongarch-uefi-firmware-siz.patch @@ -0,0 +1,62 @@ +From c9cb2611ae34a79c28671a703368e88267d6cc24 Mon Sep 17 00:00:00 2001 +From: Xiaotian Wu +Date: Tue, 19 Nov 2024 19:05:49 +0800 +Subject: [PATCH 2/2] Platform/Loongson: Modify loongarch uefi firmware size + +After the loongarch flash block size is changed from 128K to 256K, +qemu requires that the UEFI firmware size be aligned with the flash block size(256K). +Otherwise, the firmware cannot be loaded, +Use the following code to resolve the old firmware loading problem: +mv QEMU_EFI.fd QEMU_EFI.fd-bak +cat QEMU_EFI.fd-bak /dev/zero | head -c 16m > ./QEMU_EFI.fd +mv QEMU_VARS.fd QEMU_VARS.fd-bak +cat QEMU_VARS.fd-bak /dev/zero | head -c 16m > ./QEMU_VARS.fd + +For the new firmware, we refer to other architecture UEFI and +set the UEFI firmware size to align with the flash block size(256K). + +So for this patch, we set the UEFI firmware size to 256K alignment. +--- + Platform/Loongson/LoongArchQemuPkg/Loongson.fdf.inc | 8 ++++---- + Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc | 4 ++-- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf.inc b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf.inc +index e30c4629f7..c31909ca9a 100644 +--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf.inc ++++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf.inc +@@ -18,12 +18,12 @@ DEFINE FD_SIZE = 0x400000 + #flash code layout + #Set Sec base address and size in flash + DEFINE SECFV_OFFSET = 0x00000000 +-DEFINE SECFV_SIZE = 0x00010000 ++DEFINE SECFV_SIZE = 0x00040000 + + #Set Pei base address and size in flash +-DEFINE PEIFV_OFFSET = 0x00010000 ++DEFINE PEIFV_OFFSET = 0x00040000 + DEFINE PEIFV_SIZE = 0x00040000 + + #Set Dxe base address and size in flash +-DEFINE DXEFV_OFFSET = 0x00050000 +-DEFINE DXEFV_SIZE = 0x00350000 ++DEFINE DXEFV_OFFSET = 0x00080000 ++DEFINE DXEFV_SIZE = 0x00380000 +diff --git a/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc b/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc +index 83ce3d8008..f34901950d 100644 +--- a/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc ++++ b/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc +@@ -10,8 +10,8 @@ + BaseAddress = 0x0 + Size = 0x1000000 + ErasePolarity = 1 +-BlockSize = 0x20000 +-NumBlocks = 128 ++BlockSize = 0x40000 ++NumBlocks = 64 + + 0x00000000|0x00040000 + #NV_VARIABLE_STORE +-- +2.46.0 + diff --git a/edk2.spec b/edk2.spec index 8d73034..9ee41a6 100644 --- a/edk2.spec +++ b/edk2.spec @@ -1,4 +1,4 @@ -%define anolis_release 5 +%define anolis_release 6 %undefine _auto_set_build_flags ExclusiveArch: x86_64 aarch64 loongarch64 @@ -38,7 +38,7 @@ Source1: ovmf-whitepaper-c770f8c.txt Source2: openssl-%{OPENSSL_VER}.tar.gz # https://github.com/ucb-bar/berkeley-softfloat-3/tree/b64af41c3276f97f0e181920400ee056b9c88037 Source3: softfloat-%{softfloat_version}.tar.xz -# https://github.com/tianocore/edk2-platforms/commit/54306d023e7d610d326d103852bc6a45c803012e +# https://github.com/tianocore/edk2-platforms/commit/7f42d4034c8f4266da691df69dce18234f752cb4 Source4: edk2-platforms-7f42d4034c8f.tar.xz Source5: https://github.com/akheron/jansson/releases/download/v2.13.1/jansson-2.13.1.tar.bz2 # https://github.com/google/brotli/tree/f4153a09f87cbb9c826d8fc12c74642bb2d879ea @@ -60,6 +60,10 @@ Source51: 51-edk2-loongarch64-verbose.json Source80: https://gitlab.com/kraxel/edk2-build-config/-/blob/master/bin/edk2-build.py Source81: edk2-build +# LoongArch patches for edk2-platforms +Source90: 0023-Platform-Loongson-Remove-minimium-memory-size-limita.patch +Source91: 0024-Platform-Loongson-Modify-loongarch-uefi-firmware-siz.patch + Patch0001: 0001-MdePkg-Add-StandardSignatureIsHygonGenuine-in-BaseCp.patch Patch0002: 0002-UefiCpuPkg-LocalApicLib-Exclude-second-SendIpi-seque.patch Patch0003: 0003-OvmfPkg-Add-CSV-secure-call-library-on-Hygon-CPU.patch @@ -243,6 +247,11 @@ cp -a -- \ %{SOURCE50} %{SOURCE51} %{SOURCE80} %{SOURCE81} \ . +# The following patches need to be applied in the Platform directory of edk2-platforms, +# so the patches must be applied after edk2-platforms is unpacked. +%{__patch} -p1 -i %{SOURCE90} +%{__patch} -p1 -i %{SOURCE91} + %build build_iso() { @@ -485,6 +494,11 @@ install -m 0644 \ %changelog +* Tue Nov 19 2024 Xiaotian Wu - 202402-6 +- Update LoongArch virtual machine +- 0023-Platform-Loongson-Remove-minimium-memory-size-limita.patch +- 0024-Platform-Loongson-Modify-loongarch-uefi-firmware-siz.patch + * Fri Aug 02 2024 lidongyue - 202402-5 - fix CVE-2023-45236 - fix CVE-2023-45237 -- Gitee