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 *代表 *Chao Li > *发送时间:*2023年12月19日21:01 > *收件人:*devel@edk2.groups.io; Michael D Kinney > ; Liming Gao > *抄送:*Zhiguang Liu ; Laszlo Ersek > > *主题:*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 > > > Cc: Liming Gao > > > Cc: Zhiguang Liu > > > Cc: Laszlo Ersek > > Signed-off-by: Chao Li > > > --- > > .../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.
> > +  Copyright (c) 2011 Hewlett-Packard Corporation. All rights > reserved.
> > +  Copyright (c) 2023 Loongson Technology Corporation Limited. All > rights reserved.
> > + > > +  SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include > > +#include > > +#include > > +#include > > + > > +/** > > +  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.
> > +# Copyright (c) 2011 Hewlett-Packard Corporation. All rights > reserved.
> > +# Copyright (c) 2023 Loongson Technology Corporation Limited. All > rights reserved.
> > +# > > +#  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.
> > +// Copyright (c) 2011 Hewlett-Packard Corporation. All rights > reserved.
> > +// Copyright (c) 2023 Loongson Technology Corporation Limited. > All rights reserved.
> > +// > > +// 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 (#112736): https://edk2.groups.io/g/devel/message/112736 Mute This Topic: https://groups.io/mt/103261739/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-