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> *代表 *Chao Li
*发送时间:*2023年12月19日21:01
*收件人:*devel@edk2.groups.io; Michael D Kinney <michael.d.kin...@intel.com>; Liming Gao <gaolim...@byosoft.com.cn> *抄送:*Zhiguang Liu <zhiguang....@intel.com>; Laszlo Ersek <ler...@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.kin...@intel.com>
    <mailto:michael.d.kin...@intel.com>

    Cc: Liming Gao <gaolim...@byosoft.com.cn>
    <mailto:gaolim...@byosoft.com.cn>

    Cc: Zhiguang Liu <zhiguang....@intel.com>
    <mailto:zhiguang....@intel.com>

    Cc: Laszlo Ersek <ler...@redhat.com> <mailto:ler...@redhat.com>

    Signed-off-by: Chao Li <lic...@loongson.cn>
    <mailto:lic...@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 (#112736): https://edk2.groups.io/g/devel/message/112736
Mute This Topic: https://groups.io/mt/103261739/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to