public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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 --]

  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