* [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension
@ 2024-03-14 20:19 Tuan Phan
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 1/4] MdePkg.dec: RISC-V: Define override bit for " Tuan Phan
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Tuan Phan @ 2024-03-14 20:19 UTC (permalink / raw)
To: devel
Cc: michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, sunilvl, jiewen.yao, andrei.warkentin,
ardb+tianocore, Tuan Phan
This series adds support for RISC-V Svpbmt extension.
The GCD EFI_MEMORY_UC and EFI_MEMORY_WC attributes will
be mapped to IO and NC mode defined in PBMT field.
v4:
- Changed UINTN to UINT64.
- Fixed format error.
- Addressed Andrei's comment.
v3:
- Addressed Laszlo's comments.
v2:
- Generated patch for each package.
Tuan Phan (4):
MdePkg.dec: RISC-V: Define override bit for Svpbmt extension
UefiCpuPkg: RISC-V: MMU: Explictly use UINT64 instead of UINTN
UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension
OvmfPkg/RiscVVirt: Disable Svpbmt extension
MdePkg/MdePkg.dec | 2 +
OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc | 2 +-
.../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 252 +++++++++++-------
.../BaseRiscVMmuLib/BaseRiscVMmuLib.inf | 1 +
4 files changed, 159 insertions(+), 98 deletions(-)
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116775): https://edk2.groups.io/g/devel/message/116775
Mute This Topic: https://groups.io/mt/104934682/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* [edk2-devel] [PATCH v4 1/4] MdePkg.dec: RISC-V: Define override bit for Svpbmt extension
2024-03-14 20:19 [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension Tuan Phan
@ 2024-03-14 20:19 ` Tuan Phan
2024-03-18 13:02 ` Sunil V L
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 2/4] UefiCpuPkg: RISC-V: MMU: Explictly use UINT64 instead of UINTN Tuan Phan
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Tuan Phan @ 2024-03-14 20:19 UTC (permalink / raw)
To: devel
Cc: michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, sunilvl, jiewen.yao, andrei.warkentin,
ardb+tianocore, Tuan Phan
Define the BIT 2 as the override bit for Svpbmt extension. This will
be used by RISC-V MMU library to support EFI_MEMORY_UC and
EFI_MEMORY_WC.
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
---
MdePkg/MdePkg.dec | 2 ++
1 file changed, 2 insertions(+)
diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
index 0459418906f8..6850acb96b92 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -2407,6 +2407,8 @@
# previous stage has feature enabled and user wants to disable it.
# BIT 1 = Supervisor Time Compare (Sstc). This bit is relevant only if
# previous stage has feature enabled and user wants to disable it.
+ # BIT 2 = Page-Based Memory Types (Pbmt). This bit is relevant only if
+ # previous stage has feature enabled and user wants to disable it.
#
gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride|0xFFFFFFFFFFFFFFFF|UINT64|0x69
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116776): https://edk2.groups.io/g/devel/message/116776
Mute This Topic: https://groups.io/mt/104934687/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [edk2-devel] [PATCH v4 2/4] UefiCpuPkg: RISC-V: MMU: Explictly use UINT64 instead of UINTN
2024-03-14 20:19 [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension Tuan Phan
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 1/4] MdePkg.dec: RISC-V: Define override bit for " Tuan Phan
@ 2024-03-14 20:19 ` Tuan Phan
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension Tuan Phan
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Tuan Phan @ 2024-03-14 20:19 UTC (permalink / raw)
To: devel
Cc: michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, sunilvl, jiewen.yao, andrei.warkentin,
ardb+tianocore, Tuan Phan
While UINTN defined for RISC-V 64 bits is UINT64, explictly using UINT64
for those variables that clearly are UINT64.
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
---
.../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 158 +++++++++---------
1 file changed, 76 insertions(+), 82 deletions(-)
diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
index 826a1d32a1d4..46ba4b4709b1 100644
--- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
+++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
@@ -65,7 +65,7 @@ RiscVMmuEnabled (
**/
STATIC
-UINTN
+UINT64
RiscVGetRootTranslateTable (
VOID
)
@@ -86,7 +86,7 @@ RiscVGetRootTranslateTable (
STATIC
BOOLEAN
IsValidPte (
- IN UINTN Entry
+ IN UINT64 Entry
)
{
if (((Entry & RISCV_PG_V) == 0) ||
@@ -107,9 +107,9 @@ IsValidPte (
**/
STATIC
-UINTN
+UINT64
SetValidPte (
- IN UINTN Entry
+ IN UINT64 Entry
)
{
/* Set Valid and Global mapping bits */
@@ -128,7 +128,7 @@ SetValidPte (
STATIC
BOOLEAN
IsBlockEntry (
- IN UINTN Entry
+ IN UINT64 Entry
)
{
return IsValidPte (Entry) &&
@@ -147,7 +147,7 @@ IsBlockEntry (
STATIC
BOOLEAN
IsTableEntry (
- IN UINTN Entry
+ IN UINT64 Entry
)
{
return IsValidPte (Entry) &&
@@ -163,13 +163,13 @@ IsTableEntry (
**/
STATIC
-UINTN
+UINT64
SetTableEntry (
- IN UINTN Entry
+ IN UINT64 Entry
)
{
Entry = SetValidPte (Entry);
- Entry &= ~(RISCV_PG_X | RISCV_PG_W | RISCV_PG_R);
+ Entry &= ~(UINT64)(RISCV_PG_X | RISCV_PG_W | RISCV_PG_R);
return Entry;
}
@@ -186,9 +186,9 @@ SetTableEntry (
STATIC
VOID
ReplaceTableEntry (
- IN UINTN *Entry,
- IN UINTN Value,
- IN UINTN RegionStart,
+ IN UINT64 *Entry,
+ IN UINT64 Value,
+ IN UINT64 RegionStart,
IN BOOLEAN IsLiveBlockMapping
)
{
@@ -208,9 +208,9 @@ ReplaceTableEntry (
**/
STATIC
-UINTN
+UINT64
GetPpnfromPte (
- IN UINTN Entry
+ IN UINT64 Entry
)
{
return ((Entry & PTE_PPN_MASK) >> PTE_PPN_SHIFT);
@@ -226,13 +226,13 @@ GetPpnfromPte (
**/
STATIC
-UINTN
+UINT64
SetPpnToPte (
- UINTN Entry,
- UINTN Address
+ UINT64 Entry,
+ UINT64 Address
)
{
- UINTN Ppn;
+ UINT64 Ppn;
Ppn = ((Address >> RISCV_MMU_PAGE_SHIFT) << PTE_PPN_SHIFT);
ASSERT (~(Ppn & ~PTE_PPN_MASK));
@@ -250,8 +250,8 @@ SetPpnToPte (
STATIC
VOID
FreePageTablesRecursive (
- IN UINTN *TranslationTable,
- IN UINTN Level
+ IN UINT64 *TranslationTable,
+ IN UINTN Level
)
{
UINTN Index;
@@ -260,8 +260,8 @@ FreePageTablesRecursive (
for (Index = 0; Index < mTableEntryCount; Index++) {
if (IsTableEntry (TranslationTable[Index])) {
FreePageTablesRecursive (
- (UINTN *)(GetPpnfromPte ((TranslationTable[Index])) <<
- RISCV_MMU_PAGE_SHIFT),
+ (UINT64 *)(GetPpnfromPte ((TranslationTable[Index])) <<
+ RISCV_MMU_PAGE_SHIFT),
Level + 1
);
}
@@ -289,22 +289,22 @@ FreePageTablesRecursive (
STATIC
EFI_STATUS
UpdateRegionMappingRecursive (
- IN UINTN RegionStart,
- IN UINTN RegionEnd,
- IN UINTN AttributeSetMask,
- IN UINTN AttributeClearMask,
- IN UINTN *PageTable,
+ IN UINT64 RegionStart,
+ IN UINT64 RegionEnd,
+ IN UINT64 AttributeSetMask,
+ IN UINT64 AttributeClearMask,
+ IN UINT64 *PageTable,
IN UINTN Level,
IN BOOLEAN TableIsLive
)
{
EFI_STATUS Status;
- UINTN BlockShift;
- UINTN BlockMask;
- UINTN BlockEnd;
- UINTN *Entry;
- UINTN EntryValue;
- UINTN *TranslationTable;
+ UINT64 BlockShift;
+ UINT64 BlockMask;
+ UINT64 BlockEnd;
+ UINT64 *Entry;
+ UINT64 EntryValue;
+ UINT64 *TranslationTable;
BOOLEAN NextTableIsLive;
ASSERT (Level < mMaxRootTableLevel);
@@ -313,18 +313,16 @@ UpdateRegionMappingRecursive (
BlockShift = (mMaxRootTableLevel - Level - 1) * mBitPerLevel + RISCV_MMU_PAGE_SHIFT;
BlockMask = MAX_ADDRESS >> (64 - BlockShift);
- DEBUG (
- (
- DEBUG_VERBOSE,
- "%a(%d): %llx - %llx set %lx clr %lx\n",
- __func__,
- Level,
- RegionStart,
- RegionEnd,
- AttributeSetMask,
- AttributeClearMask
- )
- );
+ DEBUG ((
+ DEBUG_VERBOSE,
+ "%a(%d): %LX - %LX set %LX clr %LX\n",
+ __func__,
+ Level,
+ RegionStart,
+ RegionEnd,
+ AttributeSetMask,
+ AttributeClearMask
+ ));
for ( ; RegionStart < RegionEnd; RegionStart = BlockEnd) {
BlockEnd = MIN (RegionEnd, (RegionStart | BlockMask) + 1);
@@ -380,7 +378,7 @@ UpdateRegionMappingRecursive (
NextTableIsLive = FALSE;
} else {
- TranslationTable = (UINTN *)(GetPpnfromPte (*Entry) << RISCV_MMU_PAGE_SHIFT);
+ TranslationTable = (UINT64 *)(GetPpnfromPte (*Entry) << RISCV_MMU_PAGE_SHIFT);
NextTableIsLive = TableIsLive;
}
@@ -412,7 +410,7 @@ UpdateRegionMappingRecursive (
}
if (!IsTableEntry (*Entry)) {
- EntryValue = SetPpnToPte (0, (UINTN)TranslationTable);
+ EntryValue = SetPpnToPte (0, (UINT64)TranslationTable);
EntryValue = SetTableEntry (EntryValue);
ReplaceTableEntry (
Entry,
@@ -463,11 +461,11 @@ UpdateRegionMappingRecursive (
STATIC
EFI_STATUS
UpdateRegionMapping (
- IN UINTN RegionStart,
- IN UINTN RegionLength,
- IN UINTN AttributeSetMask,
- IN UINTN AttributeClearMask,
- IN UINTN *RootTable,
+ IN UINT64 RegionStart,
+ IN UINT64 RegionLength,
+ IN UINT64 AttributeSetMask,
+ IN UINT64 AttributeClearMask,
+ IN UINT64 *RootTable,
IN BOOLEAN TableIsLive
)
{
@@ -495,23 +493,23 @@ UpdateRegionMapping (
**/
STATIC
-UINTN
+UINT64
GcdAttributeToPageAttribute (
- IN UINTN GcdAttributes
+ IN UINT64 GcdAttributes
)
{
- UINTN RiscVAttributes;
+ UINT64 RiscVAttributes;
RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
// Determine protection attributes
if ((GcdAttributes & EFI_MEMORY_RO) != 0) {
- RiscVAttributes &= ~(RISCV_PG_W);
+ RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
}
// Process eXecute Never attribute
if ((GcdAttributes & EFI_MEMORY_XP) != 0) {
- RiscVAttributes &= ~RISCV_PG_X;
+ RiscVAttributes &= ~(UINT64)RISCV_PG_X;
}
return RiscVAttributes;
@@ -533,11 +531,11 @@ EFI_STATUS
EFIAPI
RiscVSetMemoryAttributes (
IN EFI_PHYSICAL_ADDRESS BaseAddress,
- IN UINTN Length,
- IN UINTN Attributes
+ IN UINT64 Length,
+ IN UINT64 Attributes
)
{
- UINTN PageAttributesSet;
+ UINT64 PageAttributesSet;
PageAttributesSet = GcdAttributeToPageAttribute (Attributes);
@@ -560,7 +558,7 @@ RiscVSetMemoryAttributes (
Length,
PageAttributesSet,
PTE_ATTRIBUTES_MASK,
- (UINTN *)RiscVGetRootTranslateTable (),
+ (UINT64 *)RiscVGetRootTranslateTable (),
TRUE
);
}
@@ -583,8 +581,8 @@ RiscVMmuSetSatpMode (
)
{
VOID *TranslationTable;
- UINTN SatpReg;
- UINTN Ppn;
+ UINT64 SatpReg;
+ UINT64 Ppn;
EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemoryMap;
UINTN NumberOfDescriptors;
UINTN Index;
@@ -622,7 +620,7 @@ RiscVMmuSetSatpMode (
return EFI_OUT_OF_RESOURCES;
}
- ZeroMem (TranslationTable, mTableEntryCount * sizeof (UINTN));
+ ZeroMem (TranslationTable, mTableEntryCount * sizeof (UINT64));
NumberOfDescriptors = 0;
MemoryMap = NULL;
@@ -662,7 +660,7 @@ RiscVMmuSetSatpMode (
DisableInterrupts ();
}
- Ppn = (UINTN)TranslationTable >> RISCV_MMU_PAGE_SHIFT;
+ Ppn = (UINT64)TranslationTable >> RISCV_MMU_PAGE_SHIFT;
ASSERT (!(Ppn & ~(SATP64_PPN)));
SatpReg = Ppn;
@@ -671,14 +669,12 @@ RiscVMmuSetSatpMode (
RiscVSetSupervisorAddressTranslationRegister (SatpReg);
/* Check if HW support the setup satp mode */
if (SatpReg != RiscVGetSupervisorAddressTranslationRegister ()) {
- DEBUG (
- (
- DEBUG_VERBOSE,
- "%a: HW does not support SATP mode:%d\n",
- __func__,
- SatpMode
- )
- );
+ DEBUG ((
+ DEBUG_VERBOSE,
+ "%a: HW does not support SATP mode:%d\n",
+ __func__,
+ SatpMode
+ ));
FreePageTablesRecursive (TranslationTable, 0);
return EFI_DEVICE_ERROR;
}
@@ -706,7 +702,7 @@ RiscVConfigureMmu (
)
{
EFI_STATUS Status;
- INTN Idx;
+ UINTN Idx;
Status = EFI_SUCCESS;
@@ -719,14 +715,12 @@ RiscVConfigureMmu (
return Status;
}
- DEBUG (
- (
- DEBUG_INFO,
- "%a: SATP mode %d successfully configured\n",
- __func__,
- mModeSupport[Idx]
- )
- );
+ DEBUG ((
+ DEBUG_INFO,
+ "%a: SATP mode %d successfully configured\n",
+ __func__,
+ mModeSupport[Idx]
+ ));
break;
}
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116777): https://edk2.groups.io/g/devel/message/116777
Mute This Topic: https://groups.io/mt/104934688/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension
2024-03-14 20:19 [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension Tuan Phan
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 1/4] MdePkg.dec: RISC-V: Define override bit for " Tuan Phan
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 2/4] UefiCpuPkg: RISC-V: MMU: Explictly use UINT64 instead of UINTN Tuan Phan
@ 2024-03-14 20:19 ` Tuan Phan
2024-03-18 13:00 ` Sunil V L
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 4/4] OvmfPkg/RiscVVirt: Disable " Tuan Phan
2024-04-08 5:45 ` [edk2-devel] [PATCH v4 0/4] RISC-V: Support " Sunil V L
4 siblings, 1 reply; 12+ messages in thread
From: Tuan Phan @ 2024-03-14 20:19 UTC (permalink / raw)
To: devel
Cc: michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, sunilvl, jiewen.yao, andrei.warkentin,
ardb+tianocore, Tuan Phan
The GCD EFI_MEMORY_UC and EFI_MEMORY_WC memory attributes will be
supported when Svpbmt extension available.
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
---
.../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 106 ++++++++++++++----
.../BaseRiscVMmuLib/BaseRiscVMmuLib.inf | 1 +
2 files changed, 86 insertions(+), 21 deletions(-)
diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
index 46ba4b4709b1..34300dca5c34 100644
--- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
+++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
@@ -36,6 +36,11 @@
#define PTE_PPN_SHIFT 10
#define RISCV_MMU_PAGE_SHIFT 12
+#define RISCV_CPU_FEATURE_PBMT_BITMASK BIT2
+#define PTE_PBMT_NC BIT61
+#define PTE_PBMT_IO BIT62
+#define PTE_PBMT_MASK (PTE_PBMT_NC | PTE_PBMT_IO)
+
STATIC UINTN mModeSupport[] = { SATP_MODE_SV57, SATP_MODE_SV48, SATP_MODE_SV39, SATP_MODE_OFF };
STATIC UINTN mMaxRootTableLevel;
STATIC UINTN mBitPerLevel;
@@ -487,32 +492,82 @@ UpdateRegionMapping (
/**
Convert GCD attribute to RISC-V page attribute.
- @param GcdAttributes The GCD attribute.
+ @param GcdAttributes The GCD attribute.
+ @param RiscVAttributes The pointer of RISC-V page attribute.
- @return The RISC-V page attribute.
+ @retval EFI_INVALID_PARAMETER The RiscVAttributes is NULL or cache type mask not valid.
+ @retval EFI_SUCCESS The operation succesfully.
**/
STATIC
-UINT64
+EFI_STATUS
GcdAttributeToPageAttribute (
- IN UINT64 GcdAttributes
+ IN UINT64 GcdAttributes,
+ OUT UINT64 *RiscVAttributes
)
{
- UINT64 RiscVAttributes;
+ UINT64 CacheTypeMask;
+ BOOLEAN PmbtExtEnabled;
- RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
+ if (RiscVAttributes == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ *RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
+
+ PmbtExtEnabled = FALSE;
+ if ((PcdGet64 (PcdRiscVFeatureOverride) & RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
+ PmbtExtEnabled = TRUE;
+ }
// Determine protection attributes
if ((GcdAttributes & EFI_MEMORY_RO) != 0) {
- RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
+ *RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
}
// Process eXecute Never attribute
if ((GcdAttributes & EFI_MEMORY_XP) != 0) {
- RiscVAttributes &= ~(UINT64)RISCV_PG_X;
+ *RiscVAttributes &= ~(UINT64)RISCV_PG_X;
+ }
+
+ CacheTypeMask = GcdAttributes & EFI_CACHE_ATTRIBUTE_MASK;
+ if ((CacheTypeMask != 0) &&
+ (((CacheTypeMask - 1) & CacheTypeMask) != 0))
+ {
+ DEBUG ((
+ DEBUG_ERROR,
+ "%a: More than one bit set in cache type mask (0x%LX)\n",
+ __func__,
+ CacheTypeMask
+ ));
+ return EFI_INVALID_PARAMETER;
+ }
+
+ switch (CacheTypeMask) {
+ case EFI_MEMORY_UC:
+ if (PmbtExtEnabled) {
+ *RiscVAttributes |= PTE_PBMT_IO;
+ }
+
+ break;
+ case EFI_MEMORY_WC:
+ if (PmbtExtEnabled) {
+ *RiscVAttributes |= PTE_PBMT_NC;
+ } else {
+ DEBUG ((
+ DEBUG_VERBOSE,
+ "%a: EFI_MEMORY_WC set but Pmbt extension not available\n",
+ __func__
+ ));
+ }
+
+ break;
+ default:
+ // Default PMA mode
+ break;
}
- return RiscVAttributes;
+ return EFI_SUCCESS;
}
/**
@@ -535,29 +590,38 @@ RiscVSetMemoryAttributes (
IN UINT64 Attributes
)
{
- UINT64 PageAttributesSet;
+ UINT64 PageAttributesSet;
+ UINT64 PageAttributesClear;
+ EFI_STATUS Status;
- PageAttributesSet = GcdAttributeToPageAttribute (Attributes);
+ Status = GcdAttributeToPageAttribute (Attributes, &PageAttributesSet);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
if (!RiscVMmuEnabled ()) {
return EFI_SUCCESS;
}
- DEBUG (
- (
- DEBUG_VERBOSE,
- "%a: Set %llX page attribute 0x%X\n",
- __func__,
- BaseAddress,
- PageAttributesSet
- )
- );
+ PageAttributesClear = PTE_ATTRIBUTES_MASK;
+ if ((PcdGet64 (PcdRiscVFeatureOverride) & RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
+ PageAttributesClear |= PTE_PBMT_MASK;
+ }
+
+ DEBUG ((
+ DEBUG_VERBOSE,
+ "%a: %LX: set attributes 0x%LX, clear attributes 0x%LX\n",
+ __func__,
+ BaseAddress,
+ PageAttributesSet,
+ PageAttributesClear
+ ));
return UpdateRegionMapping (
BaseAddress,
Length,
PageAttributesSet,
- PTE_ATTRIBUTES_MASK,
+ PageAttributesClear,
(UINT64 *)RiscVGetRootTranslateTable (),
TRUE
);
diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
index 51ebe1750e97..1dbaa81f3608 100644
--- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
+++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
@@ -28,3 +28,4 @@
[Pcd]
gUefiCpuPkgTokenSpaceGuid.PcdCpuRiscVMmuMaxSatpMode ## CONSUMES
+ gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride ## CONSUMES
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116779): https://edk2.groups.io/g/devel/message/116779
Mute This Topic: https://groups.io/mt/104934719/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [edk2-devel] [PATCH v4 4/4] OvmfPkg/RiscVVirt: Disable Svpbmt extension
2024-03-14 20:19 [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension Tuan Phan
` (2 preceding siblings ...)
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension Tuan Phan
@ 2024-03-14 20:19 ` Tuan Phan
2024-03-18 13:01 ` Sunil V L
2024-04-08 5:45 ` [edk2-devel] [PATCH v4 0/4] RISC-V: Support " Sunil V L
4 siblings, 1 reply; 12+ messages in thread
From: Tuan Phan @ 2024-03-14 20:19 UTC (permalink / raw)
To: devel
Cc: michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, sunilvl, jiewen.yao, andrei.warkentin,
ardb+tianocore, Tuan Phan
Disable Svpbmt extension as QEMU not enables it in default config.
Cc: Andrei Warkentin <andrei.warkentin@intel.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Sunil V L <sunilvl@ventanamicro.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
---
OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc b/OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc
index 6bc7c90f31dc..b8338d2eb5f5 100644
--- a/OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc
+++ b/OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc
@@ -203,7 +203,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
[PcdsFixedAtBuild.common]
- gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride|0xFFFFFFFFFFFFFFFC
+ gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride|0xFFFFFFFFFFFFFFF8
gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116778): https://edk2.groups.io/g/devel/message/116778
Mute This Topic: https://groups.io/mt/104934689/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension Tuan Phan
@ 2024-03-18 13:00 ` Sunil V L
2024-03-19 16:44 ` Tuan Phan
[not found] ` <17BE38330B281CA5.29196@groups.io>
0 siblings, 2 replies; 12+ messages in thread
From: Sunil V L @ 2024-03-18 13:00 UTC (permalink / raw)
To: Tuan Phan
Cc: devel, michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, jiewen.yao, andrei.warkentin,
ardb+tianocore
Hi Tuan,
On Thu, Mar 14, 2024 at 01:19:16PM -0700, Tuan Phan wrote:
> The GCD EFI_MEMORY_UC and EFI_MEMORY_WC memory attributes will be
> supported when Svpbmt extension available.
>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Rahul Kumar <rahul1.kumar@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
> ---
> .../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 106 ++++++++++++++----
> .../BaseRiscVMmuLib/BaseRiscVMmuLib.inf | 1 +
> 2 files changed, 86 insertions(+), 21 deletions(-)
>
> diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> index 46ba4b4709b1..34300dca5c34 100644
> --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> @@ -36,6 +36,11 @@
> #define PTE_PPN_SHIFT 10
> #define RISCV_MMU_PAGE_SHIFT 12
>
> +#define RISCV_CPU_FEATURE_PBMT_BITMASK BIT2
> +#define PTE_PBMT_NC BIT61
> +#define PTE_PBMT_IO BIT62
> +#define PTE_PBMT_MASK (PTE_PBMT_NC | PTE_PBMT_IO)
> +
> STATIC UINTN mModeSupport[] = { SATP_MODE_SV57, SATP_MODE_SV48, SATP_MODE_SV39, SATP_MODE_OFF };
> STATIC UINTN mMaxRootTableLevel;
> STATIC UINTN mBitPerLevel;
> @@ -487,32 +492,82 @@ UpdateRegionMapping (
> /**
> Convert GCD attribute to RISC-V page attribute.
>
> - @param GcdAttributes The GCD attribute.
> + @param GcdAttributes The GCD attribute.
> + @param RiscVAttributes The pointer of RISC-V page attribute.
>
> - @return The RISC-V page attribute.
> + @retval EFI_INVALID_PARAMETER The RiscVAttributes is NULL or cache type mask not valid.
> + @retval EFI_SUCCESS The operation succesfully.
>
> **/
> STATIC
> -UINT64
> +EFI_STATUS
> GcdAttributeToPageAttribute (
> - IN UINT64 GcdAttributes
> + IN UINT64 GcdAttributes,
> + OUT UINT64 *RiscVAttributes
> )
> {
> - UINT64 RiscVAttributes;
> + UINT64 CacheTypeMask;
> + BOOLEAN PmbtExtEnabled;
>
Why not read the PCD once and save in a static variable?
> - RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
> + if (RiscVAttributes == NULL) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + *RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
> +
> + PmbtExtEnabled = FALSE;
> + if ((PcdGet64 (PcdRiscVFeatureOverride) & RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
> + PmbtExtEnabled = TRUE;
> + }
>
> // Determine protection attributes
> if ((GcdAttributes & EFI_MEMORY_RO) != 0) {
> - RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
> + *RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
> }
>
> // Process eXecute Never attribute
> if ((GcdAttributes & EFI_MEMORY_XP) != 0) {
> - RiscVAttributes &= ~(UINT64)RISCV_PG_X;
> + *RiscVAttributes &= ~(UINT64)RISCV_PG_X;
> + }
> +
> + CacheTypeMask = GcdAttributes & EFI_CACHE_ATTRIBUTE_MASK;
> + if ((CacheTypeMask != 0) &&
> + (((CacheTypeMask - 1) & CacheTypeMask) != 0))
> + {
> + DEBUG ((
> + DEBUG_ERROR,
> + "%a: More than one bit set in cache type mask (0x%LX)\n",
> + __func__,
> + CacheTypeMask
> + ));
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + switch (CacheTypeMask) {
> + case EFI_MEMORY_UC:
> + if (PmbtExtEnabled) {
> + *RiscVAttributes |= PTE_PBMT_IO;
> + }
> +
> + break;
> + case EFI_MEMORY_WC:
> + if (PmbtExtEnabled) {
> + *RiscVAttributes |= PTE_PBMT_NC;
> + } else {
> + DEBUG ((
> + DEBUG_VERBOSE,
> + "%a: EFI_MEMORY_WC set but Pmbt extension not available\n",
> + __func__
> + ));
> + }
> +
> + break;
> + default:
> + // Default PMA mode
> + break;
> }
>
> - return RiscVAttributes;
> + return EFI_SUCCESS;
> }
>
> /**
> @@ -535,29 +590,38 @@ RiscVSetMemoryAttributes (
> IN UINT64 Attributes
> )
> {
> - UINT64 PageAttributesSet;
> + UINT64 PageAttributesSet;
> + UINT64 PageAttributesClear;
> + EFI_STATUS Status;
>
> - PageAttributesSet = GcdAttributeToPageAttribute (Attributes);
> + Status = GcdAttributeToPageAttribute (Attributes, &PageAttributesSet);
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
>
Is there a reason to do this prior to checking RiscVMmuEnabled()?
> if (!RiscVMmuEnabled ()) {
> return EFI_SUCCESS;
> }
>
> - DEBUG (
> - (
> - DEBUG_VERBOSE,
> - "%a: Set %llX page attribute 0x%X\n",
> - __func__,
> - BaseAddress,
> - PageAttributesSet
> - )
> - );
> + PageAttributesClear = PTE_ATTRIBUTES_MASK;
> + if ((PcdGet64 (PcdRiscVFeatureOverride) & RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
> + PageAttributesClear |= PTE_PBMT_MASK;
> + }
> +
I think static variable would be better.
> + DEBUG ((
> + DEBUG_VERBOSE,
> + "%a: %LX: set attributes 0x%LX, clear attributes 0x%LX\n",
> + __func__,
> + BaseAddress,
> + PageAttributesSet,
> + PageAttributesClear
> + ));
>
> return UpdateRegionMapping (
> BaseAddress,
> Length,
> PageAttributesSet,
> - PTE_ATTRIBUTES_MASK,
> + PageAttributesClear,
> (UINT64 *)RiscVGetRootTranslateTable (),
> TRUE
> );
> diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> index 51ebe1750e97..1dbaa81f3608 100644
> --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> @@ -28,3 +28,4 @@
>
> [Pcd]
> gUefiCpuPkgTokenSpaceGuid.PcdCpuRiscVMmuMaxSatpMode ## CONSUMES
> + gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride ## CONSUMES
> --
> 2.25.1
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116839): https://edk2.groups.io/g/devel/message/116839
Mute This Topic: https://groups.io/mt/104934719/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH v4 4/4] OvmfPkg/RiscVVirt: Disable Svpbmt extension
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 4/4] OvmfPkg/RiscVVirt: Disable " Tuan Phan
@ 2024-03-18 13:01 ` Sunil V L
0 siblings, 0 replies; 12+ messages in thread
From: Sunil V L @ 2024-03-18 13:01 UTC (permalink / raw)
To: Tuan Phan
Cc: devel, michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, jiewen.yao, andrei.warkentin,
ardb+tianocore
On Thu, Mar 14, 2024 at 01:19:17PM -0700, Tuan Phan wrote:
> Disable Svpbmt extension as QEMU not enables it in default config.
>
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116840): https://edk2.groups.io/g/devel/message/116840
Mute This Topic: https://groups.io/mt/104934689/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH v4 1/4] MdePkg.dec: RISC-V: Define override bit for Svpbmt extension
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 1/4] MdePkg.dec: RISC-V: Define override bit for " Tuan Phan
@ 2024-03-18 13:02 ` Sunil V L
0 siblings, 0 replies; 12+ messages in thread
From: Sunil V L @ 2024-03-18 13:02 UTC (permalink / raw)
To: Tuan Phan
Cc: devel, michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, jiewen.yao, andrei.warkentin,
ardb+tianocore
On Thu, Mar 14, 2024 at 01:19:14PM -0700, Tuan Phan wrote:
> Define the BIT 2 as the override bit for Svpbmt extension. This will
> be used by RISC-V MMU library to support EFI_MEMORY_UC and
> EFI_MEMORY_WC.
>
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116841): https://edk2.groups.io/g/devel/message/116841
Mute This Topic: https://groups.io/mt/104934687/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension
2024-03-18 13:00 ` Sunil V L
@ 2024-03-19 16:44 ` Tuan Phan
[not found] ` <17BE38330B281CA5.29196@groups.io>
1 sibling, 0 replies; 12+ messages in thread
From: Tuan Phan @ 2024-03-19 16:44 UTC (permalink / raw)
To: Sunil V L
Cc: devel, michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, jiewen.yao, andrei.warkentin,
ardb+tianocore
[-- Attachment #1: Type: text/plain, Size: 7092 bytes --]
Hi Sunil,
On Mon, Mar 18, 2024 at 6:00 AM Sunil V L <sunilvl@ventanamicro.com> wrote:
> Hi Tuan,
>
> On Thu, Mar 14, 2024 at 01:19:16PM -0700, Tuan Phan wrote:
> > The GCD EFI_MEMORY_UC and EFI_MEMORY_WC memory attributes will be
> > supported when Svpbmt extension available.
> >
> > Cc: Gerd Hoffmann <kraxel@redhat.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Rahul Kumar <rahul1.kumar@intel.com>
> > Cc: Ray Ni <ray.ni@intel.com>
> > Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
> > ---
> > .../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 106 ++++++++++++++----
> > .../BaseRiscVMmuLib/BaseRiscVMmuLib.inf | 1 +
> > 2 files changed, 86 insertions(+), 21 deletions(-)
> >
> > diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> > index 46ba4b4709b1..34300dca5c34 100644
> > --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> > +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> > @@ -36,6 +36,11 @@
> > #define PTE_PPN_SHIFT 10
> > #define RISCV_MMU_PAGE_SHIFT 12
> >
> > +#define RISCV_CPU_FEATURE_PBMT_BITMASK BIT2
> > +#define PTE_PBMT_NC BIT61
> > +#define PTE_PBMT_IO BIT62
> > +#define PTE_PBMT_MASK (PTE_PBMT_NC | PTE_PBMT_IO)
> > +
> > STATIC UINTN mModeSupport[] = { SATP_MODE_SV57, SATP_MODE_SV48,
> SATP_MODE_SV39, SATP_MODE_OFF };
> > STATIC UINTN mMaxRootTableLevel;
> > STATIC UINTN mBitPerLevel;
> > @@ -487,32 +492,82 @@ UpdateRegionMapping (
> > /**
> > Convert GCD attribute to RISC-V page attribute.
> >
> > - @param GcdAttributes The GCD attribute.
> > + @param GcdAttributes The GCD attribute.
> > + @param RiscVAttributes The pointer of RISC-V page attribute.
> >
> > - @return The RISC-V page attribute.
> > + @retval EFI_INVALID_PARAMETER The RiscVAttributes is NULL or cache
> type mask not valid.
> > + @retval EFI_SUCCESS The operation succesfully.
> >
> > **/
> > STATIC
> > -UINT64
> > +EFI_STATUS
> > GcdAttributeToPageAttribute (
> > - IN UINT64 GcdAttributes
> > + IN UINT64 GcdAttributes,
> > + OUT UINT64 *RiscVAttributes
> > )
> > {
> > - UINT64 RiscVAttributes;
> > + UINT64 CacheTypeMask;
> > + BOOLEAN PmbtExtEnabled;
> >
> Why not read the PCD once and save in a static variable?
>
I can put it into a static variable if you think it is more clean.
>
> > - RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
> > + if (RiscVAttributes == NULL) {
> > + return EFI_INVALID_PARAMETER;
> > + }
> > +
> > + *RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
> > +
> > + PmbtExtEnabled = FALSE;
> > + if ((PcdGet64 (PcdRiscVFeatureOverride) &
> RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
> > + PmbtExtEnabled = TRUE;
> > + }
> >
> > // Determine protection attributes
> > if ((GcdAttributes & EFI_MEMORY_RO) != 0) {
> > - RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
> > + *RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
> > }
> >
> > // Process eXecute Never attribute
> > if ((GcdAttributes & EFI_MEMORY_XP) != 0) {
> > - RiscVAttributes &= ~(UINT64)RISCV_PG_X;
> > + *RiscVAttributes &= ~(UINT64)RISCV_PG_X;
> > + }
> > +
> > + CacheTypeMask = GcdAttributes & EFI_CACHE_ATTRIBUTE_MASK;
> > + if ((CacheTypeMask != 0) &&
> > + (((CacheTypeMask - 1) & CacheTypeMask) != 0))
> > + {
> > + DEBUG ((
> > + DEBUG_ERROR,
> > + "%a: More than one bit set in cache type mask (0x%LX)\n",
> > + __func__,
> > + CacheTypeMask
> > + ));
> > + return EFI_INVALID_PARAMETER;
> > + }
> > +
> > + switch (CacheTypeMask) {
> > + case EFI_MEMORY_UC:
> > + if (PmbtExtEnabled) {
> > + *RiscVAttributes |= PTE_PBMT_IO;
> > + }
> > +
> > + break;
> > + case EFI_MEMORY_WC:
> > + if (PmbtExtEnabled) {
> > + *RiscVAttributes |= PTE_PBMT_NC;
> > + } else {
> > + DEBUG ((
> > + DEBUG_VERBOSE,
> > + "%a: EFI_MEMORY_WC set but Pmbt extension not available\n",
> > + __func__
> > + ));
> > + }
> > +
> > + break;
> > + default:
> > + // Default PMA mode
> > + break;
> > }
> >
> > - return RiscVAttributes;
> > + return EFI_SUCCESS;
> > }
> >
> > /**
> > @@ -535,29 +590,38 @@ RiscVSetMemoryAttributes (
> > IN UINT64 Attributes
> > )
> > {
> > - UINT64 PageAttributesSet;
> > + UINT64 PageAttributesSet;
> > + UINT64 PageAttributesClear;
> > + EFI_STATUS Status;
> >
> > - PageAttributesSet = GcdAttributeToPageAttribute (Attributes);
> > + Status = GcdAttributeToPageAttribute (Attributes, &PageAttributesSet);
> > + if (EFI_ERROR (Status)) {
> > + return Status;
> > + }
> >
> Is there a reason to do this prior to checking RiscVMmuEnabled()?
>
Only reason is return error due to invalid parameter before return
EFI_SUCCESS if Mmu not enabled.
>
> > if (!RiscVMmuEnabled ()) {
> > return EFI_SUCCESS;
> > }
> >
> > - DEBUG (
> > - (
> > - DEBUG_VERBOSE,
> > - "%a: Set %llX page attribute 0x%X\n",
> > - __func__,
> > - BaseAddress,
> > - PageAttributesSet
> > - )
> > - );
> > + PageAttributesClear = PTE_ATTRIBUTES_MASK;
> > + if ((PcdGet64 (PcdRiscVFeatureOverride) &
> RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
> > + PageAttributesClear |= PTE_PBMT_MASK;
> > + }
> > +
> I think static variable would be better.
>
> > + DEBUG ((
> > + DEBUG_VERBOSE,
> > + "%a: %LX: set attributes 0x%LX, clear attributes 0x%LX\n",
> > + __func__,
> > + BaseAddress,
> > + PageAttributesSet,
> > + PageAttributesClear
> > + ));
> >
> > return UpdateRegionMapping (
> > BaseAddress,
> > Length,
> > PageAttributesSet,
> > - PTE_ATTRIBUTES_MASK,
> > + PageAttributesClear,
> > (UINT64 *)RiscVGetRootTranslateTable (),
> > TRUE
> > );
> > diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> > index 51ebe1750e97..1dbaa81f3608 100644
> > --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> > +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> > @@ -28,3 +28,4 @@
> >
> > [Pcd]
> > gUefiCpuPkgTokenSpaceGuid.PcdCpuRiscVMmuMaxSatpMode ## CONSUMES
> > + gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride ## CONSUMES
> > --
> > 2.25.1
> >
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116901): https://edk2.groups.io/g/devel/message/116901
Mute This Topic: https://groups.io/mt/104934719/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
[-- Attachment #2: Type: text/html, Size: 9826 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension
[not found] ` <17BE38330B281CA5.29196@groups.io>
@ 2024-04-02 22:42 ` Tuan Phan
2024-04-08 4:47 ` Sunil V L
0 siblings, 1 reply; 12+ messages in thread
From: Tuan Phan @ 2024-04-02 22:42 UTC (permalink / raw)
To: devel, tphan
Cc: Sunil V L, michael.d.kinney, gaoliming, zhiguang.liu, kraxel,
lersek, rahul1.kumar, ray.ni, jiewen.yao, andrei.warkentin,
ardb+tianocore
[-- Attachment #1: Type: text/plain, Size: 7540 bytes --]
On Tue, Mar 19, 2024 at 9:45 AM Tuan Phan via groups.io <tphan=
ventanamicro.com@groups.io> wrote:
> Hi Sunil,
>
> On Mon, Mar 18, 2024 at 6:00 AM Sunil V L <sunilvl@ventanamicro.com>
> wrote:
>
>> Hi Tuan,
>>
>> On Thu, Mar 14, 2024 at 01:19:16PM -0700, Tuan Phan wrote:
>> > The GCD EFI_MEMORY_UC and EFI_MEMORY_WC memory attributes will be
>> > supported when Svpbmt extension available.
>> >
>> > Cc: Gerd Hoffmann <kraxel@redhat.com>
>> > Cc: Laszlo Ersek <lersek@redhat.com>
>> > Cc: Rahul Kumar <rahul1.kumar@intel.com>
>> > Cc: Ray Ni <ray.ni@intel.com>
>> > Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
>> > ---
>> > .../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 106 ++++++++++++++----
>> > .../BaseRiscVMmuLib/BaseRiscVMmuLib.inf | 1 +
>> > 2 files changed, 86 insertions(+), 21 deletions(-)
>> >
>> > diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
>> b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
>> > index 46ba4b4709b1..34300dca5c34 100644
>> > --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
>> > +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
>> > @@ -36,6 +36,11 @@
>> > #define PTE_PPN_SHIFT 10
>> > #define RISCV_MMU_PAGE_SHIFT 12
>> >
>> > +#define RISCV_CPU_FEATURE_PBMT_BITMASK BIT2
>> > +#define PTE_PBMT_NC BIT61
>> > +#define PTE_PBMT_IO BIT62
>> > +#define PTE_PBMT_MASK (PTE_PBMT_NC | PTE_PBMT_IO)
>> > +
>> > STATIC UINTN mModeSupport[] = { SATP_MODE_SV57, SATP_MODE_SV48,
>> SATP_MODE_SV39, SATP_MODE_OFF };
>> > STATIC UINTN mMaxRootTableLevel;
>> > STATIC UINTN mBitPerLevel;
>> > @@ -487,32 +492,82 @@ UpdateRegionMapping (
>> > /**
>> > Convert GCD attribute to RISC-V page attribute.
>> >
>> > - @param GcdAttributes The GCD attribute.
>> > + @param GcdAttributes The GCD attribute.
>> > + @param RiscVAttributes The pointer of RISC-V page attribute.
>> >
>> > - @return The RISC-V page attribute.
>> > + @retval EFI_INVALID_PARAMETER The RiscVAttributes is NULL or cache
>> type mask not valid.
>> > + @retval EFI_SUCCESS The operation succesfully.
>> >
>> > **/
>> > STATIC
>> > -UINT64
>> > +EFI_STATUS
>> > GcdAttributeToPageAttribute (
>> > - IN UINT64 GcdAttributes
>> > + IN UINT64 GcdAttributes,
>> > + OUT UINT64 *RiscVAttributes
>> > )
>> > {
>> > - UINT64 RiscVAttributes;
>> > + UINT64 CacheTypeMask;
>> > + BOOLEAN PmbtExtEnabled;
>> >
>> Why not read the PCD once and save in a static variable?
>>
> I can put it into a static variable if you think it is more clean.
>
Looks like PcdRiscVFeatureOverride can be a patchable PCD so putting it to
a static variable may not work.
>
>> > - RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
>> > + if (RiscVAttributes == NULL) {
>> > + return EFI_INVALID_PARAMETER;
>> > + }
>> > +
>> > + *RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
>> > +
>> > + PmbtExtEnabled = FALSE;
>> > + if ((PcdGet64 (PcdRiscVFeatureOverride) &
>> RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
>> > + PmbtExtEnabled = TRUE;
>> > + }
>> >
>> > // Determine protection attributes
>> > if ((GcdAttributes & EFI_MEMORY_RO) != 0) {
>> > - RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
>> > + *RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
>> > }
>> >
>> > // Process eXecute Never attribute
>> > if ((GcdAttributes & EFI_MEMORY_XP) != 0) {
>> > - RiscVAttributes &= ~(UINT64)RISCV_PG_X;
>> > + *RiscVAttributes &= ~(UINT64)RISCV_PG_X;
>> > + }
>> > +
>> > + CacheTypeMask = GcdAttributes & EFI_CACHE_ATTRIBUTE_MASK;
>> > + if ((CacheTypeMask != 0) &&
>> > + (((CacheTypeMask - 1) & CacheTypeMask) != 0))
>> > + {
>> > + DEBUG ((
>> > + DEBUG_ERROR,
>> > + "%a: More than one bit set in cache type mask (0x%LX)\n",
>> > + __func__,
>> > + CacheTypeMask
>> > + ));
>> > + return EFI_INVALID_PARAMETER;
>> > + }
>> > +
>> > + switch (CacheTypeMask) {
>> > + case EFI_MEMORY_UC:
>> > + if (PmbtExtEnabled) {
>> > + *RiscVAttributes |= PTE_PBMT_IO;
>> > + }
>> > +
>> > + break;
>> > + case EFI_MEMORY_WC:
>> > + if (PmbtExtEnabled) {
>> > + *RiscVAttributes |= PTE_PBMT_NC;
>> > + } else {
>> > + DEBUG ((
>> > + DEBUG_VERBOSE,
>> > + "%a: EFI_MEMORY_WC set but Pmbt extension not available\n",
>> > + __func__
>> > + ));
>> > + }
>> > +
>> > + break;
>> > + default:
>> > + // Default PMA mode
>> > + break;
>> > }
>> >
>> > - return RiscVAttributes;
>> > + return EFI_SUCCESS;
>> > }
>> >
>> > /**
>> > @@ -535,29 +590,38 @@ RiscVSetMemoryAttributes (
>> > IN UINT64 Attributes
>> > )
>> > {
>> > - UINT64 PageAttributesSet;
>> > + UINT64 PageAttributesSet;
>> > + UINT64 PageAttributesClear;
>> > + EFI_STATUS Status;
>> >
>> > - PageAttributesSet = GcdAttributeToPageAttribute (Attributes);
>> > + Status = GcdAttributeToPageAttribute (Attributes,
>> &PageAttributesSet);
>> > + if (EFI_ERROR (Status)) {
>> > + return Status;
>> > + }
>> >
>> Is there a reason to do this prior to checking RiscVMmuEnabled()?
>>
> Only reason is return error due to invalid parameter before return
> EFI_SUCCESS if Mmu not enabled.
>
>>
>> > if (!RiscVMmuEnabled ()) {
>> > return EFI_SUCCESS;
>> > }
>> >
>> > - DEBUG (
>> > - (
>> > - DEBUG_VERBOSE,
>> > - "%a: Set %llX page attribute 0x%X\n",
>> > - __func__,
>> > - BaseAddress,
>> > - PageAttributesSet
>> > - )
>> > - );
>> > + PageAttributesClear = PTE_ATTRIBUTES_MASK;
>> > + if ((PcdGet64 (PcdRiscVFeatureOverride) &
>> RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
>> > + PageAttributesClear |= PTE_PBMT_MASK;
>> > + }
>> > +
>> I think static variable would be better.
>>
>> > + DEBUG ((
>> > + DEBUG_VERBOSE,
>> > + "%a: %LX: set attributes 0x%LX, clear attributes 0x%LX\n",
>> > + __func__,
>> > + BaseAddress,
>> > + PageAttributesSet,
>> > + PageAttributesClear
>> > + ));
>> >
>> > return UpdateRegionMapping (
>> > BaseAddress,
>> > Length,
>> > PageAttributesSet,
>> > - PTE_ATTRIBUTES_MASK,
>> > + PageAttributesClear,
>> > (UINT64 *)RiscVGetRootTranslateTable (),
>> > TRUE
>> > );
>> > diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
>> b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
>> > index 51ebe1750e97..1dbaa81f3608 100644
>> > --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
>> > +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
>> > @@ -28,3 +28,4 @@
>> >
>> > [Pcd]
>> > gUefiCpuPkgTokenSpaceGuid.PcdCpuRiscVMmuMaxSatpMode ## CONSUMES
>> > + gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride ## CONSUMES
>> > --
>> > 2.25.1
>> >
>>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117338): https://edk2.groups.io/g/devel/message/117338
Mute This Topic: https://groups.io/mt/104934719/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
[-- Attachment #2: Type: text/html, Size: 10636 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension
2024-04-02 22:42 ` Tuan Phan
@ 2024-04-08 4:47 ` Sunil V L
0 siblings, 0 replies; 12+ messages in thread
From: Sunil V L @ 2024-04-08 4:47 UTC (permalink / raw)
To: Tuan Phan
Cc: devel, michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, jiewen.yao, andrei.warkentin,
ardb+tianocore
On Tue, Apr 02, 2024 at 03:42:19PM -0700, Tuan Phan wrote:
> On Tue, Mar 19, 2024 at 9:45 AM Tuan Phan via groups.io <tphan=
> ventanamicro.com@groups.io> wrote:
>
> > Hi Sunil,
> >
> > On Mon, Mar 18, 2024 at 6:00 AM Sunil V L <sunilvl@ventanamicro.com>
> > wrote:
> >
> >> Hi Tuan,
> >>
> >> On Thu, Mar 14, 2024 at 01:19:16PM -0700, Tuan Phan wrote:
> >> > The GCD EFI_MEMORY_UC and EFI_MEMORY_WC memory attributes will be
> >> > supported when Svpbmt extension available.
> >> >
> >> > Cc: Gerd Hoffmann <kraxel@redhat.com>
> >> > Cc: Laszlo Ersek <lersek@redhat.com>
> >> > Cc: Rahul Kumar <rahul1.kumar@intel.com>
> >> > Cc: Ray Ni <ray.ni@intel.com>
> >> > Signed-off-by: Tuan Phan <tphan@ventanamicro.com>
> >> > ---
> >> > .../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 106 ++++++++++++++----
> >> > .../BaseRiscVMmuLib/BaseRiscVMmuLib.inf | 1 +
> >> > 2 files changed, 86 insertions(+), 21 deletions(-)
> >> >
> >> > diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> >> b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> >> > index 46ba4b4709b1..34300dca5c34 100644
> >> > --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> >> > +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c
> >> > @@ -36,6 +36,11 @@
> >> > #define PTE_PPN_SHIFT 10
> >> > #define RISCV_MMU_PAGE_SHIFT 12
> >> >
> >> > +#define RISCV_CPU_FEATURE_PBMT_BITMASK BIT2
> >> > +#define PTE_PBMT_NC BIT61
> >> > +#define PTE_PBMT_IO BIT62
> >> > +#define PTE_PBMT_MASK (PTE_PBMT_NC | PTE_PBMT_IO)
> >> > +
> >> > STATIC UINTN mModeSupport[] = { SATP_MODE_SV57, SATP_MODE_SV48,
> >> SATP_MODE_SV39, SATP_MODE_OFF };
> >> > STATIC UINTN mMaxRootTableLevel;
> >> > STATIC UINTN mBitPerLevel;
> >> > @@ -487,32 +492,82 @@ UpdateRegionMapping (
> >> > /**
> >> > Convert GCD attribute to RISC-V page attribute.
> >> >
> >> > - @param GcdAttributes The GCD attribute.
> >> > + @param GcdAttributes The GCD attribute.
> >> > + @param RiscVAttributes The pointer of RISC-V page attribute.
> >> >
> >> > - @return The RISC-V page attribute.
> >> > + @retval EFI_INVALID_PARAMETER The RiscVAttributes is NULL or cache
> >> type mask not valid.
> >> > + @retval EFI_SUCCESS The operation succesfully.
> >> >
> >> > **/
> >> > STATIC
> >> > -UINT64
> >> > +EFI_STATUS
> >> > GcdAttributeToPageAttribute (
> >> > - IN UINT64 GcdAttributes
> >> > + IN UINT64 GcdAttributes,
> >> > + OUT UINT64 *RiscVAttributes
> >> > )
> >> > {
> >> > - UINT64 RiscVAttributes;
> >> > + UINT64 CacheTypeMask;
> >> > + BOOLEAN PmbtExtEnabled;
> >> >
> >> Why not read the PCD once and save in a static variable?
> >>
> > I can put it into a static variable if you think it is more clean.
> >
> Looks like PcdRiscVFeatureOverride can be a patchable PCD so putting it to
> a static variable may not work.
>
I don't think that will be an issue for this use case. But I don't have
major issue keeping like this itself.
> >
> >> > - RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
> >> > + if (RiscVAttributes == NULL) {
> >> > + return EFI_INVALID_PARAMETER;
> >> > + }
> >> > +
> >> > + *RiscVAttributes = RISCV_PG_R | RISCV_PG_W | RISCV_PG_X;
> >> > +
> >> > + PmbtExtEnabled = FALSE;
> >> > + if ((PcdGet64 (PcdRiscVFeatureOverride) &
> >> RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
> >> > + PmbtExtEnabled = TRUE;
> >> > + }
> >> >
> >> > // Determine protection attributes
> >> > if ((GcdAttributes & EFI_MEMORY_RO) != 0) {
> >> > - RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
> >> > + *RiscVAttributes &= ~(UINT64)(RISCV_PG_W);
> >> > }
> >> >
> >> > // Process eXecute Never attribute
> >> > if ((GcdAttributes & EFI_MEMORY_XP) != 0) {
> >> > - RiscVAttributes &= ~(UINT64)RISCV_PG_X;
> >> > + *RiscVAttributes &= ~(UINT64)RISCV_PG_X;
> >> > + }
> >> > +
> >> > + CacheTypeMask = GcdAttributes & EFI_CACHE_ATTRIBUTE_MASK;
> >> > + if ((CacheTypeMask != 0) &&
> >> > + (((CacheTypeMask - 1) & CacheTypeMask) != 0))
> >> > + {
> >> > + DEBUG ((
> >> > + DEBUG_ERROR,
> >> > + "%a: More than one bit set in cache type mask (0x%LX)\n",
> >> > + __func__,
> >> > + CacheTypeMask
> >> > + ));
> >> > + return EFI_INVALID_PARAMETER;
> >> > + }
> >> > +
> >> > + switch (CacheTypeMask) {
> >> > + case EFI_MEMORY_UC:
> >> > + if (PmbtExtEnabled) {
> >> > + *RiscVAttributes |= PTE_PBMT_IO;
> >> > + }
> >> > +
> >> > + break;
> >> > + case EFI_MEMORY_WC:
> >> > + if (PmbtExtEnabled) {
> >> > + *RiscVAttributes |= PTE_PBMT_NC;
> >> > + } else {
> >> > + DEBUG ((
> >> > + DEBUG_VERBOSE,
> >> > + "%a: EFI_MEMORY_WC set but Pmbt extension not available\n",
> >> > + __func__
> >> > + ));
> >> > + }
> >> > +
> >> > + break;
> >> > + default:
> >> > + // Default PMA mode
> >> > + break;
> >> > }
> >> >
> >> > - return RiscVAttributes;
> >> > + return EFI_SUCCESS;
> >> > }
> >> >
> >> > /**
> >> > @@ -535,29 +590,38 @@ RiscVSetMemoryAttributes (
> >> > IN UINT64 Attributes
> >> > )
> >> > {
> >> > - UINT64 PageAttributesSet;
> >> > + UINT64 PageAttributesSet;
> >> > + UINT64 PageAttributesClear;
> >> > + EFI_STATUS Status;
> >> >
> >> > - PageAttributesSet = GcdAttributeToPageAttribute (Attributes);
> >> > + Status = GcdAttributeToPageAttribute (Attributes,
> >> &PageAttributesSet);
> >> > + if (EFI_ERROR (Status)) {
> >> > + return Status;
> >> > + }
> >> >
> >> Is there a reason to do this prior to checking RiscVMmuEnabled()?
> >>
> > Only reason is return error due to invalid parameter before return
> > EFI_SUCCESS if Mmu not enabled.
> >
Okay. Thanks!
> >>
> >> > if (!RiscVMmuEnabled ()) {
> >> > return EFI_SUCCESS;
> >> > }
> >> >
> >> > - DEBUG (
> >> > - (
> >> > - DEBUG_VERBOSE,
> >> > - "%a: Set %llX page attribute 0x%X\n",
> >> > - __func__,
> >> > - BaseAddress,
> >> > - PageAttributesSet
> >> > - )
> >> > - );
> >> > + PageAttributesClear = PTE_ATTRIBUTES_MASK;
> >> > + if ((PcdGet64 (PcdRiscVFeatureOverride) &
> >> RISCV_CPU_FEATURE_PBMT_BITMASK) != 0) {
> >> > + PageAttributesClear |= PTE_PBMT_MASK;
> >> > + }
> >> > +
> >> I think static variable would be better.
> >>
> >> > + DEBUG ((
> >> > + DEBUG_VERBOSE,
> >> > + "%a: %LX: set attributes 0x%LX, clear attributes 0x%LX\n",
> >> > + __func__,
> >> > + BaseAddress,
> >> > + PageAttributesSet,
> >> > + PageAttributesClear
> >> > + ));
> >> >
> >> > return UpdateRegionMapping (
> >> > BaseAddress,
> >> > Length,
> >> > PageAttributesSet,
> >> > - PTE_ATTRIBUTES_MASK,
> >> > + PageAttributesClear,
> >> > (UINT64 *)RiscVGetRootTranslateTable (),
> >> > TRUE
> >> > );
> >> > diff --git a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> >> b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> >> > index 51ebe1750e97..1dbaa81f3608 100644
> >> > --- a/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> >> > +++ b/UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
> >> > @@ -28,3 +28,4 @@
> >> >
> >> > [Pcd]
> >> > gUefiCpuPkgTokenSpaceGuid.PcdCpuRiscVMmuMaxSatpMode ## CONSUMES
> >> > + gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride ## CONSUMES
> >> > --
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117490): https://edk2.groups.io/g/devel/message/117490
Mute This Topic: https://groups.io/mt/104934719/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension
2024-03-14 20:19 [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension Tuan Phan
` (3 preceding siblings ...)
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 4/4] OvmfPkg/RiscVVirt: Disable " Tuan Phan
@ 2024-04-08 5:45 ` Sunil V L
4 siblings, 0 replies; 12+ messages in thread
From: Sunil V L @ 2024-04-08 5:45 UTC (permalink / raw)
To: Tuan Phan
Cc: devel, michael.d.kinney, gaoliming, zhiguang.liu, kraxel, lersek,
rahul1.kumar, ray.ni, jiewen.yao, andrei.warkentin,
ardb+tianocore
On Thu, Mar 14, 2024 at 01:19:13PM -0700, Tuan Phan wrote:
> This series adds support for RISC-V Svpbmt extension.
>
> The GCD EFI_MEMORY_UC and EFI_MEMORY_WC attributes will
> be mapped to IO and NC mode defined in PBMT field.
>
> v4:
> - Changed UINTN to UINT64.
> - Fixed format error.
> - Addressed Andrei's comment.
> v3:
> - Addressed Laszlo's comments.
> v2:
> - Generated patch for each package.
>
> Tuan Phan (4):
> MdePkg.dec: RISC-V: Define override bit for Svpbmt extension
> UefiCpuPkg: RISC-V: MMU: Explictly use UINT64 instead of UINTN
> UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension
> OvmfPkg/RiscVVirt: Disable Svpbmt extension
>
> MdePkg/MdePkg.dec | 2 +
> OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc | 2 +-
> .../Library/BaseRiscVMmuLib/BaseRiscVMmuLib.c | 252 +++++++++++-------
> .../BaseRiscVMmuLib/BaseRiscVMmuLib.inf | 1 +
> 4 files changed, 159 insertions(+), 98 deletions(-)
>
> --
Merged as #5535
Thanks,
Sunil
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117491): https://edk2.groups.io/g/devel/message/117491
Mute This Topic: https://groups.io/mt/104934682/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2024-04-08 5:45 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-14 20:19 [edk2-devel] [PATCH v4 0/4] RISC-V: Support Svpbmt extension Tuan Phan
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 1/4] MdePkg.dec: RISC-V: Define override bit for " Tuan Phan
2024-03-18 13:02 ` Sunil V L
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 2/4] UefiCpuPkg: RISC-V: MMU: Explictly use UINT64 instead of UINTN Tuan Phan
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 3/4] UefiCpuPkg: RISC-V: MMU: Support Svpbmt extension Tuan Phan
2024-03-18 13:00 ` Sunil V L
2024-03-19 16:44 ` Tuan Phan
[not found] ` <17BE38330B281CA5.29196@groups.io>
2024-04-02 22:42 ` Tuan Phan
2024-04-08 4:47 ` Sunil V L
2024-03-14 20:19 ` [edk2-devel] [PATCH v4 4/4] OvmfPkg/RiscVVirt: Disable " Tuan Phan
2024-03-18 13:01 ` Sunil V L
2024-04-08 5:45 ` [edk2-devel] [PATCH v4 0/4] RISC-V: Support " Sunil V L
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox