public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Chao Li" <lichao@loongson.cn>
To: Laszlo Ersek <lersek@redhat.com>, devel@edk2.groups.io
Cc: Michael D Kinney <michael.d.kinney@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>,
	Zhiguang Liu <zhiguang.liu@intel.com>,
	Leif Lindholm <quic_llindhol@quicinc.com>,
	Ard Biesheuvel <ardb+tianocore@kernel.org>,
	Sami Mujawar <sami.mujawar@arm.com>,
	Sunil V L <sunilvl@ventanamicro.com>
Subject: Re: [edk2-devel] [PATCH v3 09/39] MdePkg: Add a new library named PeiServicesTablePointerLibReg
Date: Mon, 27 Nov 2023 11:27:59 +0800	[thread overview]
Message-ID: <2ba95277-b93f-4412-8676-b9dd7f3b2565@loongson.cn> (raw)
In-Reply-To: <dce9df20-8db6-de6b-7b10-f7cf7efa7ae5@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 8061 bytes --]

Hi Mike and Liming,

You opinion is very important, it will decide the direction. I will send 
the V4 this week, so can you please review the new patch of MdePkg for 
this series?


Thanks,
Chao
On 2023/11/24 19:35, Laszlo Ersek wrote:
> On 11/22/23 02:47, Chao Li wrote:
>> Hi Laszlo,
>>
>>
>> Thanks,
>> Chao
>> On 2023/11/21 22:37, Laszlo Ersek wrote:
>>> On 11/17/23 10:59, Chao Li wrote:
>>>> Since some ARCH or platform not require execute code on memory during
>>>> PEI phase, some values may transferred via CPU registers.
>>>>
>>>> Adding PeiServcieTablePointerLibReg to allow set and get the PEI service
>>>> table pointer depend by a CPU register, this library can accommodate lot
>>>> of platforms who not require execte code on memory during PEI phase.
>>>>
>>>> Adding PeiServiceTablePointerLibReg to allows setting and getting the
>>>> PEI service table pointer via CPU registers, and the library can
>>>> accommodate many platforms that do not need to execute code on memory
>>>> during the PEI phase.
>>>>
>>>> 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>
>>>> Cc: Liming Gao<gaoliming@byosoft.com.cn>
>>>> Cc: Zhiguang Liu<zhiguang.liu@intel.com>
>>>> Cc: Leif Lindholm<quic_llindhol@quicinc.com>
>>>> Cc: Ard Biesheuvel<ardb+tianocore@kernel.org>
>>>> Cc: Sami Mujawar<sami.mujawar@arm.com>
>>>> Cc: Laszlo Ersek<lersek@redhat.com>
>>>> Cc: Sunil V L<sunilvl@ventanamicro.com>
>>>> Signed-off-by: Chao Li<lichao@loongson.cn>
>>>> ---
>>>>   .../Library/PeiServicesTablePointerLib.h      | 37 +++++++-
>>>>   .../PeiServicesTablePointer.c                 | 86 +++++++++++++++++++
>>>>   .../PeiServicesTablePointerLib.uni            | 20 +++++
>>>>   .../PeiServicesTablePointerLibReg.inf         | 40 +++++++++
>>>>   MdePkg/MdePkg.dsc                             |  1 +
>>>>   5 files changed, 180 insertions(+), 4 deletions(-)
>>>>   create mode 100644 MdePkg/Library/PeiServicesTablePointerLibReg/PeiServicesTablePointer.c
>>>>   create mode 100644 MdePkg/Library/PeiServicesTablePointerLibReg/PeiServicesTablePointerLib.uni
>>>>   create mode 100644 MdePkg/Library/PeiServicesTablePointerLibReg/PeiServicesTablePointerLibReg.inf
>>> In my opinion, the PeiServicesTablePointerLib class header should not be
>>> extended with new interfaces. I understand that the generality is
>>> attractive, but it is not put to use; only the loongarch architecture
>>> applies the new interfaces (in the subsequent patch), and for example
>>> the ARM code (ArmPkg/Library/PeiServicesTablePointerLib) is not reworked
>>> in terms of these new interfaces.
>> This libarary have ability of accommodate more ARCH why not? I checked
>> the PI SPEC, all ARCH except IA32 and X64 using the register mechanism,
>> if this library can be approved, all of them can moved into this
>> libraryso that code con be reused more, I think this library is fine.
> The library may be fine from a design point of view, but without
> actually putting the extra generality to use, it's a waste. It's a
> maintenance burden. There's a name for this anti-pattern: it is called
> "speculative generality". "It might be useful down the road."
>
> The new generality is only useful if it carries its own weight; namely,
> if other platform code (aarch64, x64) is converted to it immediately, in
> the same series. (I'm not asking for this series to be longer. You could
> even split it up into multiple "waves" of series.) Just saying that
> "could prove useful later" is a prime way to generate technical debt.
>
>>> What's more, the new library interfaces, even though they are exposed in
>>> the lib class header, are not implemented for other architectures, so
>>> they aren't even callable on those arches.
>> The patch 10 in this series has added LoongArch instance of this
>> library, please check.
> Yes, I'm aware. That's not the point.
>
> When you extend a library *class* with a new API, that means all
> *clients* of the library class can stat calling that API. Which in turn
> means that *all* existent instances of the library class must implement
> the API as well.
>
> Your series extends the lib class with a new API, but (IIUC) only
> implements the new API in one (new) lib instance, and not in the other
> (existent) instances. This has the potential to cause linkage errors,
> dependent on the actual library instance that a platform DSC chooses.
>
>
>>> I'm commenting on this patch and the subsequent patch in the series
>>> together, as seen squashed together. NB I'm not an MdePkg maintainer, so
>>> this is just my opinion.
>> So, Mike and Liming, what do your think?
>>> (1) As noted above, the library class should not be modified.
>>>
>>> (2) Modifying the *comments* in
>>> "MdePkg/Include/Library/PeiServicesTablePointerLib.h" is welcome, I
>>> think, but then we might want to add a (separate!) patch for removing
>>> the Itanium language, as edk2 no longer supports Itanium.
>>>
>>> (3) The PeiServicesTablePointerLibReg instance should be called
>>> PeiServicesTablePointerLibCsrKs0 or just PeiServicesTablePointerLibKs0.
>> This library will be a public libray which using the reigster mechanism,
>> so the name like PeiServiceTablePointerLibCsrKs0 would not appropriate.
> Of course that name is wrong for a generic library instance, but my
> whole point is that this library instance should be loongarch-specific.
>
> (Unless you port the existent (x64 IDT / aarch64 register) libraries
> over to it.)
>
>>> This follows the example of the lib instance name
>>> "PeiServicesTablePointerLibIdt". The whole library instance should be
>>> loongaarch-specific IMO; there isn't much code that's being duplicated,
>>> so the extra interfaces (internal or external) do not help with code
>>> unification.
>>>
>>> (4) "PeiServicesTablePointerLib.uni" should be named similarly (suffix
>>> missing).
>>>
>>> (5) BASE_NAME in the library instance INF file should be defined
>>> similarly (suffix missing).
>>>
>>> (6) The contents of the UNI file should be loongarch-specific, i.e. be
>>> explicit about CSR KS0, in both comments and string constants.
>>>
>>> (7) The comments in the library instance INF file should be similarly
>>> loongarch-specific.
>>>
>>> (8) I suggest dropping VALID_ARCHITECTURES altogether. If we want to
>>> keep it, it should exclusively say LOONGARCH64.
>>>
>>> (9) The new library instance should be listed in
>>> [Components.LOONGARCH64] in MdePkg.dec.
>>>
>>> This section does not exist yet; I suggest introducing it under
>>> [Components.RISCV64].
>> No, it is RISC-V area, not LOONGARCH64.
> You misunderstood.
>
> I didn't suggest to list the *library instance* under [Components.RISCV64].
>
> I suggested to introduce the [Components.LOONGARCH64] *section* under
> [Components.RISCV64].
>
>> And I do not recommend going
>> this way. I believe this library should be a public library for register
>> mechanism.
> That's entirely fine, as long as you do the work of porting the existent
> ARM and X64 IDT code over to it. In my opinion anyway; MdePkg
> maintainers are the authoritative sources here.
>
> Laszlo
>
>>> (10) There need not / should not be two separate C source files; just
>>> access the KS0 CSR in SetPeiServicesTablePointer() and
>>> GetPeiServicesTablePointer() directly.
>>>
>>> (11) The new library instance should probably not introduce new
>>> references to Itanium.
>>>
>>> Thanks,
>>> Laszlo


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111712): https://edk2.groups.io/g/devel/message/111712
Mute This Topic: https://groups.io/mt/102644754/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



[-- Attachment #2: Type: text/html, Size: 11323 bytes --]

  reply	other threads:[~2023-11-27  3:28 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20231117095742.3605778-1-lichao@loongs>
2023-11-17  9:58 ` [edk2-devel] [PATCH v3 01/39] MdePkg: Add the header file named Csr.h for LoongArch64 Chao Li
2023-11-17  9:58 ` [edk2-devel] [PATCH v3 02/39] MdePkg: Add LoongArch64 FPU function set into BaseCpuLib Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 03/39] MdePkg: Add LoongArch64 exception function set into BaseLib Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 04/39] MdePkg: Add LoongArch64 local interrupt " Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 05/39] MdePkg: Add LoongArch Cpucfg function Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 06/39] MdePkg: Add read stable counter operation for LoongArch Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 07/39] MdePkg: Add CSR " Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 08/39] MdePkg: Add IOCSR " Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 09/39] MdePkg: Add a new library named PeiServicesTablePointerLibReg Chao Li
2023-11-17 11:35   ` Leif Lindholm
2023-11-20  3:07     ` Chao Li
2023-11-21 14:37   ` Laszlo Ersek
2023-11-22  1:47     ` Chao Li
2023-11-24 11:35       ` Laszlo Ersek
2023-11-27  3:27         ` Chao Li [this message]
2023-12-01  0:32           ` 回复: " gaoliming via groups.io
2023-12-01  8:20             ` Chao Li
     [not found]         ` <179B5D231F190982.32091@groups.io>
2023-11-29  1:35           ` Chao Li
2023-11-17  9:59 ` [edk2-devel] [PATCH v3 10/39] MdePkg: Add method of LoongArch64 to PeiServicesTablePointerLibReg Chao Li
2023-11-17 10:00 ` [edk2-devel] [PATCH v3 11/39] UefiCpuPkg: Add LoongArch64 CPU Timer library Chao Li
2023-11-22 16:12   ` Laszlo Ersek
2023-11-22 16:13     ` Laszlo Ersek
2023-11-23 11:43     ` Chao Li
2023-12-11 17:16       ` Laszlo Ersek
2023-12-12  3:45         ` Chao Li
2023-11-17 10:00 ` [edk2-devel] [PATCH v3 12/39] UefiCpuPkg: Add CPU exception library for LoongArch Chao Li
2023-11-17 10:00 ` [edk2-devel] [PATCH v3 13/39] UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg Chao Li
2023-11-17 20:18   ` Andrei Warkentin
2023-11-20  3:26     ` Chao Li
2023-11-30  0:59   ` Ni, Ray
2023-11-30  2:25     ` Chao Li
     [not found]     ` <179C457B5B852375.31732@groups.io>
2023-12-04  7:31       ` Chao Li
2023-12-05  8:27         ` Ni, Ray
2023-12-05 12:27           ` Chao Li
     [not found]           ` <179DEF40376B662A.18076@groups.io>
2023-12-08  2:10             ` Chao Li
2023-12-11  8:13               ` Ni, Ray
2023-12-11  8:19                 ` Chao Li
2023-11-17 10:00 ` [edk2-devel] [PATCH v3 14/39] UefiCpuPkg: Add LoongArch64CpuMmuLib " Chao Li
2023-11-17 10:00 ` [edk2-devel] [PATCH v3 15/39] UefiCpuPkg: Add multiprocessor library for LoongArch64 Chao Li
2023-11-17 10:00 ` [edk2-devel] [PATCH v3 16/39] UefiCpuPkg: Add CpuDxe driver " Chao Li
2023-11-17 10:00 ` [edk2-devel] [PATCH v3 17/39] EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64 Chao Li
2023-11-17 10:01 ` [edk2-devel] [PATCH v3 18/39] ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg Chao Li
2023-11-17 10:01 ` [edk2-devel] [PATCH v3 19/39] MdePkg: Add a PCD feature flag named PcdPciIoTranslationIsEnabled Chao Li
2023-11-17 10:01 ` [edk2-devel] [PATCH v3 20/39] UefiCpuPkg: Add MMIO method in CpuIo2Dxe Chao Li
2023-11-17 10:01 ` [edk2-devel] [PATCH v3 21/39] ArmVirtPkg: Enable UefiCpuPkg version CpuIo2Dxe Chao Li
2023-11-17 10:01 ` [edk2-devel] [PATCH v3 22/39] ArmPkg: Remove ArmPciCpuIo2Dxe from ArmPkg Chao Li
2023-11-17 13:13   ` Leif Lindholm
2023-11-20  3:24     ` Chao Li
2023-11-20 18:47       ` Leif Lindholm
2023-11-21  1:10         ` Chao Li
2023-11-17 10:01 ` [edk2-devel] [PATCH v3 23/39] OvmfPkg/RiscVVirt: Enable UefiCpuPkg version CpuIo2Dxe Chao Li
2023-11-17 20:15   ` Andrei Warkentin
2023-11-20  3:04     ` Chao Li
2023-11-17 10:01 ` [edk2-devel] [PATCH v3 24/39] OvmfPkg/RiscVVirt: Remove PciCpuIo2Dxe from RiscVVirt Chao Li
2023-11-17 10:02 ` [edk2-devel] [PATCH v3 25/39] ArmVirtPkg: Move the FdtSerialPortAddressLib to OvmfPkg Chao Li
2023-11-17 10:02 ` [edk2-devel] [PATCH v3 26/39] ArmVirtPkg: Move the PcdTerminalTypeGuidBuffer into OvmfPkg Chao Li
2023-11-17 10:02 ` [edk2-devel] [PATCH v3 27/39] ArmVirtPkg: Move PlatformBootManagerLib to OvmfPkg Chao Li
2023-11-17 10:02 ` [edk2-devel] [PATCH v3 28/39] OvmfPkg/LoongArchVirt: Add stable timer driver Chao Li
2023-11-17 10:02 ` [edk2-devel] [PATCH v3 29/39] OvmfPkg/LoongArchVirt: Add a NULL library named CollectApResouceLibNull Chao Li
2023-11-17 10:02 ` [edk2-devel] [PATCH v3 30/39] OvmfPkg/LoongArchVirt: Add serial port hook library Chao Li
2023-11-17 10:03 ` [edk2-devel] [PATCH v3 31/39] OvmfPkg/LoongArchVirt: Add the early serial port output library Chao Li
2023-11-17 10:03 ` [edk2-devel] [PATCH v3 32/39] OvmfPkg/LoongArchVirt: Add real time clock library Chao Li
2023-11-17 10:03 ` [edk2-devel] [PATCH v3 33/39] OvmfPkg/LoongArchVirt: Add NorFlashQemuLib Chao Li
2023-11-17 10:03 ` [edk2-devel] [PATCH v3 34/39] OvmfPkg/LoongArchVirt: Add FdtQemuFwCfgLib Chao Li
2023-11-17 10:03 ` [edk2-devel] [PATCH v3 35/39] OvmfPkg/LoongArchVirt: Add reset system library Chao Li
2023-11-17 10:03 ` [edk2-devel] [PATCH v3 36/39] OvmfPkg/LoongArchVirt: Support SEC phase Chao Li
2023-11-17 10:03 ` [edk2-devel] [PATCH v3 37/39] OvmfPkg/LoongArchVirt: Support PEI phase Chao Li
2023-11-17 10:04 ` [edk2-devel] [PATCH v3 38/39] OvmfPkg/LoongArchVirt: Add build file Chao Li
2023-11-17 10:04 ` [edk2-devel] [PATCH v3 39/39] OvmfPkg/LoongArchVirt: Add self introduction file Chao Li
     [not found] ` <179860C0A131BC70.3002@groups.io>
2023-11-20  9:55   ` [edk2-devel] [PATCH v3 14/39] UefiCpuPkg: Add LoongArch64CpuMmuLib to UefiCpuPkg Chao Li
     [not found] ` <179860DB0A3E8D83.6542@groups.io>
2023-11-21  6:39   ` [edk2-devel] [PATCH v3 27/39] ArmVirtPkg: Move PlatformBootManagerLib to OvmfPkg Chao Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2ba95277-b93f-4412-8676-b9dd7f3b2565@loongson.cn \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox