* [edk2-platforms][PATCH V4 0/8] Loongarch add flash device.
@ 2023-01-13 3:17 xianglai
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 1/8] Platform/Loongson: Add bootmode support xianglai
` (7 more replies)
0 siblings, 8 replies; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
This is a patch series that contains:
1.Loongarch add flash device driver.
2.Loongarch add nvme device driver.
3.Optimize the mmu lib of loongarch.
4.Enable zero address protection.
v4 changes:
-Modify the commit messgae of patch1 and patch2.
v3 changes:
- Split flash driver patch.
v2 changes:
- Split the MMU lib-related patches further.
- Remove the for loop of flash information lookup
in VirtNorFlashPlatformLib Because the Loongarch
virtual machine only emulates one flash .
- Add the necessary comments in VirtNorFlashPlatformLib.
- Remove the hard coding associated with the Flash base address.
- Optimize the process of converting huge pages to
page table entries in MMU lib.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
xianglai li (8):
Platform/Loongson: Add bootmode support.
Platform/Loongson: Add nvme device driver for loongarch.
Platform/Loongson: Add pflash driver.
Platform/Loongson: Support pflash for loongarch.
Platform/Loongson: Modify the page table entry access priority.
Platform/Loongson: Optimize page table entry null determination.
Platform/Loongson: Optimize the huge page and page entry conversion.
Platform/Loongson: Enable zero address protection.
.../Library/MmuLib/MmuBaseLibPei.inf | 2 +
.../Library/MmuLib/MmuLibCore.c | 119 +++++++++++----
.../Library/MmuLib/MmuLibCorePei.c | 5 +
.../LoongArchQemuPkg/Library/MmuLib/page.h | 5 +-
.../Library/NorFlashQemuLib/NorFlashQemuLib.c | 141 ++++++++++++++++++
.../NorFlashQemuLib/NorFlashQemuLib.inf | 43 ++++++
.../Loongson/LoongArchQemuPkg/Loongson.dsc | 22 ++-
.../Loongson/LoongArchQemuPkg/Loongson.fdf | 8 +-
.../LoongArchQemuPkg/PlatformPei/Platform.c | 5 +
.../LoongArchQemuPkg/VarStore.fdf.inc | 67 +++++++++
10 files changed, 375 insertions(+), 42 deletions(-)
create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
create mode 100644 Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc
--
2.31.1
^ permalink raw reply [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 1/8] Platform/Loongson: Add bootmode support.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 2/8] Platform/Loongson: Add nvme device driver for loongarch xianglai
` (6 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Add bootmode support in PEI phase.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c
index 32b6518f8f..84bb8e8a6d 100644
--- a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c
+++ b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c
@@ -53,6 +53,8 @@ CONST EFI_PEI_PPI_DESCRIPTOR mPpiListBootMode = {
NULL
};
+STATIC EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION;
+
/**
Create Reserved type memory range hand off block.
@@ -417,6 +419,9 @@ InitializePlatform (
DEBUG ((DEBUG_INFO, "Platform PEIM Loaded\n"));
+ Status = PeiServicesSetBootMode (mBootMode);
+ ASSERT_EFI_ERROR (Status);
+
Status = PeiServicesInstallPpi (&mPpiListBootMode);
ASSERT_EFI_ERROR (Status);
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 2/8] Platform/Loongson: Add nvme device driver for loongarch.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 1/8] Platform/Loongson: Add bootmode support xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 3/8] Platform/Loongson: Add pflash driver xianglai
` (5 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Add nvme device driver support loongarch qemu virt machine.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
Platform/Loongson/LoongArchQemuPkg/Loongson.dsc | 5 +++++
Platform/Loongson/LoongArchQemuPkg/Loongson.fdf | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
index 2d63f7d168..a9b5c8c514 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
+++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
@@ -550,6 +550,11 @@
MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
+ #
+ # NVME Driver
+ #
+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
+
#
# SMBIOS Support
#
diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
index 784f255910..ee89097344 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
+++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
@@ -180,6 +180,11 @@ INF OvmfPkg/SataControllerDxe/SataControllerDxe.inf
INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
+#
+# NVME
+#
+INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
+
#
# Usb Support
#
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 3/8] Platform/Loongson: Add pflash driver.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 1/8] Platform/Loongson: Add bootmode support xianglai
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 2/8] Platform/Loongson: Add nvme device driver for loongarch xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 4/8] Platform/Loongson: Support pflash for loongarch xianglai
` (4 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Add pflash driver for loongarch.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
.../Library/NorFlashQemuLib/NorFlashQemuLib.c | 141 ++++++++++++++++++
.../NorFlashQemuLib/NorFlashQemuLib.inf | 43 ++++++
2 files changed, 184 insertions(+)
create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
new file mode 100644
index 0000000000..2e0bf3cef0
--- /dev/null
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
@@ -0,0 +1,141 @@
+/** @file
+
+ Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/VirtNorFlashPlatformLib.h>
+
+#include <Protocol/FdtClient.h>
+
+#define QEMU_NOR_BLOCK_SIZE SIZE_128KB
+
+EFI_STATUS
+VirtNorFlashPlatformInitialization (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+STATIC VIRT_NOR_FLASH_DESCRIPTION mNorFlashDevices;
+
+EFI_STATUS
+VirtNorFlashPlatformGetDevices (
+ OUT VIRT_NOR_FLASH_DESCRIPTION **NorFlashDescriptions,
+ OUT UINT32 *Count
+ )
+{
+ FDT_CLIENT_PROTOCOL *FdtClient;
+ INT32 Node;
+ EFI_STATUS Status;
+ EFI_STATUS FindNodeStatus;
+ CONST UINT32 *Reg;
+ UINT32 PropSize;
+ UINT64 Base;
+ UINT64 Size;
+
+ Status = gBS->LocateProtocol (
+ &gFdtClientProtocolGuid,
+ NULL,
+ (VOID **)&FdtClient
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ FindNodeStatus = FdtClient->FindCompatibleNode (
+ FdtClient,
+ "cfi-flash",
+ &Node
+ );
+ ASSERT_EFI_ERROR (FindNodeStatus);
+
+ Status = FdtClient->GetNodeProperty (
+ FdtClient,
+ Node,
+ "reg",
+ (CONST VOID **)&Reg,
+ &PropSize
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((
+ DEBUG_ERROR,
+ "%a: GetNodeProperty () failed (Status == %r)\n",
+ __FUNCTION__,
+ Status
+ ));
+ return Status;
+ }
+
+ ASSERT ((PropSize % (4 * sizeof (UINT32))) == 0);
+
+ if (PropSize < (4 * sizeof (UINT32))) {
+ DEBUG ((
+ DEBUG_ERROR,
+ "%a: reg node size(%d) is too small \n",
+ __FUNCTION__,
+ PropSize
+ ));
+ return EFI_NOT_FOUND;
+ }
+
+ Base = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[0]));
+ Size = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[2]));
+
+ mNorFlashDevices.DeviceBaseAddress = (UINTN)Base;
+ mNorFlashDevices.RegionBaseAddress = (UINTN)Base;
+ mNorFlashDevices.Size = (UINTN)Size;
+ mNorFlashDevices.BlockSize = QEMU_NOR_BLOCK_SIZE;
+
+ Status = PcdSet32S (PcdFlashNvStorageVariableBase, Base);
+ ASSERT_EFI_ERROR (Status);
+
+ /*
+ * Base is the value of PcdFlashNvStorageVariableBase,
+ * PcdFlashNvStorageFtwWorkingBase can be got by
+ * PcdFlashNvStorageVariableBase + PcdFlashNvStorageVariableSize
+ */
+ Base += PcdGet32 (PcdFlashNvStorageVariableSize);
+ Status = PcdSet32S (PcdFlashNvStorageFtwWorkingBase, Base);
+ ASSERT_EFI_ERROR (Status);
+
+ /*
+ * Now,Base is the value of PcdFlashNvStorageFtwWorkingBase,
+ * PcdFlashNvStorageFtwSpareBase can be got by
+ * PcdFlashNvStorageFtwWorkingBase + PcdFlashNvStorageFtwWorkingSize.
+ */
+ Base += PcdGet32 (PcdFlashNvStorageFtwWorkingSize);
+ Status = PcdSet32S (PcdFlashNvStorageFtwSpareBase, Base);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // UEFI takes ownership of the NOR flash, and exposes its functionality
+ // through the UEFI Runtime Services GetVariable, SetVariable, etc. This
+ // means we need to disable it in the device tree to prevent the OS from
+ // attaching its device driver as well.
+ // Note that this also hides other flash banks, but the only other flash
+ // bank we expect to encounter is the one that carries the UEFI executable
+ // code, which is not intended to be guest updatable, and is usually backed
+ // in a readonly manner by QEMU anyway.
+ //
+ Status = FdtClient->SetNodeProperty (
+ FdtClient,
+ Node,
+ "status",
+ "disabled",
+ sizeof ("disabled")
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_WARN, "Failed to set NOR flash status to 'disabled'\n"));
+ }
+
+ *NorFlashDescriptions = &mNorFlashDevices;
+ *Count = 1;
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
new file mode 100644
index 0000000000..da05ca0898
--- /dev/null
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
@@ -0,0 +1,43 @@
+## @file
+#
+# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = NorFlashQemuLib
+ FILE_GUID = 339B7829-4C5F-4EFC-B2DD-5050E530DECE
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = VirtNorFlashPlatformLib
+
+[Sources.common]
+ NorFlashQemuLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ EmbeddedPkg/EmbeddedPkg.dec
+ OvmfPkg/OvmfPkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+ UefiBootServicesTableLib
+
+[Protocols]
+ gFdtClientProtocolGuid ## CONSUMES
+
+[Depex]
+ gFdtClientProtocolGuid
+
+[Pcd]
+gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
+gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
+gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
+gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
+gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
+gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 4/8] Platform/Loongson: Support pflash for loongarch.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
` (2 preceding siblings ...)
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 3/8] Platform/Loongson: Add pflash driver xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 5/8] Platform/Loongson: Modify the page table entry access priority xianglai
` (3 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Support pflash for loongarch.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
.../Loongson/LoongArchQemuPkg/Loongson.dsc | 15 ++---
.../Loongson/LoongArchQemuPkg/Loongson.fdf | 3 +-
.../LoongArchQemuPkg/VarStore.fdf.inc | 67 +++++++++++++++++++
3 files changed, 76 insertions(+), 9 deletions(-)
create mode 100644 Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc
diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
index a9b5c8c514..05913db144 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
+++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
@@ -175,6 +175,7 @@
DebugLib | MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PeiServicesLib | MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
VariableFlashInfoLib | MdeModulePkg/Library/BaseVariableFlashInfoLib/BaseVariableFlashInfoLib.inf
+ VirtNorFlashPlatformLib | Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
[LibraryClasses.common.SEC]
PcdLib | MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
@@ -360,9 +361,9 @@
#
!include NetworkPkg/NetworkPcds.dsc.inc
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize | 0x10000
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize | 0x20000
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize | 0x10000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize | 0x40000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize | 0x40000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize | 0x40000
################################################################################
#
@@ -373,6 +374,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase | 0
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 | 0
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 | 0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase | 0
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase | 0
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 | 0
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved | 0
@@ -471,15 +473,12 @@
#
# Variable
#
-
- OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {
- <LibraryClasses>
- PlatformFvbLib|OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.inf
- }
+ OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf
MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
+ NULL|EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.inf
BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
}
diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
index ee89097344..675d86094c 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
+++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
@@ -30,6 +30,7 @@ $(DXEFV_OFFSET)|$(DXEFV_SIZE)
gLoongArchQemuPkgTokenSpaceGuid.PcdFlashDxeFvBase|gLoongArchQemuPkgTokenSpaceGuid.PcdFlashDxeFvSize
FV = FVMAIN_COMPACT
+!include VarStore.fdf.inc
#####################################################################################################
[FV.SECFV]
FvNameGuid = 587d4265-5e71-41da-9c35-4258551f1e22
@@ -135,7 +136,7 @@ INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
#
# Variable
#
-INF OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf
+INF OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
#
diff --git a/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc b/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc
new file mode 100644
index 0000000000..83ce3d8008
--- /dev/null
+++ b/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc
@@ -0,0 +1,67 @@
+## @file
+#
+# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[FD.QEMU_VARS]
+BaseAddress = 0x0
+Size = 0x1000000
+ErasePolarity = 1
+BlockSize = 0x20000
+NumBlocks = 128
+
+0x00000000|0x00040000
+#NV_VARIABLE_STORE
+DATA = {
+ ## This is the EFI_FIRMWARE_VOLUME_HEADER
+ # ZeroVector []
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ # FileSystemGuid: gEfiSystemNvDataFvGuid =
+ # { 0xFFF12B8D, 0x7696, 0x4C8B,
+ # { 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50 }}
+ 0x8D, 0x2B, 0xF1, 0xFF, 0x96, 0x76, 0x8B, 0x4C,
+ 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50,
+ # FvLength: 0xC0000
+ 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
+ # Signature "_FVH" # Attributes
+ 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00,
+ # HeaderLength # CheckSum # ExtHeaderOffset #Reserved #Revision
+ 0x48, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x02,
+ # Blockmap[0]: 0x3 Blocks * 0x40000 Bytes / Block
+ 0x3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ # Blockmap[1]: End
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ ## This is the VARIABLE_STORE_HEADER
+ # It is compatible with SECURE_BOOT_ENABLE == FALSE as well.
+ # Signature: gEfiAuthenticatedVariableGuid =
+ # { 0xaaf32c78, 0x947b, 0x439a,
+ # { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 }}
+ 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43,
+ 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92,
+ # Size: 0x40000 (gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize) -
+ # 0x48 (size of EFI_FIRMWARE_VOLUME_HEADER) = 0x3ffb8
+ # This can speed up the Variable Dispatch a bit.
+ 0xB8, 0xFF, 0x03, 0x00,
+ # FORMATTED: 0x5A #HEALTHY: 0xFE #Reserved: UINT16 #Reserved1: UINT32
+ 0x5A, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+}
+
+0x00040000|0x00040000
+#NV_FTW_WORKING
+DATA = {
+ # EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER->Signature = gEdkiiWorkingBlockSignatureGuid =
+ # { 0x9e58292b, 0x7c68, 0x497d, { 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95 }}
+ 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49,
+ 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95,
+ # Crc:UINT32 #WorkingBlockValid:1, WorkingBlockInvalid:1, Reserved
+ 0x5b, 0xe7, 0xc6, 0x86, 0xFE, 0xFF, 0xFF, 0xFF,
+ # WriteQueueSize: UINT64
+ 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+}
+
+0x00080000|0x00040000
+#NV_FTW_SPARE
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 5/8] Platform/Loongson: Modify the page table entry access priority.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
` (3 preceding siblings ...)
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 4/8] Platform/Loongson: Support pflash for loongarch xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 6/8] Platform/Loongson: Optimize page table entry null determination xianglai
` (2 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Modify the page table entry access priority
When the Page table properties are set.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
index b932e3d568..9e2bd3344a 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
@@ -671,7 +671,7 @@ EfiAttributeToLoongArchAttribute (
IN UINTN EfiAttributes
)
{
- UINTN LoongArchAttributes = PAGE_VALID | PAGE_DIRTY | CACHE_CC | PAGE_USER | PAGE_GLOBAL;
+ UINTN LoongArchAttributes = PAGE_VALID | PAGE_DIRTY | PLV_KERNEL | PAGE_GLOBAL;
switch (EfiAttributes & EFI_MEMORY_CACHETYPE_MASK) {
case EFI_MEMORY_UC:
LoongArchAttributes |= CACHE_SUC;
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 6/8] Platform/Loongson: Optimize page table entry null determination.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
` (4 preceding siblings ...)
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 5/8] Platform/Loongson: Modify the page table entry access priority xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 7/8] Platform/Loongson: Optimize the huge page and page entry conversion xianglai
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 8/8] Platform/Loongson: Enable zero address protection xianglai
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Modify the null judgment condition of page table entries.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
index 6ab07e7900..84c7c13919 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
@@ -275,6 +275,6 @@ pte_none (
IN PTE pte
)
{
- return (!(PTE_VAL(pte) & (~PAGE_GLOBAL)));
+ return (!(PTE_VAL(pte) & (~PAGE_VALID)));
}
#endif // PAGE_H_
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 7/8] Platform/Loongson: Optimize the huge page and page entry conversion.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
` (5 preceding siblings ...)
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 6/8] Platform/Loongson: Optimize page table entry null determination xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 8/8] Platform/Loongson: Enable zero address protection xianglai
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Optimize the process of converting huge pages
to page table entries.
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
.../Library/MmuLib/MmuLibCore.c | 109 +++++++++++++-----
.../LoongArchQemuPkg/Library/MmuLib/page.h | 3 +
2 files changed, 82 insertions(+), 30 deletions(-)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
index 9e2bd3344a..dac38c63f2 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
@@ -449,6 +449,29 @@ GetPteAddress (
return PteOffset (Pmd, Address);
}
+/**
+ Gets the Attributes of Huge Page.
+
+ @param Pmd A pointer to the page middle directory.
+
+ @retval Value of Attributes.
+**/
+UINTN
+GetHugePageAttributes (
+ IN PMD *Pmd
+ )
+{
+ UINTN Attributes;
+ UINTN GlobalFlag;
+ UINTN HugeVal = PMD_VAL(*Pmd);
+
+ Attributes = HugeVal & (~HUGEP_PAGE_MASK);
+ GlobalFlag = ((Attributes & (1 << PAGE_HGLOBAL_SHIFT)) >> PAGE_HGLOBAL_SHIFT) << PAGE_GLOBAL_SHIFT;
+ Attributes &= ~(1 << PAGE_HGLOBAL_SHIFT);
+ Attributes |= GlobalFlag;
+ return Attributes;
+}
+
/**
Establishes a page table entry based on the specified memory region.
@@ -477,13 +500,13 @@ MemoryMapPteRange (
return EFI_OUT_OF_RESOURCES;
}
+ DEBUG ((DEBUG_VERBOSE,
+ "%a %d Address %p End %p Attributes %llx\n",
+ __func__, __LINE__, Address, End, Attributes));
+
do {
UpDate = FALSE;
PteVal = MAKE_PTE (Address, Attributes);
- DEBUG ((DEBUG_VERBOSE,
- "%a %d Address %p PGD_INDEX %p PUD_INDEX %p PMD_INDEX %p PTE_INDEX %p MAKE_PTE %p\n",
- __func__, __LINE__, Address, PGD_INDEX (Address), PUD_INDEX (Address), PMD_INDEX (Address),
- PTE_INDEX (Address), PteVal));
if ((!pte_none (*Pte)) &&
(PTE_VAL(*Pte) != PTE_VAL(PteVal)))
@@ -500,6 +523,55 @@ MemoryMapPteRange (
return EFI_SUCCESS;
}
+/**
+ Convert Huge Page to Page.
+
+ @param Pmd A pointer to the page middle directory.
+ @param Address The memory space start address.
+ @param End The end address of the memory space.
+ @param Attributes Memory space Attributes.
+
+ @retval EFI_SUCCESS The page table entry was created successfully.
+ @retval EFI_OUT_OF_RESOURCES Page table entry establishment failed due to resource exhaustion.
+**/
+EFI_STATUS
+ConvertHugePageToPage (
+ IN PMD *Pmd,
+ IN UINTN Address,
+ IN UINTN End,
+ IN UINTN Attributes
+ )
+{
+ UINTN OldAttributes;
+ UINTN HugePageEnd;
+ UINTN HugePageStart;
+ EFI_STATUS Status;
+
+ if ((pmd_none (*Pmd)) ||
+ (!IS_HUGE_PAGE (Pmd->PmdVal)))
+ {
+ Status |= MemoryMapPteRange (Pmd, Address, End, Attributes);
+ } else {
+ OldAttributes = GetHugePageAttributes(Pmd);
+ SetPmd (Pmd, (PTE *)PcdGet64 (PcdInvalidPte));
+ HugePageStart = Address & PMD_MASK;
+ HugePageEnd = HugePageStart + HUGE_PAGE_SIZE;
+ ASSERT (HugePageEnd >= End);
+
+ if (Address > HugePageStart) {
+ Status |= MemoryMapPteRange (Pmd, HugePageStart, Address, OldAttributes);
+ }
+
+ Status |= MemoryMapPteRange (Pmd, Address, End, Attributes);
+
+ if (End < HugePageEnd) {
+ Status |= MemoryMapPteRange (Pmd, End, HugePageEnd, OldAttributes);
+ }
+ }
+
+ return Status;
+}
+
/**
Establishes a page middle directory based on the specified memory region.
@@ -520,10 +592,7 @@ MemoryMapPmdRange (
)
{
PMD *Pmd;
- PTE *Pte;
UINTN Next;
- UINTN AddressStart_HugePage;
- UINTN AddressEnd_HugePage;
Pmd = PmdAllocGet (Pud, Address);
if (!Pmd) {
@@ -534,7 +603,7 @@ MemoryMapPmdRange (
Next = PMD_ADDRESS_END (Address, End);
if (((Address & (~PMD_MASK)) == 0) &&
((Next & (~PMD_MASK)) == 0) &&
- (pmd_none (*Pmd)))
+ (pmd_none (*Pmd) || IS_HUGE_PAGE (Pmd->PmdVal)))
{
DEBUG ((DEBUG_VERBOSE,
"%a %d Address %p PGD_INDEX %p PUD_INDEX %p PMD_INDEX %p MAKE_HUGE_PTE %p\n",
@@ -543,28 +612,7 @@ MemoryMapPmdRange (
SetPmd (Pmd, (PTE *)MAKE_HUGE_PTE (Address, Attributes));
} else {
- if ((pmd_none (*Pmd)) ||
- ((!pmd_none (*Pmd)) &&
- (!IS_HUGE_PAGE (Pmd->PmdVal))))
- {
- if (MemoryMapPteRange (Pmd, Address, Next, Attributes)) {
- return EFI_OUT_OF_RESOURCES;
- }
- } else {
- SetPmd (Pmd, (PTE *)PcdGet64 (PcdInvalidPte));
- AddressStart_HugePage = Address & PMD_MASK;
- AddressEnd_HugePage = AddressStart_HugePage + HUGE_PAGE_SIZE;
- if (MemoryMapPteRange (Pmd, AddressStart_HugePage, AddressEnd_HugePage, Attributes)) {
- return EFI_OUT_OF_RESOURCES;
- }
- Pte = GetPteAddress (AddressStart_HugePage);
- if (Pte == NULL) {
- continue ;
- }
- if (AddressEnd_HugePage > End) {
- Next = End;
- }
- }
+ ConvertHugePageToPage (Pmd, Address, Next, Attributes);
}
} while (Pmd++, Address = Next, Address != End);
@@ -788,6 +836,7 @@ LoongArchSetMemoryAttributes (
Attributes = EfiAttributeToLoongArchAttribute (Attributes);
DEBUG ((DEBUG_VERBOSE, "%a %d %p %p %p.\n", __func__, __LINE__, BaseAddress , Length, Attributes));
MemoryMapPageRange (BaseAddress, BaseAddress + Length, Attributes);
+ DEBUG ((DEBUG_VERBOSE, "%a %d end.\n", __func__, __LINE__));
return EFI_SUCCESS;
}
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
index 84c7c13919..927aeb018d 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
@@ -42,6 +42,9 @@
#define PFN_MASK (~(((UINTN)(1) << (EFI_PAGE_SHIFT)) - 1) & \
(((UINTN)(1) << (PAGE_PFN_END_SHIFT)) - 1))
+#define HUGEP_PAGE_MASK (~(((UINTN)(1) << (PMD_SHIFT)) - 1) & \
+ (((UINTN)(1) << (PAGE_PFN_END_SHIFT)) - 1))
+
typedef struct { UINTN PgdVal; } PGD;
typedef struct { UINTN PudVal; } PUD;
typedef struct { UINTN PmdVal; } PMD;
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [edk2-platforms][PATCH V4 8/8] Platform/Loongson: Enable zero address protection.
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
` (6 preceding siblings ...)
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 7/8] Platform/Loongson: Optimize the huge page and page entry conversion xianglai
@ 2023-01-13 3:17 ` xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
7 siblings, 1 reply; 17+ messages in thread
From: xianglai @ 2023-01-13 3:17 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Bibo Mao, Chao Li, Leif Lindholm, Liming Gao,
Michael D Kinney
Set the 0 page property to unreadable, non-writable, non-executable
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Chao Li <lichao@loongson.cn>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: xianglai li <lixianglai@loongson.cn>
---
.../LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf | 2 ++
.../Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c | 8 +++++++-
.../LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c | 5 +++++
Platform/Loongson/LoongArchQemuPkg/Loongson.dsc | 2 ++
4 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf
index 12848eecfe..d7ab37eea4 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf
@@ -28,6 +28,7 @@
MdePkg/MdePkg.dec
Platform/Loongson/LoongArchQemuPkg/Loongson.dec
OvmfPkg/OvmfPkg.dec
+ MdeModulePkg/MdeModulePkg.dec
[PCD]
gLoongArchQemuPkgTokenSpaceGuid.PcdSwapPageDir
@@ -38,6 +39,7 @@
gLoongArchQemuPkgTokenSpaceGuid.PcdFlashSecFvSize
gLoongArchQemuPkgTokenSpaceGuid.PcdFlashSecFvBase
gLoongArchQemuPkgTokenSpaceGuid.PcdRamSize
+ gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask
[LibraryClasses]
MemoryAllocationLib
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
index dac38c63f2..a45bcbdb6d 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
@@ -735,10 +735,16 @@ EfiAttributeToLoongArchAttribute (
}
// Write protection attributes
- if ((EfiAttributes & EFI_MEMORY_RO) != 0) {
+ if (((EfiAttributes & EFI_MEMORY_RO) != 0) ||
+ ((EfiAttributes & EFI_MEMORY_WP) != 0))
+ {
LoongArchAttributes &= ~PAGE_DIRTY;
}
+ if (EfiAttributes & EFI_MEMORY_RP) {
+ LoongArchAttributes |= PAGE_NO_READ;
+ }
+
//eXecute protection attribute
if ((EfiAttributes & EFI_MEMORY_XP) != 0) {
LoongArchAttributes |= PAGE_NO_EXEC;
diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c
index 32a7fc0beb..a21233e796 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c
+++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c
@@ -21,6 +21,7 @@
#include <Library/QemuFwCfgLib.h>
#include "MmuLibCore.h"
#include <Library/CacheMaintenanceLib.h>
+#include <Library/MmuLib.h>
/**
Return the Virtual Memory Map of your platform
@@ -170,6 +171,10 @@ ConfigureMmu (VOID)
MemoryTable++;
}
+ if (PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT0) {
+ LoongArchSetMemoryAttributes (0, EFI_PAGE_SIZE, EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_WP);
+ }
+
TlbReEntry = AllocatePages (1);
if (TlbReEntry == NULL) {
goto FreeTranslationTable;
diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
index 05913db144..13145cf051 100644
--- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
+++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
@@ -365,6 +365,8 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize | 0x40000
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize | 0x40000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask | 1
+
################################################################################
#
# Pcd Dynamic Section - list of all EDK II PCD Entries defined by this Platform
--
2.31.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 1/8] Platform/Loongson: Add bootmode support.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 1/8] Platform/Loongson: Add bootmode support xianglai
@ 2023-01-16 3:22 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:22 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 1388 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Add bootmode support in PEI phase.
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c
> index 32b6518f8f..84bb8e8a6d 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c
> +++ b/Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c
> @@ -53,6 +53,8 @@ CONST EFI_PEI_PPI_DESCRIPTOR mPpiListBootMode = {
> NULL
> };
>
> +STATIC EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION;
> +
> /**
> Create Reserved type memory range hand off block.
>
> @@ -417,6 +419,9 @@ InitializePlatform (
>
> DEBUG ((DEBUG_INFO, "Platform PEIM Loaded\n"));
>
> + Status = PeiServicesSetBootMode (mBootMode);
> + ASSERT_EFI_ERROR (Status);
> +
> Status = PeiServicesInstallPpi (&mPpiListBootMode);
> ASSERT_EFI_ERROR (Status);
>
[-- Attachment #2: Type: text/html, Size: 2639 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 2/8] Platform/Loongson: Add nvme device driver for loongarch.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 2/8] Platform/Loongson: Add nvme device driver for loongarch xianglai
@ 2023-01-16 3:22 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:22 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 1750 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Add nvme device driver support loongarch qemu virt machine.
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> Platform/Loongson/LoongArchQemuPkg/Loongson.dsc | 5 +++++
> Platform/Loongson/LoongArchQemuPkg/Loongson.fdf | 5 +++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> index 2d63f7d168..a9b5c8c514 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> +++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> @@ -550,6 +550,11 @@
> MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
> MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
>
> + #
> + # NVME Driver
> + #
> + MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
> +
> #
> # SMBIOS Support
> #
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
> index 784f255910..ee89097344 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
> +++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
> @@ -180,6 +180,11 @@ INF OvmfPkg/SataControllerDxe/SataControllerDxe.inf
> INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
> INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
>
> +#
> +# NVME
> +#
> +INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
> +
> #
> # Usb Support
> #
[-- Attachment #2: Type: text/html, Size: 2967 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 3/8] Platform/Loongson: Add pflash driver.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 3/8] Platform/Loongson: Add pflash driver xianglai
@ 2023-01-16 3:22 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:22 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 7403 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Add pflash driver for loongarch.
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> .../Library/NorFlashQemuLib/NorFlashQemuLib.c | 141 ++++++++++++++++++
> .../NorFlashQemuLib/NorFlashQemuLib.inf | 43 ++++++
> 2 files changed, 184 insertions(+)
> create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
> create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
> new file mode 100644
> index 0000000000..2e0bf3cef0
> --- /dev/null
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
> @@ -0,0 +1,141 @@
> +/** @file
> +
> + Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +
> +#include <Library/BaseLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Library/VirtNorFlashPlatformLib.h>
> +
> +#include <Protocol/FdtClient.h>
> +
> +#define QEMU_NOR_BLOCK_SIZE SIZE_128KB
> +
> +EFI_STATUS
> +VirtNorFlashPlatformInitialization (
> + VOID
> + )
> +{
> + return EFI_SUCCESS;
> +}
> +
> +STATIC VIRT_NOR_FLASH_DESCRIPTION mNorFlashDevices;
> +
> +EFI_STATUS
> +VirtNorFlashPlatformGetDevices (
> + OUT VIRT_NOR_FLASH_DESCRIPTION **NorFlashDescriptions,
> + OUT UINT32 *Count
> + )
> +{
> + FDT_CLIENT_PROTOCOL *FdtClient;
> + INT32 Node;
> + EFI_STATUS Status;
> + EFI_STATUS FindNodeStatus;
> + CONST UINT32 *Reg;
> + UINT32 PropSize;
> + UINT64 Base;
> + UINT64 Size;
> +
> + Status = gBS->LocateProtocol (
> + &gFdtClientProtocolGuid,
> + NULL,
> + (VOID **)&FdtClient
> + );
> + ASSERT_EFI_ERROR (Status);
> +
> + FindNodeStatus = FdtClient->FindCompatibleNode (
> + FdtClient,
> + "cfi-flash",
> + &Node
> + );
> + ASSERT_EFI_ERROR (FindNodeStatus);
> +
> + Status = FdtClient->GetNodeProperty (
> + FdtClient,
> + Node,
> + "reg",
> + (CONST VOID **)&Reg,
> + &PropSize
> + );
> + if (EFI_ERROR (Status)) {
> + DEBUG ((
> + DEBUG_ERROR,
> + "%a: GetNodeProperty () failed (Status == %r)\n",
> + __FUNCTION__,
> + Status
> + ));
> + return Status;
> + }
> +
> + ASSERT ((PropSize % (4 * sizeof (UINT32))) == 0);
> +
> + if (PropSize < (4 * sizeof (UINT32))) {
> + DEBUG ((
> + DEBUG_ERROR,
> + "%a: reg node size(%d) is too small \n",
> + __FUNCTION__,
> + PropSize
> + ));
> + return EFI_NOT_FOUND;
> + }
> +
> + Base = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[0]));
> + Size = SwapBytes64 (ReadUnaligned64 ((VOID *)&Reg[2]));
> +
> + mNorFlashDevices.DeviceBaseAddress = (UINTN)Base;
> + mNorFlashDevices.RegionBaseAddress = (UINTN)Base;
> + mNorFlashDevices.Size = (UINTN)Size;
> + mNorFlashDevices.BlockSize = QEMU_NOR_BLOCK_SIZE;
> +
> + Status = PcdSet32S (PcdFlashNvStorageVariableBase, Base);
> + ASSERT_EFI_ERROR (Status);
> +
> + /*
> + * Base is the value of PcdFlashNvStorageVariableBase,
> + * PcdFlashNvStorageFtwWorkingBase can be got by
> + * PcdFlashNvStorageVariableBase + PcdFlashNvStorageVariableSize
> + */
> + Base += PcdGet32 (PcdFlashNvStorageVariableSize);
> + Status = PcdSet32S (PcdFlashNvStorageFtwWorkingBase, Base);
> + ASSERT_EFI_ERROR (Status);
> +
> + /*
> + * Now,Base is the value of PcdFlashNvStorageFtwWorkingBase,
> + * PcdFlashNvStorageFtwSpareBase can be got by
> + * PcdFlashNvStorageFtwWorkingBase + PcdFlashNvStorageFtwWorkingSize.
> + */
> + Base += PcdGet32 (PcdFlashNvStorageFtwWorkingSize);
> + Status = PcdSet32S (PcdFlashNvStorageFtwSpareBase, Base);
> + ASSERT_EFI_ERROR (Status);
> +
> + //
> + // UEFI takes ownership of the NOR flash, and exposes its functionality
> + // through the UEFI Runtime Services GetVariable, SetVariable, etc. This
> + // means we need to disable it in the device tree to prevent the OS from
> + // attaching its device driver as well.
> + // Note that this also hides other flash banks, but the only other flash
> + // bank we expect to encounter is the one that carries the UEFI executable
> + // code, which is not intended to be guest updatable, and is usually backed
> + // in a readonly manner by QEMU anyway.
> + //
> + Status = FdtClient->SetNodeProperty (
> + FdtClient,
> + Node,
> + "status",
> + "disabled",
> + sizeof ("disabled")
> + );
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_WARN, "Failed to set NOR flash status to 'disabled'\n"));
> + }
> +
> + *NorFlashDescriptions = &mNorFlashDevices;
> + *Count = 1;
> +
> + return EFI_SUCCESS;
> +}
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
> new file mode 100644
> index 0000000000..da05ca0898
> --- /dev/null
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
> @@ -0,0 +1,43 @@
> +## @file
> +#
> +# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +##
> +
> +[Defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = NorFlashQemuLib
> + FILE_GUID = 339B7829-4C5F-4EFC-B2DD-5050E530DECE
> + MODULE_TYPE = DXE_DRIVER
> + VERSION_STRING = 1.0
> + LIBRARY_CLASS = VirtNorFlashPlatformLib
> +
> +[Sources.common]
> + NorFlashQemuLib.c
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> + OvmfPkg/OvmfPkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> +
> +[LibraryClasses]
> + BaseLib
> + DebugLib
> + UefiBootServicesTableLib
> +
> +[Protocols]
> + gFdtClientProtocolGuid ## CONSUMES
> +
> +[Depex]
> + gFdtClientProtocolGuid
> +
> +[Pcd]
> +gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
> +gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
> +gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
> +gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
> +gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
> +gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase
[-- Attachment #2: Type: text/html, Size: 8387 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 4/8] Platform/Loongson: Support pflash for loongarch.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 4/8] Platform/Loongson: Support pflash for loongarch xianglai
@ 2023-01-16 3:22 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:22 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 7522 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Support pflash for loongarch.
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> .../Loongson/LoongArchQemuPkg/Loongson.dsc | 15 ++---
> .../Loongson/LoongArchQemuPkg/Loongson.fdf | 3 +-
> .../LoongArchQemuPkg/VarStore.fdf.inc | 67 +++++++++++++++++++
> 3 files changed, 76 insertions(+), 9 deletions(-)
> create mode 100644 Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> index a9b5c8c514..05913db144 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> +++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> @@ -175,6 +175,7 @@
> DebugLib | MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
> PeiServicesLib | MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
> VariableFlashInfoLib | MdeModulePkg/Library/BaseVariableFlashInfoLib/BaseVariableFlashInfoLib.inf
> + VirtNorFlashPlatformLib | Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
>
> [LibraryClasses.common.SEC]
> PcdLib | MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> @@ -360,9 +361,9 @@
> #
> !include NetworkPkg/NetworkPcds.dsc.inc
>
> - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize | 0x10000
> - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize | 0x20000
> - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize | 0x10000
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize | 0x40000
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize | 0x40000
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize | 0x40000
>
> ################################################################################
> #
> @@ -373,6 +374,7 @@
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase | 0
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 | 0
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 | 0
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase | 0
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase | 0
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 | 0
> gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved | 0
> @@ -471,15 +473,12 @@
> #
> # Variable
> #
> -
> - OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf {
> - <LibraryClasses>
> - PlatformFvbLib|OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.inf
> - }
> + OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf
> MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf {
> <LibraryClasses>
> NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
> + NULL|EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.inf
> BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
> }
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
> index ee89097344..675d86094c 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
> +++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.fdf
> @@ -30,6 +30,7 @@ $(DXEFV_OFFSET)|$(DXEFV_SIZE)
> gLoongArchQemuPkgTokenSpaceGuid.PcdFlashDxeFvBase|gLoongArchQemuPkgTokenSpaceGuid.PcdFlashDxeFvSize
> FV = FVMAIN_COMPACT
>
> +!include VarStore.fdf.inc
> #####################################################################################################
> [FV.SECFV]
> FvNameGuid = 587d4265-5e71-41da-9c35-4258551f1e22
> @@ -135,7 +136,7 @@ INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
> #
> # Variable
> #
> -INF OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf
> +INF OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf
> INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
> INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
> #
> diff --git a/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc b/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc
> new file mode 100644
> index 0000000000..83ce3d8008
> --- /dev/null
> +++ b/Platform/Loongson/LoongArchQemuPkg/VarStore.fdf.inc
> @@ -0,0 +1,67 @@
> +## @file
> +#
> +# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +##
> +
> +[FD.QEMU_VARS]
> +BaseAddress = 0x0
> +Size = 0x1000000
> +ErasePolarity = 1
> +BlockSize = 0x20000
> +NumBlocks = 128
> +
> +0x00000000|0x00040000
> +#NV_VARIABLE_STORE
> +DATA = {
> + ## This is the EFI_FIRMWARE_VOLUME_HEADER
> + # ZeroVector []
> + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> + # FileSystemGuid: gEfiSystemNvDataFvGuid =
> + # { 0xFFF12B8D, 0x7696, 0x4C8B,
> + # { 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50 }}
> + 0x8D, 0x2B, 0xF1, 0xFF, 0x96, 0x76, 0x8B, 0x4C,
> + 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50,
> + # FvLength: 0xC0000
> + 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
> + # Signature "_FVH" # Attributes
> + 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00,
> + # HeaderLength # CheckSum # ExtHeaderOffset #Reserved #Revision
> + 0x48, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x02,
> + # Blockmap[0]: 0x3 Blocks * 0x40000 Bytes / Block
> + 0x3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
> + # Blockmap[1]: End
> + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> + ## This is the VARIABLE_STORE_HEADER
> + # It is compatible with SECURE_BOOT_ENABLE == FALSE as well.
> + # Signature: gEfiAuthenticatedVariableGuid =
> + # { 0xaaf32c78, 0x947b, 0x439a,
> + # { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 }}
> + 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43,
> + 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92,
> + # Size: 0x40000 (gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize) -
> + # 0x48 (size of EFI_FIRMWARE_VOLUME_HEADER) = 0x3ffb8
> + # This can speed up the Variable Dispatch a bit.
> + 0xB8, 0xFF, 0x03, 0x00,
> + # FORMATTED: 0x5A #HEALTHY: 0xFE #Reserved: UINT16 #Reserved1: UINT32
> + 0x5A, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
> +}
> +
> +0x00040000|0x00040000
> +#NV_FTW_WORKING
> +DATA = {
> + # EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER->Signature = gEdkiiWorkingBlockSignatureGuid =
> + # { 0x9e58292b, 0x7c68, 0x497d, { 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95 }}
> + 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49,
> + 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95,
> + # Crc:UINT32 #WorkingBlockValid:1, WorkingBlockInvalid:1, Reserved
> + 0x5b, 0xe7, 0xc6, 0x86, 0xFE, 0xFF, 0xFF, 0xFF,
> + # WriteQueueSize: UINT64
> + 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
> +}
> +
> +0x00080000|0x00040000
> +#NV_FTW_SPARE
[-- Attachment #2: Type: text/html, Size: 8500 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 5/8] Platform/Loongson: Modify the page table entry access priority.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 5/8] Platform/Loongson: Modify the page table entry access priority xianglai
@ 2023-01-16 3:23 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:23 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 1368 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Modify the page table entry access priority
> When the Page table properties are set.
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> index b932e3d568..9e2bd3344a 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> @@ -671,7 +671,7 @@ EfiAttributeToLoongArchAttribute (
> IN UINTN EfiAttributes
> )
> {
> - UINTN LoongArchAttributes = PAGE_VALID | PAGE_DIRTY | CACHE_CC | PAGE_USER | PAGE_GLOBAL;
> + UINTN LoongArchAttributes = PAGE_VALID | PAGE_DIRTY | PLV_KERNEL | PAGE_GLOBAL;
> switch (EfiAttributes & EFI_MEMORY_CACHETYPE_MASK) {
> case EFI_MEMORY_UC:
> LoongArchAttributes |= CACHE_SUC;
[-- Attachment #2: Type: text/html, Size: 2633 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 6/8] Platform/Loongson: Optimize page table entry null determination.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 6/8] Platform/Loongson: Optimize page table entry null determination xianglai
@ 2023-01-16 3:23 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:23 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 1081 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Modify the null judgment condition of page table entries.
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
> index 6ab07e7900..84c7c13919 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
> @@ -275,6 +275,6 @@ pte_none (
> IN PTE pte
> )
> {
> - return (!(PTE_VAL(pte) & (~PAGE_GLOBAL)));
> + return (!(PTE_VAL(pte) & (~PAGE_VALID)));
> }
> #endif // PAGE_H_
[-- Attachment #2: Type: text/html, Size: 2356 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 7/8] Platform/Loongson: Optimize the huge page and page entry conversion.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 7/8] Platform/Loongson: Optimize the huge page and page entry conversion xianglai
@ 2023-01-16 3:23 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:23 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 7035 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Optimize the process of converting huge pages
> to page table entries.
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> .../Library/MmuLib/MmuLibCore.c | 109 +++++++++++++-----
> .../LoongArchQemuPkg/Library/MmuLib/page.h | 3 +
> 2 files changed, 82 insertions(+), 30 deletions(-)
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> index 9e2bd3344a..dac38c63f2 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> @@ -449,6 +449,29 @@ GetPteAddress (
> return PteOffset (Pmd, Address);
> }
>
> +/**
> + Gets the Attributes of Huge Page.
> +
> + @param Pmd A pointer to the page middle directory.
> +
> + @retval Value of Attributes.
> +**/
> +UINTN
> +GetHugePageAttributes (
> + IN PMD *Pmd
> + )
> +{
> + UINTN Attributes;
> + UINTN GlobalFlag;
> + UINTN HugeVal = PMD_VAL(*Pmd);
> +
> + Attributes = HugeVal & (~HUGEP_PAGE_MASK);
> + GlobalFlag = ((Attributes & (1 << PAGE_HGLOBAL_SHIFT)) >> PAGE_HGLOBAL_SHIFT) << PAGE_GLOBAL_SHIFT;
> + Attributes &= ~(1 << PAGE_HGLOBAL_SHIFT);
> + Attributes |= GlobalFlag;
> + return Attributes;
> +}
> +
> /**
> Establishes a page table entry based on the specified memory region.
>
> @@ -477,13 +500,13 @@ MemoryMapPteRange (
> return EFI_OUT_OF_RESOURCES;
> }
>
> + DEBUG ((DEBUG_VERBOSE,
> + "%a %d Address %p End %p Attributes %llx\n",
> + __func__, __LINE__, Address, End, Attributes));
> +
> do {
> UpDate = FALSE;
> PteVal = MAKE_PTE (Address, Attributes);
> - DEBUG ((DEBUG_VERBOSE,
> - "%a %d Address %p PGD_INDEX %p PUD_INDEX %p PMD_INDEX %p PTE_INDEX %p MAKE_PTE %p\n",
> - __func__, __LINE__, Address, PGD_INDEX (Address), PUD_INDEX (Address), PMD_INDEX (Address),
> - PTE_INDEX (Address), PteVal));
>
> if ((!pte_none (*Pte)) &&
> (PTE_VAL(*Pte) != PTE_VAL(PteVal)))
> @@ -500,6 +523,55 @@ MemoryMapPteRange (
> return EFI_SUCCESS;
> }
>
> +/**
> + Convert Huge Page to Page.
> +
> + @param Pmd A pointer to the page middle directory.
> + @param Address The memory space start address.
> + @param End The end address of the memory space.
> + @param Attributes Memory space Attributes.
> +
> + @retval EFI_SUCCESS The page table entry was created successfully.
> + @retval EFI_OUT_OF_RESOURCES Page table entry establishment failed due to resource exhaustion.
> +**/
> +EFI_STATUS
> +ConvertHugePageToPage (
> + IN PMD *Pmd,
> + IN UINTN Address,
> + IN UINTN End,
> + IN UINTN Attributes
> + )
> +{
> + UINTN OldAttributes;
> + UINTN HugePageEnd;
> + UINTN HugePageStart;
> + EFI_STATUS Status;
> +
> + if ((pmd_none (*Pmd)) ||
> + (!IS_HUGE_PAGE (Pmd->PmdVal)))
> + {
> + Status |= MemoryMapPteRange (Pmd, Address, End, Attributes);
> + } else {
> + OldAttributes = GetHugePageAttributes(Pmd);
> + SetPmd (Pmd, (PTE *)PcdGet64 (PcdInvalidPte));
> + HugePageStart = Address & PMD_MASK;
> + HugePageEnd = HugePageStart + HUGE_PAGE_SIZE;
> + ASSERT (HugePageEnd >= End);
> +
> + if (Address > HugePageStart) {
> + Status |= MemoryMapPteRange (Pmd, HugePageStart, Address, OldAttributes);
> + }
> +
> + Status |= MemoryMapPteRange (Pmd, Address, End, Attributes);
> +
> + if (End < HugePageEnd) {
> + Status |= MemoryMapPteRange (Pmd, End, HugePageEnd, OldAttributes);
> + }
> + }
> +
> + return Status;
> +}
> +
> /**
> Establishes a page middle directory based on the specified memory region.
>
> @@ -520,10 +592,7 @@ MemoryMapPmdRange (
> )
> {
> PMD *Pmd;
> - PTE *Pte;
> UINTN Next;
> - UINTN AddressStart_HugePage;
> - UINTN AddressEnd_HugePage;
>
> Pmd = PmdAllocGet (Pud, Address);
> if (!Pmd) {
> @@ -534,7 +603,7 @@ MemoryMapPmdRange (
> Next = PMD_ADDRESS_END (Address, End);
> if (((Address & (~PMD_MASK)) == 0) &&
> ((Next & (~PMD_MASK)) == 0) &&
> - (pmd_none (*Pmd)))
> + (pmd_none (*Pmd) || IS_HUGE_PAGE (Pmd->PmdVal)))
> {
> DEBUG ((DEBUG_VERBOSE,
> "%a %d Address %p PGD_INDEX %p PUD_INDEX %p PMD_INDEX %p MAKE_HUGE_PTE %p\n",
> @@ -543,28 +612,7 @@ MemoryMapPmdRange (
>
> SetPmd (Pmd, (PTE *)MAKE_HUGE_PTE (Address, Attributes));
> } else {
> - if ((pmd_none (*Pmd)) ||
> - ((!pmd_none (*Pmd)) &&
> - (!IS_HUGE_PAGE (Pmd->PmdVal))))
> - {
> - if (MemoryMapPteRange (Pmd, Address, Next, Attributes)) {
> - return EFI_OUT_OF_RESOURCES;
> - }
> - } else {
> - SetPmd (Pmd, (PTE *)PcdGet64 (PcdInvalidPte));
> - AddressStart_HugePage = Address & PMD_MASK;
> - AddressEnd_HugePage = AddressStart_HugePage + HUGE_PAGE_SIZE;
> - if (MemoryMapPteRange (Pmd, AddressStart_HugePage, AddressEnd_HugePage, Attributes)) {
> - return EFI_OUT_OF_RESOURCES;
> - }
> - Pte = GetPteAddress (AddressStart_HugePage);
> - if (Pte == NULL) {
> - continue ;
> - }
> - if (AddressEnd_HugePage > End) {
> - Next = End;
> - }
> - }
> + ConvertHugePageToPage (Pmd, Address, Next, Attributes);
> }
> } while (Pmd++, Address = Next, Address != End);
>
> @@ -788,6 +836,7 @@ LoongArchSetMemoryAttributes (
> Attributes = EfiAttributeToLoongArchAttribute (Attributes);
> DEBUG ((DEBUG_VERBOSE, "%a %d %p %p %p.\n", __func__, __LINE__, BaseAddress , Length, Attributes));
> MemoryMapPageRange (BaseAddress, BaseAddress + Length, Attributes);
> + DEBUG ((DEBUG_VERBOSE, "%a %d end.\n", __func__, __LINE__));
>
> return EFI_SUCCESS;
> }
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
> index 84c7c13919..927aeb018d 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h
> @@ -42,6 +42,9 @@
> #define PFN_MASK (~(((UINTN)(1) << (EFI_PAGE_SHIFT)) - 1) & \
> (((UINTN)(1) << (PAGE_PFN_END_SHIFT)) - 1))
>
> +#define HUGEP_PAGE_MASK (~(((UINTN)(1) << (PMD_SHIFT)) - 1) & \
> + (((UINTN)(1) << (PAGE_PFN_END_SHIFT)) - 1))
> +
> typedef struct { UINTN PgdVal; } PGD;
> typedef struct { UINTN PudVal; } PUD;
> typedef struct { UINTN PmdVal; } PMD;
[-- Attachment #2: Type: text/html, Size: 8050 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH V4 8/8] Platform/Loongson: Enable zero address protection.
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 8/8] Platform/Loongson: Enable zero address protection xianglai
@ 2023-01-16 3:23 ` Chao Li
0 siblings, 0 replies; 17+ messages in thread
From: Chao Li @ 2023-01-16 3:23 UTC (permalink / raw)
To: devel, lixianglai
Cc: Ard Biesheuvel, Bibo Mao, Leif Lindholm, Liming Gao,
Michael D Kinney
[-- Attachment #1: Type: text/plain, Size: 4217 bytes --]
Reviewed-by: Chao Li <lichao@loongson.cn>
Thanks,
Chao
在 2023/1/13 11:17, xianglai 写道:
> Set the 0 page property to unreadable, non-writable, non-executable
>
> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
> Cc: Bibo Mao<maobibo@loongson.cn>
> Cc: Chao Li<lichao@loongson.cn>
> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
> Cc: Liming Gao<gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney<michael.d.kinney@intel.com>
> Signed-off-by: xianglai li<lixianglai@loongson.cn>
> ---
> .../LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf | 2 ++
> .../Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c | 8 +++++++-
> .../LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c | 5 +++++
> Platform/Loongson/LoongArchQemuPkg/Loongson.dsc | 2 ++
> 4 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf
> index 12848eecfe..d7ab37eea4 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf
> @@ -28,6 +28,7 @@
> MdePkg/MdePkg.dec
> Platform/Loongson/LoongArchQemuPkg/Loongson.dec
> OvmfPkg/OvmfPkg.dec
> + MdeModulePkg/MdeModulePkg.dec
>
> [PCD]
> gLoongArchQemuPkgTokenSpaceGuid.PcdSwapPageDir
> @@ -38,6 +39,7 @@
> gLoongArchQemuPkgTokenSpaceGuid.PcdFlashSecFvSize
> gLoongArchQemuPkgTokenSpaceGuid.PcdFlashSecFvBase
> gLoongArchQemuPkgTokenSpaceGuid.PcdRamSize
> + gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask
>
> [LibraryClasses]
> MemoryAllocationLib
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> index dac38c63f2..a45bcbdb6d 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c
> @@ -735,10 +735,16 @@ EfiAttributeToLoongArchAttribute (
> }
>
> // Write protection attributes
> - if ((EfiAttributes & EFI_MEMORY_RO) != 0) {
> + if (((EfiAttributes & EFI_MEMORY_RO) != 0) ||
> + ((EfiAttributes & EFI_MEMORY_WP) != 0))
> + {
> LoongArchAttributes &= ~PAGE_DIRTY;
> }
>
> + if (EfiAttributes & EFI_MEMORY_RP) {
> + LoongArchAttributes |= PAGE_NO_READ;
> + }
> +
> //eXecute protection attribute
> if ((EfiAttributes & EFI_MEMORY_XP) != 0) {
> LoongArchAttributes |= PAGE_NO_EXEC;
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c
> index 32a7fc0beb..a21233e796 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c
> +++ b/Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c
> @@ -21,6 +21,7 @@
> #include <Library/QemuFwCfgLib.h>
> #include "MmuLibCore.h"
> #include <Library/CacheMaintenanceLib.h>
> +#include <Library/MmuLib.h>
>
> /**
> Return the Virtual Memory Map of your platform
> @@ -170,6 +171,10 @@ ConfigureMmu (VOID)
> MemoryTable++;
> }
>
> + if (PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT0) {
> + LoongArchSetMemoryAttributes (0, EFI_PAGE_SIZE, EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_WP);
> + }
> +
> TlbReEntry = AllocatePages (1);
> if (TlbReEntry == NULL) {
> goto FreeTranslationTable;
> diff --git a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> index 05913db144..13145cf051 100644
> --- a/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> +++ b/Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
> @@ -365,6 +365,8 @@
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize | 0x40000
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize | 0x40000
>
> + gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask | 1
> +
> ################################################################################
> #
> # Pcd Dynamic Section - list of all EDK II PCD Entries defined by this Platform
[-- Attachment #2: Type: text/html, Size: 5355 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2023-01-16 3:23 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-13 3:17 [edk2-platforms][PATCH V4 0/8] Loongarch add flash device xianglai
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 1/8] Platform/Loongson: Add bootmode support xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 2/8] Platform/Loongson: Add nvme device driver for loongarch xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 3/8] Platform/Loongson: Add pflash driver xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 4/8] Platform/Loongson: Support pflash for loongarch xianglai
2023-01-16 3:22 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 5/8] Platform/Loongson: Modify the page table entry access priority xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 6/8] Platform/Loongson: Optimize page table entry null determination xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 7/8] Platform/Loongson: Optimize the huge page and page entry conversion xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
2023-01-13 3:17 ` [edk2-platforms][PATCH V4 8/8] Platform/Loongson: Enable zero address protection xianglai
2023-01-16 3:23 ` [edk2-devel] " Chao Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox