回复: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0

gaoliming via groups.io posted 1 patch 4 months, 1 week ago
Failed in applying to current master (apply log)
.../Library/PeiServicesTablePointerLib.h      |  9 +-
.../PeiServicesTablePointer.c                 | 87 +++++++++++++++++++
.../PeiServicesTablePointerLibKs0.inf         | 37 ++++++++
.../PeiServicesTablePointerLibKs0.uni         | 20 +++++
MdePkg/MdePkg.dsc                             |  3 +
5 files changed, 152 insertions(+), 4 deletions(-)
create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
回复: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0
Posted by gaoliming via groups.io 4 months, 1 week ago
Chao:

 For the changes in MdePkg, I have two comments here. 

 

1)      DebugSupport.h definition is from UEFI spec. Current definitions match the latest spec UEFI2.10. And, current definitions follow the same style to other archs. 

2)      CpuLib.h. The patch removes #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64), then these APIs are exposed for all archs, but ARM and RISCV don’t support them. So, I suggest to update it as below.  

 

#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)

==>

#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) || defined (MDE_CPU_LOONGARCH64) 

 

Thanks

Liming

发件人: Chao Li <lichao@loongson.cn> 
发送时间: 2023年12月20日 9:21
收件人: gaoliming <gaoliming@byosoft.com.cn>; devel@edk2.groups.io; 'Michael D Kinney' <michael.d.kinney@intel.com>
抄送: 'Zhiguang Liu' <zhiguang.liu@intel.com>; 'Laszlo Ersek' <lersek@redhat.com>
主题: Re: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0

 

Hi Liming,

Yes, the code branch is in my private repo, here is the link: https://github.com/kilaterlee/edk2/tree/push1102

 

Thanks,
Chao

On 2023/12/19 21:07, gaoliming wrote:

Chao:

 Is there a branch or pull request for this patch set? I would like to check how this new library instance be used.

 

Thanks

Liming

发件人: devel@edk2.groups.io <mailto:devel@edk2.groups.io>   <mailto:devel@edk2.groups.io> <devel@edk2.groups.io> 代表 Chao Li
发送时间: 2023年12月19日 21:01
收件人: devel@edk2.groups.io <mailto:devel@edk2.groups.io> ; Michael D Kinney  <mailto:michael.d.kinney@intel.com> <michael.d.kinney@intel.com>; Liming Gao  <mailto:gaoliming@byosoft.com.cn> <gaoliming@byosoft.com.cn>
抄送: Zhiguang Liu  <mailto:zhiguang.liu@intel.com> <zhiguang.liu@intel.com>; Laszlo Ersek  <mailto:lersek@redhat.com> <lersek@redhat.com>
主题: Re: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0

 

Hi Mike and Liming,

Can you please review this patch? Thank you! 

 

Thanks,
Chao

On 2023/12/12 21:11, Chao Li wrote:

Adding PeiServicesTablePointerLibKs0 for LoongArch64, which provides
setting and getting the PEI service table pointer through the CSR KS0
register.
 
The idea of this library is derived from
ArmPkg/Library/PeiServicesTablePointerLib/
 
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584
 
Cc: Michael D Kinney  <mailto:michael.d.kinney@intel.com> <michael.d.kinney@intel.com>
Cc: Liming Gao  <mailto:gaoliming@byosoft.com.cn> <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu  <mailto:zhiguang.liu@intel.com> <zhiguang.liu@intel.com>
Cc: Laszlo Ersek  <mailto:lersek@redhat.com> <lersek@redhat.com>
Signed-off-by: Chao Li  <mailto:lichao@loongson.cn> <lichao@loongson.cn>
---
 .../Library/PeiServicesTablePointerLib.h      |  9 +-
 .../PeiServicesTablePointer.c                 | 87 +++++++++++++++++++
 .../PeiServicesTablePointerLibKs0.inf         | 37 ++++++++
 .../PeiServicesTablePointerLibKs0.uni         | 20 +++++
 MdePkg/MdePkg.dsc                             |  3 +
 5 files changed, 152 insertions(+), 4 deletions(-)
 create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
 create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
 create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
 
diff --git a/MdePkg/Include/Library/PeiServicesTablePointerLib.h b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
index 61635eff00..f85c38363c 100644
--- a/MdePkg/Include/Library/PeiServicesTablePointerLib.h
+++ b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
@@ -52,10 +52,11 @@ SetPeiServicesTablePointer (
   immediately preceding the Interrupt Descriptor Table (IDT) in memory.
   For X64 CPUs, the PEI Services Table pointer is stored in the 8 bytes
   immediately preceding the Interrupt Descriptor Table (IDT) in memory.
-  For Itanium and ARM CPUs, a the PEI Services Table Pointer is stored in
-  a dedicated CPU register.  This means that there is no memory storage
-  associated with storing the PEI Services Table pointer, so no additional
-  migration actions are required for Itanium or ARM CPUs.
+  For Itanium, ARM and LoongArch CPUs, a the PEI Services Table Pointer
+  is stored in a dedicated CPU register.  This means that there is no
+  memory storage associated with storing the PEI Services Table pointer,
+  so no additional migration actions are required for Itanium, ARM and
+  LoongArch CPUs.
 
 **/
 VOID
diff --git a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
new file mode 100644
index 0000000000..2560b232f9
--- /dev/null
+++ b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
@@ -0,0 +1,87 @@
+/** @file
+  PEI Services Table Pointer Library For Reigseter Mechanism.
+
+  This library is used for PEIM which does executed from flash device directly but
+  executed in memory.
+
+  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2011 Hewlett-Packard Corporation. All rights reserved.<BR>
+  Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PiPei.h>
+#include <Library/DebugLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Register/LoongArch64/Csr.h>
+
+/**
+  Caches a pointer PEI Services Table.
+
+  Caches the pointer to the PEI Services Table specified by PeiServicesTablePointer
+  in a platform specific manner.
+
+  If PeiServicesTablePointer is NULL, then ASSERT().
+
+  @param    PeiServicesTablePointer   The address of PeiServices pointer.
+**/
+VOID
+EFIAPI
+SetPeiServicesTablePointer (
+  IN CONST EFI_PEI_SERVICES  **PeiServicesTablePointer
+  )
+{
+  ASSERT (PeiServicesTablePointer != NULL);
+  CsrWrite (LOONGARCH_CSR_KS0, (UINTN)PeiServicesTablePointer);
+}
+
+/**
+  Retrieves the cached value of the PEI Services Table pointer.
+
+  Returns the cached value of the PEI Services Table pointer in a CPU specific manner
+  as specified in the CPU binding section of the Platform Initialization Pre-EFI
+  Initialization Core Interface Specification.
+
+  If the cached PEI Services Table pointer is NULL, then ASSERT().
+
+  @return  The pointer to PeiServices.
+
+**/
+CONST EFI_PEI_SERVICES **
+EFIAPI
+GetPeiServicesTablePointer (
+  VOID
+  )
+{
+  CONST EFI_PEI_SERVICES  **PeiServices;
+
+  PeiServices = (CONST EFI_PEI_SERVICES **)(CsrRead (LOONGARCH_CSR_KS0));
+  ASSERT (PeiServices != NULL);
+  return PeiServices;
+}
+
+/**
+  Perform CPU specific actions required to migrate the PEI Services Table
+  pointer from temporary RAM to permanent RAM.
+
+  For IA32 CPUs, the PEI Services Table pointer is stored in the 4 bytes
+  immediately preceding the Interrupt Descriptor Table (IDT) in memory.
+  For X64 CPUs, the PEI Services Table pointer is stored in the 8 bytes
+  immediately preceding the Interrupt Descriptor Table (IDT) in memory.
+  For Itanium, ARM and LoongArch CPUs, a the PEI Services Table Pointer
+  is stored in a dedicated CPU register.  This means that there is no
+  memory storage associated with storing the PEI Services Table pointer,
+  so no additional migration actions are required for Itanium, ARM and
+  LoongArch CPUs.
+
+**/
+VOID
+EFIAPI
+MigratePeiServicesTablePointer (
+  VOID
+  )
+{
+  return;
+}
diff --git a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
new file mode 100644
index 0000000000..e8ecd4616d
--- /dev/null
+++ b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
@@ -0,0 +1,37 @@
+## @file
+# Instance of PEI Services Table Pointer Library using register CSR KS0 for the table pointer.
+#
+# PEI Services Table Pointer Library implementation that retrieves a pointer to the
+# PEI Services Table from a CPU register. Applies to modules that execute from
+# read-only memory.
+#
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 Hewlett-Packard Corporation. All rights reserved.<BR>
+# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 1.29
+  BASE_NAME                      = PeiServicesTablePointerLib
+  MODULE_UNI_FILE                = PeiServicesTablePointerLibKs0.uni
+  FILE_GUID                      = 619950D1-7C5F-EA1B-D6DD-2FF7B0A4A2B7
+  MODULE_TYPE                    = PEIM
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = PeiServicesTablePointerLib|PEIM PEI_CORE SEC
+
+#
+#  VALID_ARCHITECTURES           = LOONGARCH64
+#
+
+[Sources]
+  PeiServicesTablePointer.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  DebugLib
diff --git a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
new file mode 100644
index 0000000000..2539448ce5
--- /dev/null
+++ b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
@@ -0,0 +1,20 @@
+// /** @file
+// Instance of PEI Services Table Pointer Library using register CSR KS0 for the table pointer.
+//
+// PEI Services Table Pointer Library implementation that retrieves a pointer to the
+// PEI Services Table from a CPU register. Applies to modules that execute from
+// read-only memory.
+//
+// Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+// Copyright (c) 2011 Hewlett-Packard Corporation. All rights reserved.<BR>
+// Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+
+#string STR_MODULE_ABSTRACT             #language en-US "Instance of PEI Services Table Pointer Library using CPU register for the table pointer"
+
+#string STR_MODULE_DESCRIPTION          #language en-US "The PEI Services Table Pointer Library implementation that retrieves a pointer to the PEI Services Table from a CPU register. Applies to modules that execute from read-only memory."
+
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
index 3abd1a1e23..109224c527 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -200,4 +200,7 @@
   MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLib.inf
   MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLibRam.inf
 
+[Components.LOONGARCH64]
+  MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
+
 [BuildOptions]





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112802): https://edk2.groups.io/g/devel/message/112802
Mute This Topic: https://groups.io/mt/103296576/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: 回复: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0
Posted by Chao Li 4 months, 1 week ago
Hi Liming,

Sorry, I forget to CC you when I submitted the patch that modified the 
DebugSupport.h, I originally planned to CC you when I submitted V5.

My answer:


Thanks,
Chao
On 2023/12/21 15:16, gaoliming wrote:
>
> Chao:
>
>  For the changes in MdePkg, I have two comments here.
>
> 1)DebugSupport.h definition is from UEFI spec. Current definitions 
> match the latest spec UEFI2.10. And, current definitions follow the 
> same style to other archs.
>
I have submit the ECR to 
USWG(https://mantis.uefi.org/mantis/view.php?id=2431), and the ECR was 
marked "Added to homework pile" at 12/06/2023 USWG meeting, here is the 
meeting minutes link: https://members.uefi.org/wg/uswg/mail/thread/9948.

The USWG meeting saied may be V2.11 will release 2024, I'm not sure, so 
the ECR is code first.

Can I submit the code and merge the code first, and wait for the V2.11 
to be release? If we wait for the V2.11 to be release first, I guss we 
will probably wait a long time. In fact, RISC-V also modified this file 
when submitting the virtual-machine code, and the code does not match to 
the V2.10...

So, please help to merge first, please...

> 2)CpuLib.h. The patch removes #if defined (MDE_CPU_IA32) || defined 
> (MDE_CPU_X64), then these APIs are exposed for all archs, but ARM and 
> RISCV don’t support them. So, I suggest to update it as below.
>
> #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
>
> è
>
> #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) || defined 
> (MDE_CPU_LOONGARCH64)
>
Agree, I will fix it in V5.
>
> Thanks
>
> Liming
>
> *发件人:*Chao Li <lichao@loongson.cn>
> *发送时间:*2023年12月20日9:21
> *收件人:*gaoliming <gaoliming@byosoft.com.cn>; devel@edk2.groups.io; 
> 'Michael D Kinney' <michael.d.kinney@intel.com>
> *抄送:*'Zhiguang Liu' <zhiguang.liu@intel.com>; 'Laszlo Ersek' 
> <lersek@redhat.com>
> *主题:*Re: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library 
> named PeiServicesTablePointerLibKs0
>
> Hi Liming,
>
> Yes, the code branch is in my private repo, here is the link: 
> https://github.com/kilaterlee/edk2/tree/push1102
>
> Thanks,
> Chao
>
> On 2023/12/19 21:07, gaoliming wrote:
>
>     Chao:
>
>      Is there a branch or pull request for this patch set? I would
>     like to check how this new library instance be used.
>
>     Thanks
>
>     Liming
>
>     *发件人:*devel@edk2.groups.io <devel@edk2.groups.io>
>     <mailto:devel@edk2.groups.io> *代表 *Chao Li
>     *发送时间:*2023年12月19日 21:01
>     *收件人:*devel@edk2.groups.io; Michael D Kinney
>     <michael.d.kinney@intel.com> <mailto:michael.d.kinney@intel.com>;
>     Liming Gao <gaoliming@byosoft.com.cn>
>     <mailto:gaoliming@byosoft.com.cn>
>     *抄送:*Zhiguang Liu <zhiguang.liu@intel.com>
>     <mailto:zhiguang.liu@intel.com>; Laszlo Ersek <lersek@redhat.com>
>     <mailto:lersek@redhat.com>
>     *主题:*Re: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library
>     named PeiServicesTablePointerLibKs0
>
>     Hi Mike and Liming,
>
>     Can you please review this patch? Thank you!
>
>     Thanks,
>     Chao
>
>     On 2023/12/12 21:11, Chao Li wrote:
>
>         Adding PeiServicesTablePointerLibKs0 for LoongArch64, which
>         provides
>
>         setting and getting the PEI service table pointer through the
>         CSR KS0
>
>         register.
>
>         The idea of this library is derived from
>
>         ArmPkg/Library/PeiServicesTablePointerLib/
>
>         BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584
>
>         Cc: Michael D Kinney <michael.d.kinney@intel.com>
>         <mailto:michael.d.kinney@intel.com>
>
>         Cc: Liming Gao <gaoliming@byosoft.com.cn>
>         <mailto:gaoliming@byosoft.com.cn>
>
>         Cc: Zhiguang Liu <zhiguang.liu@intel.com>
>         <mailto:zhiguang.liu@intel.com>
>
>         Cc: Laszlo Ersek <lersek@redhat.com> <mailto:lersek@redhat.com>
>
>         Signed-off-by: Chao Li <lichao@loongson.cn>
>         <mailto:lichao@loongson.cn>
>
>         ---
>
>         .../Library/PeiServicesTablePointerLib.h      |  9 +-
>
>         .../PeiServicesTablePointer.c                 | 87
>         +++++++++++++++++++
>
>         .../PeiServicesTablePointerLibKs0.inf         | 37 ++++++++
>
>         .../PeiServicesTablePointerLibKs0.uni         | 20 +++++
>
>         MdePkg/MdePkg.dsc                             |  3 +
>
>         5 files changed, 152 insertions(+), 4 deletions(-)
>
>         create mode 100644
>         MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>
>         create mode 100644
>         MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>         create mode 100644
>         MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>
>         diff --git
>         a/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>         b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>
>         index 61635eff00..f85c38363c 100644
>
>         --- a/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>
>         +++ b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>
>         @@ -52,10 +52,11 @@ SetPeiServicesTablePointer (
>
>            immediately preceding the Interrupt Descriptor Table (IDT)
>         in memory.
>
>            For X64 CPUs, the PEI Services Table pointer is stored in
>         the 8 bytes
>
>            immediately preceding the Interrupt Descriptor Table (IDT)
>         in memory.
>
>         -  For Itanium and ARM CPUs, a the PEI Services Table Pointer
>         is stored in
>
>         -  a dedicated CPU register.  This means that there is no
>         memory storage
>
>         -  associated with storing the PEI Services Table pointer, so
>         no additional
>
>         -  migration actions are required for Itanium or ARM CPUs.
>
>         +  For Itanium, ARM and LoongArch CPUs, a the PEI Services
>         Table Pointer
>
>         +  is stored in a dedicated CPU register.  This means that
>         there is no
>
>         +  memory storage associated with storing the PEI Services
>         Table pointer,
>
>         +  so no additional migration actions are required for
>         Itanium, ARM and
>
>         +  LoongArch CPUs.
>
>          **/
>
>         VOID
>
>         diff --git
>         a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>         b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>
>         new file mode 100644
>
>         index 0000000000..2560b232f9
>
>         --- /dev/null
>
>         +++
>         b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>
>         @@ -0,0 +1,87 @@
>
>         +/** @file
>
>         +  PEI Services Table Pointer Library For Reigseter Mechanism.
>
>         +
>
>         +  This library is used for PEIM which does executed from
>         flash device directly but
>
>         +  executed in memory.
>
>         +
>
>         +  Copyright (c) 2006 - 2010, Intel Corporation. All rights
>         reserved.<BR>
>
>         +  Copyright (c) 2011 Hewlett-Packard Corporation. All rights
>         reserved.<BR>
>
>         +  Copyright (c) 2023 Loongson Technology Corporation Limited.
>         All rights reserved.<BR>
>
>         +
>
>         +  SPDX-License-Identifier: BSD-2-Clause-Patent
>
>         +
>
>         +**/
>
>         +
>
>         +#include <PiPei.h>
>
>         +#include <Library/DebugLib.h>
>
>         +#include <Library/PeiServicesTablePointerLib.h>
>
>         +#include <Register/LoongArch64/Csr.h>
>
>         +
>
>         +/**
>
>         +  Caches a pointer PEI Services Table.
>
>         +
>
>         +  Caches the pointer to the PEI Services Table specified by
>         PeiServicesTablePointer
>
>         +  in a platform specific manner.
>
>         +
>
>         +  If PeiServicesTablePointer is NULL, then ASSERT().
>
>         +
>
>         +  @param    PeiServicesTablePointer   The address of
>         PeiServices pointer.
>
>         +**/
>
>         +VOID
>
>         +EFIAPI
>
>         +SetPeiServicesTablePointer (
>
>         +  IN CONST EFI_PEI_SERVICES  **PeiServicesTablePointer
>
>         +  )
>
>         +{
>
>         +  ASSERT (PeiServicesTablePointer != NULL);
>
>         +  CsrWrite (LOONGARCH_CSR_KS0, (UINTN)PeiServicesTablePointer);
>
>         +}
>
>         +
>
>         +/**
>
>         +  Retrieves the cached value of the PEI Services Table pointer.
>
>         +
>
>         +  Returns the cached value of the PEI Services Table pointer
>         in a CPU specific manner
>
>         +  as specified in the CPU binding section of the Platform
>         Initialization Pre-EFI
>
>         +  Initialization Core Interface Specification.
>
>         +
>
>         +  If the cached PEI Services Table pointer is NULL, then
>         ASSERT().
>
>         +
>
>         +  @return  The pointer to PeiServices.
>
>         +
>
>         +**/
>
>         +CONST EFI_PEI_SERVICES **
>
>         +EFIAPI
>
>         +GetPeiServicesTablePointer (
>
>         +  VOID
>
>         +  )
>
>         +{
>
>         +  CONST EFI_PEI_SERVICES  **PeiServices;
>
>         +
>
>         +  PeiServices = (CONST EFI_PEI_SERVICES **)(CsrRead
>         (LOONGARCH_CSR_KS0));
>
>         +  ASSERT (PeiServices != NULL);
>
>         +  return PeiServices;
>
>         +}
>
>         +
>
>         +/**
>
>         +  Perform CPU specific actions required to migrate the PEI
>         Services Table
>
>         +  pointer from temporary RAM to permanent RAM.
>
>         +
>
>         +  For IA32 CPUs, the PEI Services Table pointer is stored in
>         the 4 bytes
>
>         +  immediately preceding the Interrupt Descriptor Table (IDT)
>         in memory.
>
>         +  For X64 CPUs, the PEI Services Table pointer is stored in
>         the 8 bytes
>
>         +  immediately preceding the Interrupt Descriptor Table (IDT)
>         in memory.
>
>         +  For Itanium, ARM and LoongArch CPUs, a the PEI Services
>         Table Pointer
>
>         +  is stored in a dedicated CPU register.  This means that
>         there is no
>
>         +  memory storage associated with storing the PEI Services
>         Table pointer,
>
>         +  so no additional migration actions are required for
>         Itanium, ARM and
>
>         +  LoongArch CPUs.
>
>         +
>
>         +**/
>
>         +VOID
>
>         +EFIAPI
>
>         +MigratePeiServicesTablePointer (
>
>         +  VOID
>
>         +  )
>
>         +{
>
>         +  return;
>
>         +}
>
>         diff --git
>         a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>         b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>         new file mode 100644
>
>         index 0000000000..e8ecd4616d
>
>         --- /dev/null
>
>         +++
>         b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>         @@ -0,0 +1,37 @@
>
>         +## @file
>
>         +# Instance of PEI Services Table Pointer Library using
>         register CSR KS0 for the table pointer.
>
>         +#
>
>         +# PEI Services Table Pointer Library implementation that
>         retrieves a pointer to the
>
>         +# PEI Services Table from a CPU register. Applies to modules
>         that execute from
>
>         +# read-only memory.
>
>         +#
>
>         +# Copyright (c) 2007 - 2018, Intel Corporation. All rights
>         reserved.<BR>
>
>         +# Copyright (c) 2011 Hewlett-Packard Corporation. All rights
>         reserved.<BR>
>
>         +# Copyright (c) 2023 Loongson Technology Corporation Limited.
>         All rights reserved.<BR>
>
>         +#
>
>         +#  SPDX-License-Identifier: BSD-2-Clause-Patent
>
>         +#
>
>         +#
>
>         +##
>
>         +
>
>         +[Defines]
>
>         +  INF_VERSION                    = 1.29
>
>         +  BASE_NAME                      = PeiServicesTablePointerLib
>
>         +  MODULE_UNI_FILE                =
>         PeiServicesTablePointerLibKs0.uni
>
>         +  FILE_GUID                      =
>         619950D1-7C5F-EA1B-D6DD-2FF7B0A4A2B7
>
>         +  MODULE_TYPE                    = PEIM
>
>         +  VERSION_STRING                 = 1.0
>
>         +  LIBRARY_CLASS                  =
>         PeiServicesTablePointerLib|PEIM PEI_CORE SEC
>
>         +
>
>         +#
>
>         +#  VALID_ARCHITECTURES           = LOONGARCH64
>
>         +#
>
>         +
>
>         +[Sources]
>
>         +  PeiServicesTablePointer.c
>
>         +
>
>         +[Packages]
>
>         +  MdePkg/MdePkg.dec
>
>         +
>
>         +[LibraryClasses]
>
>         +  DebugLib
>
>         diff --git
>         a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>         b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>
>         new file mode 100644
>
>         index 0000000000..2539448ce5
>
>         --- /dev/null
>
>         +++
>         b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>
>         @@ -0,0 +1,20 @@
>
>         +// /** @file
>
>         +// Instance of PEI Services Table Pointer Library using
>         register CSR KS0 for the table pointer.
>
>         +//
>
>         +// PEI Services Table Pointer Library implementation that
>         retrieves a pointer to the
>
>         +// PEI Services Table from a CPU register. Applies to modules
>         that execute from
>
>         +// read-only memory.
>
>         +//
>
>         +// Copyright (c) 2007 - 2018, Intel Corporation. All rights
>         reserved.<BR>
>
>         +// Copyright (c) 2011 Hewlett-Packard Corporation. All rights
>         reserved.<BR>
>
>         +// Copyright (c) 2023 Loongson Technology Corporation
>         Limited. All rights reserved.<BR>
>
>         +//
>
>         +// SPDX-License-Identifier: BSD-2-Clause-Patent
>
>         +//
>
>         +// **/
>
>         +
>
>         +
>
>         +#string STR_MODULE_ABSTRACT             #language en-US
>         "Instance of PEI Services Table Pointer Library using CPU
>         register for the table pointer"
>
>         +
>
>         +#string STR_MODULE_DESCRIPTION          #language en-US "The
>         PEI Services Table Pointer Library implementation that
>         retrieves a pointer to the PEI Services Table from a CPU
>         register. Applies to modules that execute from read-only memory."
>
>         +
>
>         diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
>
>         index 3abd1a1e23..109224c527 100644
>
>         --- a/MdePkg/MdePkg.dsc
>
>         +++ b/MdePkg/MdePkg.dsc
>
>         @@ -200,4 +200,7 @@
>
>           
>         MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLib.inf
>
>           
>         MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLibRam.inf
>
>         +[Components.LOONGARCH64]
>
>         + 
>         MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>         +
>
>         [BuildOptions]
>
>     
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112810): https://edk2.groups.io/g/devel/message/112810
Mute This Topic: https://groups.io/mt/103296576/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


回复: 回复: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0
Posted by gaoliming via groups.io 4 months ago
Chao:

 I add my comments below. 

 

发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Chao Li
发送时间: 2023年12月21日 19:19
收件人: gaoliming <gaoliming@byosoft.com.cn>; devel@edk2.groups.io; 'Michael D Kinney' <michael.d.kinney@intel.com>
抄送: 'Zhiguang Liu' <zhiguang.liu@intel.com>; 'Laszlo Ersek' <lersek@redhat.com>
主题: Re: 回复: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0

 

Hi Liming,

Sorry, I forget to CC you when I submitted the patch that modified the DebugSupport.h, I originally planned to CC you when I submitted V5.

My answer:

 

Thanks,
Chao

On 2023/12/21 15:16, gaoliming wrote:

Chao:

 For the changes in MdePkg, I have two comments here. 

 

1.  DebugSupport.h definition is from UEFI spec. Current definitions match the latest spec UEFI2.10. And, current definitions follow the same style to other archs. 

I have submit the ECR to USWG(https://mantis.uefi.org/mantis/view.php?id=2431), and the ECR was marked "Added to homework pile" at 12/06/2023 USWG meeting, here is the meeting minutes link: https://members.uefi.org/wg/uswg/mail/thread/9948.

The USWG meeting saied may be V2.11 will release 2024, I'm not sure, so the ECR is code first.

Can I submit the code and merge the code first, and wait for the V2.11 to be release? If we wait for the V2.11 to be release first, I guss we will probably wait a long time. In fact, RISC-V also modified this file when submitting the virtual-machine code, and the code does not match to the V2.10...

So, please help to merge first, please...

[Liming] I understand current situation. Code first process is to add the code implementation in edk2 staging branch. I may suggest to delay this change only. Other changes can be continued to be merged. 

Thanks

2.  CpuLib.h. The patch removes #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64), then these APIs are exposed for all archs, but ARM and RISCV don’t support them. So, I suggest to update it as below.  

 

#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)

==>

#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) || defined (MDE_CPU_LOONGARCH64) 

Agree, I will fix it in V5.



 

Thanks

Liming

发件人: Chao Li  <mailto:lichao@loongson.cn> <lichao@loongson.cn> 
发送时间: 2023年12月20日 9:21
收件人: gaoliming  <mailto:gaoliming@byosoft.com.cn> <gaoliming@byosoft.com.cn>; devel@edk2.groups.io <mailto:devel@edk2.groups.io> ; 'Michael D Kinney'  <mailto:michael.d.kinney@intel.com> <michael.d.kinney@intel.com>
抄送: 'Zhiguang Liu'  <mailto:zhiguang.liu@intel.com> <zhiguang.liu@intel.com>; 'Laszlo Ersek'  <mailto:lersek@redhat.com> <lersek@redhat.com>
主题: Re: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0

 

Hi Liming,

Yes, the code branch is in my private repo, here is the link: https://github.com/kilaterlee/edk2/tree/push1102

 

Thanks,
Chao

On 2023/12/19 21:07, gaoliming wrote:

Chao:

 Is there a branch or pull request for this patch set? I would like to check how this new library instance be used.

 

Thanks

Liming

发件人: devel@edk2.groups.io <mailto:devel@edk2.groups.io>   <mailto:devel@edk2.groups.io> <devel@edk2.groups.io> 代表 Chao Li
发送时间: 2023年12月19日 21:01
收件人: devel@edk2.groups.io <mailto:devel@edk2.groups.io> ; Michael D Kinney  <mailto:michael.d.kinney@intel.com> <michael.d.kinney@intel.com>; Liming Gao  <mailto:gaoliming@byosoft.com.cn> <gaoliming@byosoft.com.cn>
抄送: Zhiguang Liu  <mailto:zhiguang.liu@intel.com> <zhiguang.liu@intel.com>; Laszlo Ersek  <mailto:lersek@redhat.com> <lersek@redhat.com>
主题: Re: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0

 

Hi Mike and Liming,

Can you please review this patch? Thank you! 

 

Thanks,
Chao

On 2023/12/12 21:11, Chao Li wrote:

Adding PeiServicesTablePointerLibKs0 for LoongArch64, which provides
setting and getting the PEI service table pointer through the CSR KS0
register.
 
The idea of this library is derived from
ArmPkg/Library/PeiServicesTablePointerLib/
 
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584
 
Cc: Michael D Kinney  <mailto:michael.d.kinney@intel.com> <michael.d.kinney@intel.com>
Cc: Liming Gao  <mailto:gaoliming@byosoft.com.cn> <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu  <mailto:zhiguang.liu@intel.com> <zhiguang.liu@intel.com>
Cc: Laszlo Ersek  <mailto:lersek@redhat.com> <lersek@redhat.com>
Signed-off-by: Chao Li  <mailto:lichao@loongson.cn> <lichao@loongson.cn>
---
 .../Library/PeiServicesTablePointerLib.h      |  9 +-
 .../PeiServicesTablePointer.c                 | 87 +++++++++++++++++++
 .../PeiServicesTablePointerLibKs0.inf         | 37 ++++++++
 .../PeiServicesTablePointerLibKs0.uni         | 20 +++++
 MdePkg/MdePkg.dsc                             |  3 +
 5 files changed, 152 insertions(+), 4 deletions(-)
 create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
 create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
 create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
 
diff --git a/MdePkg/Include/Library/PeiServicesTablePointerLib.h b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
index 61635eff00..f85c38363c 100644
--- a/MdePkg/Include/Library/PeiServicesTablePointerLib.h
+++ b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
@@ -52,10 +52,11 @@ SetPeiServicesTablePointer (
   immediately preceding the Interrupt Descriptor Table (IDT) in memory.
   For X64 CPUs, the PEI Services Table pointer is stored in the 8 bytes
   immediately preceding the Interrupt Descriptor Table (IDT) in memory.
-  For Itanium and ARM CPUs, a the PEI Services Table Pointer is stored in
-  a dedicated CPU register.  This means that there is no memory storage
-  associated with storing the PEI Services Table pointer, so no additional
-  migration actions are required for Itanium or ARM CPUs.
+  For Itanium, ARM and LoongArch CPUs, a the PEI Services Table Pointer
+  is stored in a dedicated CPU register.  This means that there is no
+  memory storage associated with storing the PEI Services Table pointer,
+  so no additional migration actions are required for Itanium, ARM and
+  LoongArch CPUs.
 
 **/
 VOID
diff --git a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
new file mode 100644
index 0000000000..2560b232f9
--- /dev/null
+++ b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
@@ -0,0 +1,87 @@
+/** @file
+  PEI Services Table Pointer Library For Reigseter Mechanism.
+
+  This library is used for PEIM which does executed from flash device directly but
+  executed in memory.
+
+  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2011 Hewlett-Packard Corporation. All rights reserved.<BR>
+  Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PiPei.h>
+#include <Library/DebugLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Register/LoongArch64/Csr.h>
+
+/**
+  Caches a pointer PEI Services Table.
+
+  Caches the pointer to the PEI Services Table specified by PeiServicesTablePointer
+  in a platform specific manner.
+
+  If PeiServicesTablePointer is NULL, then ASSERT().
+
+  @param    PeiServicesTablePointer   The address of PeiServices pointer.
+**/
+VOID
+EFIAPI
+SetPeiServicesTablePointer (
+  IN CONST EFI_PEI_SERVICES  **PeiServicesTablePointer
+  )
+{
+  ASSERT (PeiServicesTablePointer != NULL);
+  CsrWrite (LOONGARCH_CSR_KS0, (UINTN)PeiServicesTablePointer);
+}
+
+/**
+  Retrieves the cached value of the PEI Services Table pointer.
+
+  Returns the cached value of the PEI Services Table pointer in a CPU specific manner
+  as specified in the CPU binding section of the Platform Initialization Pre-EFI
+  Initialization Core Interface Specification.
+
+  If the cached PEI Services Table pointer is NULL, then ASSERT().
+
+  @return  The pointer to PeiServices.
+
+**/
+CONST EFI_PEI_SERVICES **
+EFIAPI
+GetPeiServicesTablePointer (
+  VOID
+  )
+{
+  CONST EFI_PEI_SERVICES  **PeiServices;
+
+  PeiServices = (CONST EFI_PEI_SERVICES **)(CsrRead (LOONGARCH_CSR_KS0));
+  ASSERT (PeiServices != NULL);
+  return PeiServices;
+}
+
+/**
+  Perform CPU specific actions required to migrate the PEI Services Table
+  pointer from temporary RAM to permanent RAM.
+
+  For IA32 CPUs, the PEI Services Table pointer is stored in the 4 bytes
+  immediately preceding the Interrupt Descriptor Table (IDT) in memory.
+  For X64 CPUs, the PEI Services Table pointer is stored in the 8 bytes
+  immediately preceding the Interrupt Descriptor Table (IDT) in memory.
+  For Itanium, ARM and LoongArch CPUs, a the PEI Services Table Pointer
+  is stored in a dedicated CPU register.  This means that there is no
+  memory storage associated with storing the PEI Services Table pointer,
+  so no additional migration actions are required for Itanium, ARM and
+  LoongArch CPUs.
+
+**/
+VOID
+EFIAPI
+MigratePeiServicesTablePointer (
+  VOID
+  )
+{
+  return;
+}
diff --git a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
new file mode 100644
index 0000000000..e8ecd4616d
--- /dev/null
+++ b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
@@ -0,0 +1,37 @@
+## @file
+# Instance of PEI Services Table Pointer Library using register CSR KS0 for the table pointer.
+#
+# PEI Services Table Pointer Library implementation that retrieves a pointer to the
+# PEI Services Table from a CPU register. Applies to modules that execute from
+# read-only memory.
+#
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 Hewlett-Packard Corporation. All rights reserved.<BR>
+# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 1.29
+  BASE_NAME                      = PeiServicesTablePointerLib
+  MODULE_UNI_FILE                = PeiServicesTablePointerLibKs0.uni
+  FILE_GUID                      = 619950D1-7C5F-EA1B-D6DD-2FF7B0A4A2B7
+  MODULE_TYPE                    = PEIM
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = PeiServicesTablePointerLib|PEIM PEI_CORE SEC
+
+#
+#  VALID_ARCHITECTURES           = LOONGARCH64
+#
+
+[Sources]
+  PeiServicesTablePointer.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  DebugLib
diff --git a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
new file mode 100644
index 0000000000..2539448ce5
--- /dev/null
+++ b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
@@ -0,0 +1,20 @@
+// /** @file
+// Instance of PEI Services Table Pointer Library using register CSR KS0 for the table pointer.
+//
+// PEI Services Table Pointer Library implementation that retrieves a pointer to the
+// PEI Services Table from a CPU register. Applies to modules that execute from
+// read-only memory.
+//
+// Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+// Copyright (c) 2011 Hewlett-Packard Corporation. All rights reserved.<BR>
+// Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+
+#string STR_MODULE_ABSTRACT             #language en-US "Instance of PEI Services Table Pointer Library using CPU register for the table pointer"
+
+#string STR_MODULE_DESCRIPTION          #language en-US "The PEI Services Table Pointer Library implementation that retrieves a pointer to the PEI Services Table from a CPU register. Applies to modules that execute from read-only memory."
+
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
index 3abd1a1e23..109224c527 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -200,4 +200,7 @@
   MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLib.inf
   MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLibRam.inf
 
+[Components.LOONGARCH64]
+  MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
+
 [BuildOptions]





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112877): https://edk2.groups.io/g/devel/message/112877
Mute This Topic: https://groups.io/mt/103355356/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: 回复: 回复: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0
Posted by Chao Li 4 months ago
Liming,

I can use another way to differentiate between interrupts and exceptions 
when registering them. In this way, DebugSupport.h doesn't need to be 
changed. In UEFI V2.11,  I will supplement the excpetion types supported 
by edk2, and adjust the max number of interrupts and exceptions.

Last question: can I add some comments in the DebugSupport.h? Of curse, 
the annotation to be added doesn't appear in the UEFI V2.10.


Thanks,
Chao
On 2023/12/25 09:33, gaoliming wrote:
>
> Chao:
>
>  I add my comments below.
>
> *发件人:*devel@edk2.groups.io <devel@edk2.groups.io> *代表 *Chao Li
> *发送时间:*2023年12月21日19:19
> *收件人:*gaoliming <gaoliming@byosoft.com.cn>; devel@edk2.groups.io; 
> 'Michael D Kinney' <michael.d.kinney@intel.com>
> *抄送:*'Zhiguang Liu' <zhiguang.liu@intel.com>; 'Laszlo Ersek' 
> <lersek@redhat.com>
> *主题:*Re: 回复: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new 
> library named PeiServicesTablePointerLibKs0
>
> Hi Liming,
>
> Sorry, I forget to CC you when I submitted the patch that modified the 
> DebugSupport.h, I originally planned to CC you when I submitted V5.
>
> My answer:
>
> Thanks,
> Chao
>
> On 2023/12/21 15:16, gaoliming wrote:
>
>     Chao:
>
>      For the changes in MdePkg, I have two comments here.
>
>     1.DebugSupport.h definition is from UEFI spec. Current definitions
>     match the latest spec UEFI2.10. And, current definitions follow
>     the same style to other archs.
>
> I have submit the ECR to 
> USWG(https://mantis.uefi.org/mantis/view.php?id=2431), and the ECR was 
> marked "Added to homework pile" at 12/06/2023 USWG meeting, here is 
> the meeting minutes link: 
> https://members.uefi.org/wg/uswg/mail/thread/9948.
>
> The USWG meeting saied may be V2.11 will release 2024, I'm not sure, 
> so the ECR is code first.
>
> Can I submit the code and merge the code first, and wait for the V2.11 
> to be release? If we wait for the V2.11 to be release first, I guss we 
> will probably wait a long time. In fact, RISC-V also modified this 
> file when submitting the virtual-machine code, and the code does not 
> match to the V2.10...
>
> So, please help to merge first, please...
>
> [Liming] I understand current situation. Code first process is to add 
> the code implementation in edk2 staging branch. I may suggest to delay 
> this change only. Other changes can be continued to be merged.
>
> Thanks
>
>     2.CpuLib.h. The patch removes #if defined (MDE_CPU_IA32) ||
>     defined (MDE_CPU_X64), then these APIs are exposed for all archs,
>     but ARM and RISCV don’t support them. So, I suggest to update it
>     as below.
>
>     #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
>
>     è
>
>     #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) || defined
>     (MDE_CPU_LOONGARCH64)
>
> Agree, I will fix it in V5.
>
>     Thanks
>
>     Liming
>
>     *发件人:*Chao Li <lichao@loongson.cn> <mailto:lichao@loongson.cn>
>     *发送时间:*2023年12月20日9:21
>     *收件人:*gaoliming <gaoliming@byosoft.com.cn>
>     <mailto:gaoliming@byosoft.com.cn>; devel@edk2.groups.io; 'Michael
>     D Kinney' <michael.d.kinney@intel.com>
>     <mailto:michael.d.kinney@intel.com>
>     *抄送:*'Zhiguang Liu' <zhiguang.liu@intel.com>
>     <mailto:zhiguang.liu@intel.com>; 'Laszlo Ersek'
>     <lersek@redhat.com> <mailto:lersek@redhat.com>
>     *主题:*Re: 回复: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new
>     library named PeiServicesTablePointerLibKs0
>
>     Hi Liming,
>
>     Yes, the code branch is in my private repo, here is the link:
>     https://github.com/kilaterlee/edk2/tree/push1102
>
>     Thanks,
>     Chao
>
>     On 2023/12/19 21:07, gaoliming wrote:
>
>         Chao:
>
>          Is there a branch or pull request for this patch set? I would
>         like to check how this new library instance be used.
>
>         Thanks
>
>         Liming
>
>         *发件人:*devel@edk2.groups.io <devel@edk2.groups.io>
>         <mailto:devel@edk2.groups.io> *代表 *Chao Li
>         *发送时间:*2023年12月19日21:01
>         *收件人:*devel@edk2.groups.io; Michael D Kinney
>         <michael.d.kinney@intel.com>
>         <mailto:michael.d.kinney@intel.com>; Liming Gao
>         <gaoliming@byosoft.com.cn> <mailto:gaoliming@byosoft.com.cn>
>         *抄送:*Zhiguang Liu <zhiguang.liu@intel.com>
>         <mailto:zhiguang.liu@intel.com>; Laszlo Ersek
>         <lersek@redhat.com> <mailto:lersek@redhat.com>
>         *主题:*Re: [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new
>         library named PeiServicesTablePointerLibKs0
>
>         Hi Mike and Liming,
>
>         Can you please review this patch? Thank you!
>
>         Thanks,
>         Chao
>
>         On 2023/12/12 21:11, Chao Li wrote:
>
>             Adding PeiServicesTablePointerLibKs0 for LoongArch64,
>             which provides
>
>             setting and getting the PEI service table pointer through
>             the CSR KS0
>
>             register.
>
>             The idea of this library is derived from
>
>             ArmPkg/Library/PeiServicesTablePointerLib/
>
>             BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584
>
>             Cc: Michael D Kinney <michael.d.kinney@intel.com>
>             <mailto:michael.d.kinney@intel.com>
>
>             Cc: Liming Gao <gaoliming@byosoft.com.cn>
>             <mailto:gaoliming@byosoft.com.cn>
>
>             Cc: Zhiguang Liu <zhiguang.liu@intel.com>
>             <mailto:zhiguang.liu@intel.com>
>
>             Cc: Laszlo Ersek <lersek@redhat.com>
>             <mailto:lersek@redhat.com>
>
>             Signed-off-by: Chao Li <lichao@loongson.cn>
>             <mailto:lichao@loongson.cn>
>
>             ---
>
>             .../Library/PeiServicesTablePointerLib.h      |  9 +-
>
>             .../PeiServicesTablePointer.c                 | 87
>             +++++++++++++++++++
>
>             .../PeiServicesTablePointerLibKs0.inf         | 37 ++++++++
>
>             .../PeiServicesTablePointerLibKs0.uni         | 20 +++++
>
>             MdePkg/MdePkg.dsc                             |  3 +
>
>             5 files changed, 152 insertions(+), 4 deletions(-)
>
>             create mode 100644
>             MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>
>             create mode 100644
>             MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>             create mode 100644
>             MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>
>             diff --git
>             a/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>             b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>
>             index 61635eff00..f85c38363c 100644
>
>             --- a/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>
>             +++ b/MdePkg/Include/Library/PeiServicesTablePointerLib.h
>
>             @@ -52,10 +52,11 @@ SetPeiServicesTablePointer (
>
>                immediately preceding the Interrupt Descriptor Table
>             (IDT) in memory.
>
>                For X64 CPUs, the PEI Services Table pointer is stored
>             in the 8 bytes
>
>                immediately preceding the Interrupt Descriptor Table
>             (IDT) in memory.
>
>             -  For Itanium and ARM CPUs, a the PEI Services Table
>             Pointer is stored in
>
>             -  a dedicated CPU register.  This means that there is no
>             memory storage
>
>             -  associated with storing the PEI Services Table pointer,
>             so no additional
>
>             -  migration actions are required for Itanium or ARM CPUs.
>
>             +  For Itanium, ARM and LoongArch CPUs, a the PEI Services
>             Table Pointer
>
>             +  is stored in a dedicated CPU register.  This means that
>             there is no
>
>             +  memory storage associated with storing the PEI Services
>             Table pointer,
>
>             +  so no additional migration actions are required for
>             Itanium, ARM and
>
>             +  LoongArch CPUs.
>
>              **/
>
>             VOID
>
>             diff --git
>             a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>             b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>
>             new file mode 100644
>
>             index 0000000000..2560b232f9
>
>             --- /dev/null
>
>             +++
>             b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointer.c
>
>             @@ -0,0 +1,87 @@
>
>             +/** @file
>
>             +  PEI Services Table Pointer Library For Reigseter Mechanism.
>
>             +
>
>             +  This library is used for PEIM which does executed from
>             flash device directly but
>
>             +  executed in memory.
>
>             +
>
>             +  Copyright (c) 2006 - 2010, Intel Corporation. All
>             rights reserved.<BR>
>
>             +  Copyright (c) 2011 Hewlett-Packard Corporation. All
>             rights reserved.<BR>
>
>             +  Copyright (c) 2023 Loongson Technology Corporation
>             Limited. All rights reserved.<BR>
>
>             +
>
>             +  SPDX-License-Identifier: BSD-2-Clause-Patent
>
>             +
>
>             +**/
>
>             +
>
>             +#include <PiPei.h>
>
>             +#include <Library/DebugLib.h>
>
>             +#include <Library/PeiServicesTablePointerLib.h>
>
>             +#include <Register/LoongArch64/Csr.h>
>
>             +
>
>             +/**
>
>             +  Caches a pointer PEI Services Table.
>
>             +
>
>             +  Caches the pointer to the PEI Services Table specified
>             by PeiServicesTablePointer
>
>             +  in a platform specific manner.
>
>             +
>
>             +  If PeiServicesTablePointer is NULL, then ASSERT().
>
>             +
>
>             +  @param    PeiServicesTablePointer   The address of
>             PeiServices pointer.
>
>             +**/
>
>             +VOID
>
>             +EFIAPI
>
>             +SetPeiServicesTablePointer (
>
>             +  IN CONST EFI_PEI_SERVICES  **PeiServicesTablePointer
>
>             +  )
>
>             +{
>
>             +  ASSERT (PeiServicesTablePointer != NULL);
>
>             +  CsrWrite (LOONGARCH_CSR_KS0,
>             (UINTN)PeiServicesTablePointer);
>
>             +}
>
>             +
>
>             +/**
>
>             +  Retrieves the cached value of the PEI Services Table
>             pointer.
>
>             +
>
>             +  Returns the cached value of the PEI Services Table
>             pointer in a CPU specific manner
>
>             +  as specified in the CPU binding section of the Platform
>             Initialization Pre-EFI
>
>             +  Initialization Core Interface Specification.
>
>             +
>
>             +  If the cached PEI Services Table pointer is NULL, then
>             ASSERT().
>
>             +
>
>             +  @return  The pointer to PeiServices.
>
>             +
>
>             +**/
>
>             +CONST EFI_PEI_SERVICES **
>
>             +EFIAPI
>
>             +GetPeiServicesTablePointer (
>
>             +  VOID
>
>             +  )
>
>             +{
>
>             +  CONST EFI_PEI_SERVICES  **PeiServices;
>
>             +
>
>             +  PeiServices = (CONST EFI_PEI_SERVICES **)(CsrRead
>             (LOONGARCH_CSR_KS0));
>
>             +  ASSERT (PeiServices != NULL);
>
>             +  return PeiServices;
>
>             +}
>
>             +
>
>             +/**
>
>             +  Perform CPU specific actions required to migrate the
>             PEI Services Table
>
>             +  pointer from temporary RAM to permanent RAM.
>
>             +
>
>             +  For IA32 CPUs, the PEI Services Table pointer is stored
>             in the 4 bytes
>
>             +  immediately preceding the Interrupt Descriptor Table
>             (IDT) in memory.
>
>             +  For X64 CPUs, the PEI Services Table pointer is stored
>             in the 8 bytes
>
>             +  immediately preceding the Interrupt Descriptor Table
>             (IDT) in memory.
>
>             +  For Itanium, ARM and LoongArch CPUs, a the PEI Services
>             Table Pointer
>
>             +  is stored in a dedicated CPU register.  This means that
>             there is no
>
>             +  memory storage associated with storing the PEI Services
>             Table pointer,
>
>             +  so no additional migration actions are required for
>             Itanium, ARM and
>
>             +  LoongArch CPUs.
>
>             +
>
>             +**/
>
>             +VOID
>
>             +EFIAPI
>
>             +MigratePeiServicesTablePointer (
>
>             +  VOID
>
>             +  )
>
>             +{
>
>             +  return;
>
>             +}
>
>             diff --git
>             a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>             b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>             new file mode 100644
>
>             index 0000000000..e8ecd4616d
>
>             --- /dev/null
>
>             +++
>             b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>             @@ -0,0 +1,37 @@
>
>             +## @file
>
>             +# Instance of PEI Services Table Pointer Library using
>             register CSR KS0 for the table pointer.
>
>             +#
>
>             +# PEI Services Table Pointer Library implementation that
>             retrieves a pointer to the
>
>             +# PEI Services Table from a CPU register. Applies to
>             modules that execute from
>
>             +# read-only memory.
>
>             +#
>
>             +# Copyright (c) 2007 - 2018, Intel Corporation. All
>             rights reserved.<BR>
>
>             +# Copyright (c) 2011 Hewlett-Packard Corporation. All
>             rights reserved.<BR>
>
>             +# Copyright (c) 2023 Loongson Technology Corporation
>             Limited. All rights reserved.<BR>
>
>             +#
>
>             +#  SPDX-License-Identifier: BSD-2-Clause-Patent
>
>             +#
>
>             +#
>
>             +##
>
>             +
>
>             +[Defines]
>
>             +  INF_VERSION                    = 1.29
>
>             +  BASE_NAME                      = PeiServicesTablePointerLib
>
>             +  MODULE_UNI_FILE                =
>             PeiServicesTablePointerLibKs0.uni
>
>             +  FILE_GUID                      =
>             619950D1-7C5F-EA1B-D6DD-2FF7B0A4A2B7
>
>             +  MODULE_TYPE                    = PEIM
>
>             +  VERSION_STRING                 = 1.0
>
>             +  LIBRARY_CLASS                  =
>             PeiServicesTablePointerLib|PEIM PEI_CORE SEC
>
>             +
>
>             +#
>
>             +#  VALID_ARCHITECTURES           = LOONGARCH64
>
>             +#
>
>             +
>
>             +[Sources]
>
>             +  PeiServicesTablePointer.c
>
>             +
>
>             +[Packages]
>
>             +  MdePkg/MdePkg.dec
>
>             +
>
>             +[LibraryClasses]
>
>             +  DebugLib
>
>             diff --git
>             a/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>             b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>
>             new file mode 100644
>
>             index 0000000000..2539448ce5
>
>             --- /dev/null
>
>             +++
>             b/MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.uni
>
>             @@ -0,0 +1,20 @@
>
>             +// /** @file
>
>             +// Instance of PEI Services Table Pointer Library using
>             register CSR KS0 for the table pointer.
>
>             +//
>
>             +// PEI Services Table Pointer Library implementation that
>             retrieves a pointer to the
>
>             +// PEI Services Table from a CPU register. Applies to
>             modules that execute from
>
>             +// read-only memory.
>
>             +//
>
>             +// Copyright (c) 2007 - 2018, Intel Corporation. All
>             rights reserved.<BR>
>
>             +// Copyright (c) 2011 Hewlett-Packard Corporation. All
>             rights reserved.<BR>
>
>             +// Copyright (c) 2023 Loongson Technology Corporation
>             Limited. All rights reserved.<BR>
>
>             +//
>
>             +// SPDX-License-Identifier: BSD-2-Clause-Patent
>
>             +//
>
>             +// **/
>
>             +
>
>             +
>
>             +#string STR_MODULE_ABSTRACT             #language en-US
>             "Instance of PEI Services Table Pointer Library using CPU
>             register for the table pointer"
>
>             +
>
>             +#string STR_MODULE_DESCRIPTION          #language en-US
>             "The PEI Services Table Pointer Library implementation
>             that retrieves a pointer to the PEI Services Table from a
>             CPU register. Applies to modules that execute from
>             read-only memory."
>
>             +
>
>             diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
>
>             index 3abd1a1e23..109224c527 100644
>
>             --- a/MdePkg/MdePkg.dsc
>
>             +++ b/MdePkg/MdePkg.dsc
>
>             @@ -200,4 +200,7 @@
>
>               
>             MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLib.inf
>
>               
>             MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPortLibRiscVSbiLibRam.inf
>
>             +[Components.LOONGARCH64]
>
>             + 
>             MdePkg/Library/PeiServicesTablePointerLibKs0/PeiServicesTablePointerLibKs0.inf
>
>             +
>
>             [BuildOptions]
>
> 
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112928): https://edk2.groups.io/g/devel/message/112928
Mute This Topic: https://groups.io/mt/103355356/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-