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

gaoliming via groups.io posted 1 patch 4 months 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 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]
-=-=-=-=-=-=-=-=-=-=-=-