.../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
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]
-=-=-=-=-=-=-=-=-=-=-=-
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] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.