From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 777009411A9 for ; Fri, 10 Nov 2023 06:44:13 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=7KZJNdDakDdt/013JKqXWspNB6YNw7vDSR1p4PZK/1o=; c=relaxed/simple; d=groups.io; h=Message-ID:Date:MIME-Version:User-Agent:Subject:To:Cc:References:From:In-Reply-To:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type; s=20140610; t=1699598651; v=1; b=Dt6c5w9qwJsjJyekD3+eU8DiBukeY2y1xxOnnd5htAFI+/SdU2LynLEuLm67FAMwludX9BOG lupf6k0tQ2OMkI++MtxQnBQlq4LNAuwTRUWuLOOkvtYs4Z1tH0lKGKjm20fCe3iBv2PcIvFv3pQ Ky3WxX5kQXAsJ+MYZLZMPJ2M= X-Received: by 127.0.0.2 with SMTP id cE1HYY7687511xlmPe7Qt1Vo; Thu, 09 Nov 2023 22:44:11 -0800 X-Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by mx.groups.io with SMTP id smtpd.web10.22579.1699598649219822101 for ; Thu, 09 Nov 2023 22:44:11 -0800 X-Received: from loongson.cn (unknown [10.40.24.149]) by gateway (Coremail) with SMTP id _____8Cxrusz0U1ln6Y4AA--.43062S3; Fri, 10 Nov 2023 14:44:04 +0800 (CST) X-Received: from [10.40.24.149] (unknown [10.40.24.149]) by localhost.localdomain (Coremail) with SMTP id AQAAf8CxO9wy0U1lsNY9AA--.3697S3; Fri, 10 Nov 2023 14:44:02 +0800 (CST) Message-ID: <1736e6c6-f455-48f3-9b68-04f2fd2c70ec@loongson.cn> Date: Fri, 10 Nov 2023 14:44:02 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [edk2-devel] [PATCH v2 23/30] OvmfPkg/LoongArchVirt: Add PeiServiceTablePointerLib To: Laszlo Ersek , devel@edk2.groups.io Cc: Ard Biesheuvel , Jiewen Yao , Jordan Justen , Gerd Hoffmann , Xianglai Li , Bibo Mao References: <20231106032521.2251143-1-lichao@loongson.cn> <20231106033012.2294174-1-lichao@loongson.cn> From: "Chao Li" In-Reply-To: X-CM-TRANSID: AQAAf8CxO9wy0U1lsNY9AA--.3697S3 X-CM-SenderInfo: xolfxt3r6o00pqjv00gofq/1tbiAQALCGVNkykDEAABsC X-Coremail-Antispam: 1Uk129KBj93XoW3ArW3ArW5XrW7XF1kJr45XFc_yoW7Aw45pw 4UGF4kKr4UJ34Igryaqa15CFW5Aan7CryrCrn7JF15Cw1DAry0qF129ryFkF4ru3Wruw1I gryFyw4Uua4UJFcCm3ZEXasCq-sJn29KB7ZKAUJUUUUr529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnRJUUU9Eb4IE77IF4wAF F20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r 1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAF wI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1l84ACjcxK6I8E87Iv67 AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AKxVW8Jr0_Cr1UM2kKe7AKxVWUXVWU AwAS0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07AIYIkI8VC2zVCFFI0UMcIj6xIIjx v20xvE14v26r1Y6r17McIj6I8E87Iv67AKxVW8JVWxJwAm72CE4IkC6x0Yz7v_Jr0_Gr1l F7xvr2IY64vIr41l7480Y4vEI4kI2Ix0rVAqx4xJMxkF7I0En4kS14v26r126r1DMxAIw2 8IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMxCIbckI1I0E14v26r1Y6r17MI8I 3I0E5I8CrVAFwI0_JrI_JrWlx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxV WUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8I cVCY1x0267AKxVWUJVW8JwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aV AFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZE Xa7IU8wID7UUUUU== Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lichao@loongson.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: Wb37IgGtPPJ43HNDMAg3Cssmx7686176AA= Content-Type: multipart/alternative; boundary="------------erar3xTGlyF0Y10uKHulSqCA" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=Dt6c5w9q; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io --------------erar3xTGlyF0Y10uKHulSqCA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Laszlo, This is a good question, same as the previous email, some ARCH don't require running code on memory during PEI phase or other reason can not used the MdePkg version, so this pointer will be saved by some register, I saw the ArmPkg version also uses a register to save this pointer. If I move ArmPkg version PeiServiceTablePointer to MdePkg and the method of getting and saving the pointer use a new library which related architecture, other word, the API of PeiServiceTablePointer has not changed, adding a new library that PeiServiceTablePointer depends on, the real saving and reading method completed in the new library. Do you think this way is better? Thanks, Chao 在 2023/11/9 06:22, Laszlo Ersek 写道: > On 11/6/23 04:30, Chao Li wrote: >> Use a register to save PeiServiceTable pointer. This Library provides >> PeiServiceTable pointer saveing and retrieval serivces. >> >> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=4584 >> >> Cc: Ard Biesheuvel >> Cc: Jiewen Yao >> Cc: Jordan Justen >> Cc: Gerd Hoffmann >> Signed-off-by: Chao Li >> Co-authored-by: Xianglai Li >> Co-authored-by: Bibo Mao >> --- >> .../PeiServicesTablePointer.c | 75 +++++++++++++++++++ >> .../PeiServicesTablePointerLib.inf | 31 ++++++++ >> 2 files changed, 106 insertions(+) >> create mode 100644 OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c >> create mode 100644 OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf > Why is this under OvmfPkg? > > Laszlo > >> diff --git a/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c >> new file mode 100644 >> index 0000000000..dcbcb50131 >> --- /dev/null >> +++ b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c >> @@ -0,0 +1,75 @@ >> +/** @file >> + PEI Services Table Pointer Library. >> + >> + Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.
>> + >> + SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +**/ >> + >> +#include >> +#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 >> + ) >> +{ >> + 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 >> + ) >> +{ >> + return (CONST EFI_PEI_SERVICES **)(CsrRead (LOONGARCH_CSR_KS0)); >> +} >> + >> +/** >> +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 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. >> +**/ >> +VOID >> +EFIAPI >> +MigratePeiServicesTablePointer ( >> + VOID >> + ) >> +{ >> + return; >> +} >> diff --git a/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf >> new file mode 100644 >> index 0000000000..274cb2f781 >> --- /dev/null >> +++ b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf >> @@ -0,0 +1,31 @@ >> +## @file >> +# PEI Services Table Pointer Library. >> +# >> +# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.
>> +# >> +# SPDX-License-Identifier: BSD-2-Clause-Patent >> +# >> +## >> +[Defines] >> + INF_VERSION = 0x00010005 >> + BASE_NAME = PeiServicesTablePointerLib >> + FILE_GUID = 098B0DB0-AD01-8886-D409-90CBC7E89154 >> + 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] >> + BaseLib >> + DebugLib >> + >> +[Pcd] -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111020): https://edk2.groups.io/g/devel/message/111020 Mute This Topic: https://groups.io/mt/102413901/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- --------------erar3xTGlyF0Y10uKHulSqCA Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi Laszlo,

This is a good question, same as the previous email, some ARCH don't require running code on memory during PEI phase or other reason can not used the MdePkg version, so this pointer will be saved by some register, I saw the ArmPkg version also uses a register to save this pointer.

If I move ArmPkg version PeiServiceTablePointer to MdePkg and the method of getting and saving the pointer use a new library which related architecture, other word, the API of PeiServiceTablePointer has not changed, adding a new library that PeiServiceTablePointer depends on, the real saving and reading method completed in the new library. Do you think this way is better?


Thanks,
Chao
在 2023/11/9 06:22, Laszlo Ersek 写道:
On 11/6/23 04:30, Chao Li wrote:
Use a register to save PeiServiceTable pointer. This Library provides
PeiServiceTable pointer saveing and retrieval serivces.

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584

Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Chao Li <lichao@loongson.cn>
Co-authored-by: Xianglai Li <lixianglai@loongson.cn>
Co-authored-by: Bibo Mao <maobibo@loongson.cn>
---
 .../PeiServicesTablePointer.c                 | 75 +++++++++++++++++++
 .../PeiServicesTablePointerLib.inf            | 31 ++++++++
 2 files changed, 106 insertions(+)
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
Why is this under OvmfPkg?

Laszlo

diff --git a/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c
new file mode 100644
index 0000000000..dcbcb50131
--- /dev/null
+++ b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c
@@ -0,0 +1,75 @@
+/** @file
+  PEI Services Table Pointer Library.
+
+  Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PiPei.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.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
+  )
+{
+  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
+  )
+{
+  return (CONST EFI_PEI_SERVICES **)(CsrRead (LOONGARCH_CSR_KS0));
+}
+
+/**
+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 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.
+**/
+VOID
+EFIAPI
+MigratePeiServicesTablePointer (
+  VOID
+  )
+{
+  return;
+}
diff --git a/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
new file mode 100644
index 0000000000..274cb2f781
--- /dev/null
+++ b/OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
@@ -0,0 +1,31 @@
+## @file
+#  PEI Services Table Pointer Library.
+#
+#  Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = PeiServicesTablePointerLib
+  FILE_GUID                      = 098B0DB0-AD01-8886-D409-90CBC7E89154
+  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]
+  BaseLib
+  DebugLib
+
+[Pcd]
_._,_._,_

Groups.io Links:

You receive all messages sent to this group.

View/Reply Online (#111020) | | Mute This Topic | New Topic
Your Subscription | Contact Group Owner | Unsubscribe [rebecca@openfw.io]

_._,_._,_
--------------erar3xTGlyF0Y10uKHulSqCA--