From: "Chao Li" <lichao@loongson.cn>
To: devel@edk2.groups.io, andrei.warkentin@intel.com
Cc: "Dong, Eric" <eric.dong@intel.com>, "Ni, Ray" <ray.ni@intel.com>,
"Kumar, Rahul R" <rahul.r.kumar@intel.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Leif Lindholm <quic_llindhol@quicinc.com>,
Ard Biesheuvel <ardb+tianocore@kernel.org>,
Sami Mujawar <sami.mujawar@arm.com>,
Sunil V L <sunilvl@ventanamicro.com>
Subject: Re: [edk2-devel] [PATCH v2 11/30] UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg
Date: Tue, 14 Nov 2023 10:00:21 +0800 [thread overview]
Message-ID: <5d8d98eb-99ee-4c8d-9da4-7edb37689101@loongson.cn> (raw)
In-Reply-To: <PH8PR11MB68563B891B437B554D5387A583AFA@PH8PR11MB6856.namprd11.prod.outlook.com>
[-- Attachment #1: Type: text/plain, Size: 11324 bytes --]
Hi Andrei,
I agree with you, I will move LoongArch-specific stuff from UefiCpuPkg
to MdePkg/Include/ in V3.
And you are also saied record the idea of moving ArmMmuLib to CpuMmuLib,
I would to say, this header is referenced from ArmPkg, and I plan to
move the ArmMmuLib from ArmPkg to UefiCpuPkg after merging this patch
set, and other BZ number will be used. The premise is that the
maintainers of ArmPkg agrees move operation.
Thanks,
Chao
On 2023/11/9 09:17, Andrei Warkentin wrote:
> Hi Chao,
>
> I see that you're adding a header, CpuMmuLib.h, but this header is not generic - it includes a bunch of Loongson arch-specific "stuff".
>
> I agree in principle that there's room for a generic CpuMmuLib, and I don't think you ought to be on the hook to refactor ArmMmuLib, but I suggest moving
> the architecture-specific PTE #defines into MdePkg/Include similar to ./MdePkg/Include/Register/RiscV64. (it would, though, be nice to at least record the idea of moving ArmMmuLib to CpuMmuLib.... raise a BZ for that or something!)
>
> This will avoid the #ifdef MDE_CPU_LOONGARCH64 inside a generic Library header.
>
> A
>
>> -----Original Message-----
>> From: Chao Li<lichao@loongson.cn>
>> Sent: Sunday, November 5, 2023 9:28 PM
>> To:devel@edk2.groups.io
>> Cc: Dong, Eric<eric.dong@intel.com>; Ni, Ray<ray.ni@intel.com>; Kumar,
>> Rahul R<rahul.r.kumar@intel.com>; Gerd Hoffmann<kraxel@redhat.com>;
>> Leif Lindholm<quic_llindhol@quicinc.com>; Ard Biesheuvel
>> <ardb+tianocore@kernel.org>; Sami Mujawar<sami.mujawar@arm.com>;
>> Sunil V L<sunilvl@ventanamicro.com>; Warkentin, Andrei
>> <andrei.warkentin@intel.com>
>> Subject: [PATCH v2 11/30] UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg
>>
>> Add a new header file CpuMmuLib.h, whitch is referenced from
>> ArmPkg/Include/Library/ArmMmuLib.h. Currently, only support for
>> LoongArch64 is added, and more architectures can be accommodated in the
>> future.
>>
>> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=4584
>>
>> Cc: Eric Dong<eric.dong@intel.com>
>> Cc: Ray Ni<ray.ni@intel.com>
>> Cc: Rahul Kumar<rahul1.kumar@intel.com>
>> Cc: Gerd Hoffmann<kraxel@redhat.com>
>> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
>> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
>> Cc: Sami Mujawar<sami.mujawar@arm.com>
>> Cc: Sunil V L<sunilvl@ventanamicro.com>
>> Cc: Andrei Warkentin<andrei.warkentin@intel.com>
>> Signed-off-by: Chao Li<lichao@loongson.cn>
>> ---
>> UefiCpuPkg/Include/Library/CpuMmuLib.h | 194
>> +++++++++++++++++++++++++
>> UefiCpuPkg/UefiCpuPkg.dec | 4 +
>> 2 files changed, 198 insertions(+)
>> create mode 100644 UefiCpuPkg/Include/Library/CpuMmuLib.h
>>
>> diff --git a/UefiCpuPkg/Include/Library/CpuMmuLib.h
>> b/UefiCpuPkg/Include/Library/CpuMmuLib.h
>> new file mode 100644
>> index 0000000000..8f524d31d4
>> --- /dev/null
>> +++ b/UefiCpuPkg/Include/Library/CpuMmuLib.h
>> @@ -0,0 +1,194 @@
>> +/** @file
>> +
>> + Copyright (c) 2023 Loongson Technology Corporation Limited. All
>> + rights reserved.<BR>
>> +
>> + SPDX-License-Identifier: BSD-2-Clause-Patent
>> +
>> +**/
>> +
>> +#ifndef CPU_MMU_LIB_H_
>> +#define CPU_MMU_LIB_H_
>> +
>> +#include <Uefi/UefiBaseType.h>
>> +
>> +#ifdef MDE_CPU_LOONGARCH64
>> +
>> +/* Page table property definitions */
>> +#define PAGE_VALID_SHIFT 0
>> +#define PAGE_DIRTY_SHIFT 1
>> +#define PAGE_PLV_SHIFT 2 // 2~3, two bits
>> +#define CACHE_SHIFT 4 // 4~5, two bits
>> +#define PAGE_GLOBAL_SHIFT 6
>> +#define PAGE_HUGE_SHIFT 6 // HUGE is a PMD bit
>> +
>> +#define PAGE_HGLOBAL_SHIFT 12 // HGlobal is a PMD bit
>> +#define PAGE_PFN_SHIFT 12
>> +#define PAGE_PFN_END_SHIFT 48
>> +#define PAGE_NO_READ_SHIFT 61
>> +#define PAGE_NO_EXEC_SHIFT 62
>> +#define PAGE_RPLV_SHIFT 63
>> +
>> +/* Used by TLB hardware (placed in EntryLo*) */
>> +#define PAGE_VALID ((UINTN)(1) << PAGE_VALID_SHIFT)
>> +#define PAGE_DIRTY ((UINTN)(1) << PAGE_DIRTY_SHIFT)
>> +#define PAGE_PLV ((UINTN)(3) << PAGE_PLV_SHIFT)
>> +#define PAGE_GLOBAL ((UINTN)(1) << PAGE_GLOBAL_SHIFT)
>> +#define PAGE_HUGE ((UINTN)(1) << PAGE_HUGE_SHIFT)
>> +#define PAGE_HGLOBAL ((UINTN)(1) << PAGE_HGLOBAL_SHIFT) #define
>> +PAGE_NO_READ ((UINTN)(1) << PAGE_NO_READ_SHIFT) #define
>> PAGE_NO_EXEC
>> +((UINTN)(1) << PAGE_NO_EXEC_SHIFT)
>> +#define PAGE_RPLV ((UINTN)(1) << PAGE_RPLV_SHIFT)
>> +#define CACHE_MASK ((UINTN)(3) << CACHE_SHIFT)
>> +#define PFN_SHIFT (EFI_PAGE_SHIFT - 12 + PAGE_PFN_SHIFT)
>> +
>> +#define PLV_KERNEL 0
>> +#define PLV_USER 3
>> +
>> +#define PAGE_USER (PLV_USER << PAGE_PLV_SHIFT)
>> +#define PAGE_KERNEL (PLV_KERN << PAGE_PLV_SHIFT)
>> +
>> +#define CACHE_SUC (0 << CACHE_SHIFT) // Strong-ordered UnCached
>> +#define CACHE_CC (1 << CACHE_SHIFT) // Coherent Cached
>> +#define CACHE_WUC (2 << CACHE_SHIFT) // Weak-ordered UnCached
>> +
>> +#define EFI_MEMORY_CACHETYPE_MASK (EFI_MEMORY_UC | \
>> + EFI_MEMORY_WC | \
>> + EFI_MEMORY_WT | \
>> + EFI_MEMORY_WB | \
>> + EFI_MEMORY_UCE \
>> + )
>> +#endif
>> +
>> +typedef struct {
>> + EFI_PHYSICAL_ADDRESS PhysicalBase;
>> + EFI_VIRTUAL_ADDRESS VirtualBase;
>> + UINTN Length;
>> + UINTN Attributes;
>> +} MEMORY_REGION_DESCRIPTOR;
>> +
>> +/**
>> + Converts EFI Attributes to corresponding architecture Attributes.
>> +
>> + @param[in] EfiAttributes Efi Attributes.
>> +
>> + @retval Corresponding architecture attributes.
>> +**/
>> +UINTN
>> +EfiAttributeConverse (
>> + IN UINTN EfiAttributes
>> + );
>> +
>> +/**
>> + Finds the length and memory properties of the memory region
>> corresponding to the specified base address.
>> +
>> + @param[in] BaseAddress To find the base address of the memory
>> region.
>> + @param[in] EndAddress To find the end address of the memory region.
>> + @param[out] RegionLength The length of the memory region found.
>> + @param[out] RegionAttributes Properties of the memory region found.
>> +
>> + @retval EFI_SUCCESS The corresponding memory area was successfully
>> found
>> + EFI_NOT_FOUND No memory area found
>> +**/
>> +EFI_STATUS
>> +GetMemoryRegionAttribute (
>> + IN UINTN BaseAddress,
>> + IN UINTN EndAddress,
>> + OUT UINTN *RegionLength,
>> + OUT UINTN *RegionAttributes
>> + );
>> +
>> +/**
>> + Sets the Attributes of the specified memory region
>> +
>> + @param[in] BaseAddress The base address of the memory region to set
>> the Attributes.
>> + @param[in] Length The length of the memory region to set the
>> Attributes.
>> + @param[in] Attributes The Attributes to be set.
>> +
>> + @retval EFI_SUCCESS The Attributes was set successfully
>> +**/
>> +EFI_STATUS
>> +SetMemoryAttributes (
>> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>> + IN UINTN Length,
>> + IN UINTN Attributes
>> + );
>> +
>> +/**
>> + Sets the non-executable Attributes for the specified memory region
>> +
>> + @param[in] BaseAddress The base address of the memory region to set
>> the Attributes.
>> + @param[in] Length The length of the memory region to set the
>> Attributes.
>> +
>> + @retval EFI_SUCCESS The Attributes was set successfully
>> +**/
>> +EFI_STATUS
>> +SetMemoryRegionNoExec (
>> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>> + IN UINTN Length
>> + );
>> +
>> +/**
>> + Clears the non-executable Attributes for the specified memory region
>> +
>> + @param[in] BaseAddress The base address of the memory region to clear
>> the Attributes.
>> + @param[in] Length The length of the memory region to clear the
>> Attributes.
>> +
>> + @retval EFI_SUCCESS The Attributes was clear successfully
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +ClearMemoryRegionNoExec (
>> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>> + IN UINT64 Length
>> + );
>> +
>> +/**
>> + Sets the read-only Attributes for the specified memory region
>> +
>> + @param[in] BaseAddress The base address of the memory region to set
>> the Attributes.
>> + @param[in] Length The length of the memory region to set the
>> Attributes.
>> +
>> + @retval EFI_SUCCESS The Attributes was set successfully
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +SetMemoryRegionReadOnly (
>> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>> + IN UINT64 Length
>> + );
>> +
>> +/**
>> + Clears the read-only Attributes for the specified memory region
>> +
>> + @param[in] BaseAddress The base address of the memory region to clear
>> the Attributes.
>> + @param[in] Length The length of the memory region to clear the
>> Attributes.
>> +
>> + @retval EFI_SUCCESS The Attributes was clear successfully
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +ClearMemoryRegionReadOnly (
>> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>> + IN UINT64 Length
>> + );
>> +
>> +/**
>> + Create a page table and initialize the memory management unit(MMU).
>> +
>> + @param[in] MemoryTable A pointer to a memory ragion table.
>> + @param[out] TranslationTableBase A pointer to a translation table base
>> address.
>> + @param[in out] TranslationTableSize A pointer to a translation table base
>> size.
>> +
>> + @retval EFI_SUCCESS Configure MMU successfully.
>> + EFI_INVALID_PARAMETER MemoryTable is NULL.
>> + EFI_UNSUPPORTED Out of memory space or size not aligned.
>> +**/
>> +EFI_STATUS
>> +EFIAPI
>> +ConfigureMemoryManagementUint (
>> + IN MEMORY_REGION_DESCRIPTOR *MemoryTable,
>> + OUT VOID **TranslationTableBase OPTIONAL,
>> + IN OUT UINTN *TranslationTableSize OPTIONAL
>> + );
>> +
>> +#endif // CPU_MMU_LIB_H_
>> diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec index
>> 154b1d06fe..150beae981 100644
>> --- a/UefiCpuPkg/UefiCpuPkg.dec
>> +++ b/UefiCpuPkg/UefiCpuPkg.dec
>> @@ -62,6 +62,10 @@
>> ## @libraryclass Provides function for manipulating x86 paging structures.
>> CpuPageTableLib|Include/Library/CpuPageTableLib.h
>>
>> +[LibraryClasses.LoongArch64]
>> + ## @libraryclass Provides macros and functions for the memory
>> management unit.
>> + CpuMmuLib|Include/Library/CpuMmuLib.h
>> +
>> ## @libraryclass Provides functions for manipulating smram savestate
>> registers.
>> MmSaveStateLib|Include/Library/MmSaveStateLib.h
>>
>> --
>> 2.27.0
>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111187): https://edk2.groups.io/g/devel/message/111187
Mute This Topic: https://groups.io/mt/102413866/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: 13387 bytes --]
next prev parent reply other threads:[~2023-11-14 2:00 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-06 3:25 [edk2-devel] [PATCH v2 00/30] Enable LoongArch virtual machine in edk2 Chao Li
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 01/30] MdePkg: Add the header file named Csr.h for LoongArch64 Chao Li
2023-11-07 3:30 ` Michael D Kinney
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 02/30] MdePkg: Add LoongArch64 FPU function set into BaseCpuLib Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 03/30] MdePkg: Add LoongArch64 exception function set into BaseLib Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 04/30] MdePkg: Add LoongArch64 local interrupt " Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 05/30] MdePkg: Add LoongArch Cpucfg function Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 06/30] MdePkg: Add read stable counter operation for LoongArch Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 07/30] MdePkg: Add CSR " Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 08/30] MdePkg: Add IOCSR " Chao Li
2023-11-07 3:32 ` Michael D Kinney
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 09/30] UefiCpuPkg: Add LoongArch64 CPU Timer library Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 10/30] UefiCpuPkg: Add CPU exception library for LoongArch Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 11/30] UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg Chao Li
2023-11-09 1:17 ` Andrei Warkentin
2023-11-14 2:00 ` Chao Li [this message]
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 12/30] UefiCpuPkg: Add LoongArch64CpuMmuLib " Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 13/30] UefiCpuPkg: Add multiprocessor library for LoongArch64 Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 14/30] UefiCpuPkg: Add CpuDxe driver " Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 15/30] EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64 Chao Li
2023-11-15 18:55 ` Leif Lindholm
2023-11-16 8:15 ` Pedro Falcato
2023-11-16 9:17 ` Chao Li
2023-11-16 11:21 ` Leif Lindholm
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 16/30] ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg Chao Li
2023-11-07 9:37 ` Gerd Hoffmann
2023-11-13 11:46 ` Sami Mujawar
2023-11-14 1:41 ` Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 17/30] OvmfPkg/LoongArchVirt: Add PciCpuIo2Dxe module Chao Li
2023-11-07 9:42 ` Gerd Hoffmann
2023-11-07 10:03 ` Chao Li
2023-11-08 23:11 ` Sunil V L
2023-11-10 3:31 ` Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 18/30] OvmfPkg/LoongArchVirt: Add stable timer driver Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 19/30] OvmfPkg/LoongArchVirt: Add a NULL library named CollectApResouceLibNull Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 20/30] OvmfPkg/LoongArchVirt: Add serial port library Chao Li
2023-11-07 9:47 ` Gerd Hoffmann
2023-11-07 10:12 ` Chao Li
2023-11-08 22:21 ` Laszlo Ersek
2023-11-10 4:51 ` Chao Li
2023-11-13 10:45 ` Laszlo Ersek
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 21/30] OvmfPkg/LoongArchVirt: Add real time clock library Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 22/30] OvmfPkg/LoongArchVirt: Add NorFlashQemuLib Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 23/30] OvmfPkg/LoongArchVirt: Add PeiServiceTablePointerLib Chao Li
2023-11-08 22:22 ` Laszlo Ersek
2023-11-10 6:44 ` Chao Li
2023-11-13 11:02 ` Laszlo Ersek
2023-11-14 2:08 ` Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 24/30] OvmfPkg/LoongArchVirt: Add platform boot manager library Chao Li
2023-11-08 22:24 ` Laszlo Ersek
2023-11-10 7:09 ` Chao Li
2023-11-10 9:46 ` Gerd Hoffmann
2023-11-13 11:08 ` Laszlo Ersek
2023-11-15 3:21 ` Chao Li
2023-11-15 12:52 ` Laszlo Ersek
2023-11-16 7:09 ` Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 25/30] OvmfPkg/LoongArchVirt: Add FdtQemuFwCfgLib Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 26/30] OvmfPkg/LoongArchVirt: Add reset system library Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 27/30] OvmfPkg/LoongArchVirt: Support SEC phase Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 28/30] OvmfPkg/LoongArchVirt: Support PEI phase Chao Li
2023-11-06 3:31 ` [edk2-devel] [PATCH v2 29/30] OvmfPkg/LoongArchVirt: Add build file Chao Li
2023-11-06 3:31 ` [edk2-devel] [PATCH v2 30/30] OvmfPkg/LoongArchVirt: Add self introduction file Chao Li
[not found] ` <1794EAF40590BB23.26468@groups.io>
2023-11-07 6:41 ` [edk2-devel] [PATCH v2 09/30] UefiCpuPkg: Add LoongArch64 CPU Timer library Chao Li
[not found] ` <1794EB01154A1CFD.12603@groups.io>
2023-11-07 8:40 ` [edk2-devel] [PATCH v2 15/30] EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64 Chao Li
[not found] ` <1794EB0445E96DCB.26468@groups.io>
2023-11-07 8:41 ` [edk2-devel] [PATCH v2 16/30] ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg Chao Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5d8d98eb-99ee-4c8d-9da4-7edb37689101@loongson.cn \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox