public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ard Biesheuvel" <ardb@kernel.org>
To: devel@edk2.groups.io, ray.ni@intel.com
Cc: "lichao@loongson.cn" <lichao@loongson.cn>,
	"Kumar, Rahul R" <rahul.r.kumar@intel.com>,
	 Gerd Hoffmann <kraxel@redhat.com>,
	Leif Lindholm <quic_llindhol@quicinc.com>,
	 Ard Biesheuvel <ardb+tianocore@kernel.org>,
	Sami Mujawar <sami.mujawar@arm.com>
Subject: Re: [edk2-devel] [PATCH v4 19/37] UefiCpuPkg: Add MMIO method in CpuIo2Dxe
Date: Wed, 20 Dec 2023 08:41:06 +0100	[thread overview]
Message-ID: <CAMj1kXFj-Jb8c0h1fygv-yOCPpH8h5VanjhVRMNHzj7qEoPasQ@mail.gmail.com> (raw)
In-Reply-To: <MN6PR11MB8244A7C179775F522A0AFCA08C96A@MN6PR11MB8244.namprd11.prod.outlook.com>

On Wed, 20 Dec 2023 at 02:57, Ni, Ray <ray.ni@intel.com> wrote:
>
> It’s new to me that PCI IO (not MMIO) space is accessed through MMIO.
>
> PCIE spec defines different TLP types for Memory and I/O request in Transaction Layer chapter.
>
> If CpuIoDxe driver issues Memory request to a IO space inside a PCIE device, how does PCIE device claim the TPL packet and response?
>

Hello Ray,

On the opposite side of the PCI host bridge, these are all port I/O
transactions, and the endpoint is not aware of the distinction between
native port I/O and translated port I/O.

ARM CPUs do not implement port I/O at all, and so every host bridge
that implements port I/O support on the PCI side does so by exposing a
special MMIO resource window in the CPU physical address space that
gets translated to port I/O accesses at the opposite side.

This means that an implementation of the CpuIo2 protocol can only be
provided in a meaningful way if there are port I/O capable PCI host
bridges in the system, and some bookkeeping is needed to keep track of
the mapping between the special MMIO ranges on the CPU side and the
port I/O ranges on the PCI side. Note that this is not so different
from MMIO translation, where the mapping between MMIO is not 1:1
between CPU and PCI.

That said, I am not sure I follow why PcdPciIoTranslationIsEnabled is
needed. MMIO translation and IO translation are both properties of the
PCI host bridge implementation, so having a system wide PCD for this
seems unnecessary to me. But perhaps I missed something?



>
> From: Chao Li <lichao@loongson.cn>
> Sent: Tuesday, December 19, 2023 9:04 PM
> To: devel@edk2.groups.io; Ni, Ray <ray.ni@intel.com>
> Cc: Kumar, Rahul R <rahul.r.kumar@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Leif Lindholm <quic_llindhol@quicinc.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Sami Mujawar <sami.mujawar@arm.com>
> Subject: Re: [edk2-devel] [PATCH v4 19/37] UefiCpuPkg: Add MMIO method in CpuIo2Dxe
>
>
>
> Hi Ray,
>
> Can you please review this patch? Thank you!
>
>
>
> Thanks,
> Chao
>
> On 2023/12/12 21:12, Chao Li wrote:
>
> CpuIo2Dxe only supports IO to access PCI IO. Some ARCH requires
>
> MMIO to access PCI IO, add the MMIO access method in CpuIo2Dxe.
>
>
>
> The MMIO methods depend on PcdPciIoTranslationIsEnabled and
>
> PcdPciIoTransLation. The code is referenced from ArmPkg.
>
>
>
> Build-tested only (with "OvmfPkgX64.dsc").
>
>
>
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584
>
>
>
> Cc: Ray Ni <ray.ni@intel.com>
>
> Cc: Rahul Kumar <rahul1.kumar@intel.com>
>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
>
> Cc: Leif Lindholm <quic_llindhol@quicinc.com>
>
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
>
> Cc: Sami Mujawar <sami.mujawar@arm.com>
>
> Signed-off-by: Chao Li <lichao@loongson.cn>
>
> ---
>
>  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.c   | 149 +++++++++++++++++++----------
>
>  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.h   |   2 +
>
>  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf |   8 +-
>
>  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.uni |   2 +
>
>  4 files changed, 111 insertions(+), 50 deletions(-)
>
>
>
> diff --git a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.c b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.c
>
> index 87f4f805ca..cd31977af2 100644
>
> --- a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.c
>
> +++ b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.c
>
> @@ -3,6 +3,8 @@
>
>
>
>  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
>
>  Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
>
> +Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
>
> +Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
>
>
>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
>
>
>
> @@ -149,7 +151,7 @@ CpuIoCheckParameter (
>
>    //
>
>    // Since MAX_ADDRESS can be the maximum integer value supported by the CPU and Count
>
>    // can also be the maximum integer value supported by the CPU, this range
>
> -  // check must be adjusted to avoid all oveflow conditions.
>
> +  // check must be adjusted to avoid all overflow conditions.
>
>    //
>
>    // The following form of the range check is equivalent but assumes that
>
>    // MAX_ADDRESS and MAX_IO_PORT_ADDRESS are of the form (2^n - 1).
>
> @@ -398,6 +400,18 @@ CpuIoServiceRead (
>
>    EFI_CPU_IO_PROTOCOL_WIDTH  OperationWidth;
>
>    UINT8                      *Uint8Buffer;
>
>
>
> +  UINT8 EFIAPI  (*CpuIoRead8) (
>
> +    UINTN
>
> +    );
>
> +
>
> +  UINT16 EFIAPI  (*CpuIoRead16) (
>
> +    UINTN
>
> +    );
>
> +
>
> +  UINT32 EFIAPI  (*CpuIoRead32) (
>
> +    UINTN
>
> +    );
>
> +
>
>    Status = CpuIoCheckParameter (FALSE, Width, Address, Count, Buffer);
>
>    if (EFI_ERROR (Status)) {
>
>      return Status;
>
> @@ -410,37 +424,48 @@ CpuIoServiceRead (
>
>    OutStride      = mOutStride[Width];
>
>    OperationWidth = (EFI_CPU_IO_PROTOCOL_WIDTH)(Width & 0x03);
>
>
>
> -  //
>
> -  // Fifo operations supported for (mInStride[Width] == 0)
>
> -  //
>
> -  if (InStride == 0) {
>
> -    switch (OperationWidth) {
>
> -      case EfiCpuIoWidthUint8:
>
> -        IoReadFifo8 ((UINTN)Address, Count, Buffer);
>
> -        return EFI_SUCCESS;
>
> -      case EfiCpuIoWidthUint16:
>
> -        IoReadFifo16 ((UINTN)Address, Count, Buffer);
>
> -        return EFI_SUCCESS;
>
> -      case EfiCpuIoWidthUint32:
>
> -        IoReadFifo32 ((UINTN)Address, Count, Buffer);
>
> -        return EFI_SUCCESS;
>
> -      default:
>
> -        //
>
> -        // The CpuIoCheckParameter call above will ensure that this
>
> -        // path is not taken.
>
> -        //
>
> -        ASSERT (FALSE);
>
> -        break;
>
> +  if (FeaturePcdGet (PcdPciIoTranslationIsEnabled) == FALSE) {
>
> +    //
>
> +    // Fifo operations supported for (mInStride[Width] == 0)
>
> +    //
>
> +    if (InStride == 0) {
>
> +      switch (OperationWidth) {
>
> +        case EfiCpuIoWidthUint8:
>
> +          IoReadFifo8 ((UINTN)Address, Count, Buffer);
>
> +          return EFI_SUCCESS;
>
> +        case EfiCpuIoWidthUint16:
>
> +          IoReadFifo16 ((UINTN)Address, Count, Buffer);
>
> +          return EFI_SUCCESS;
>
> +        case EfiCpuIoWidthUint32:
>
> +          IoReadFifo32 ((UINTN)Address, Count, Buffer);
>
> +          return EFI_SUCCESS;
>
> +        default:
>
> +          //
>
> +          // The CpuIoCheckParameter call above will ensure that this
>
> +          // path is not taken.
>
> +          //
>
> +          ASSERT (FALSE);
>
> +          break;
>
> +      }
>
>      }
>
> +
>
> +    CpuIoRead8  = IoRead8;
>
> +    CpuIoRead16 = IoRead16;
>
> +    CpuIoRead32 = IoRead32;
>
> +  } else {
>
> +    Address    += PcdGet64 (PcdPciIoTranslation);
>
> +    CpuIoRead8  = MmioRead8;
>
> +    CpuIoRead16 = MmioRead16;
>
> +    CpuIoRead32 = MmioRead32;
>
>    }
>
>
>
>    for (Uint8Buffer = Buffer; Count > 0; Address += InStride, Uint8Buffer += OutStride, Count--) {
>
>      if (OperationWidth == EfiCpuIoWidthUint8) {
>
> -      *Uint8Buffer = IoRead8 ((UINTN)Address);
>
> +      *Uint8Buffer = CpuIoRead8 ((UINTN)Address);
>
>      } else if (OperationWidth == EfiCpuIoWidthUint16) {
>
> -      *((UINT16 *)Uint8Buffer) = IoRead16 ((UINTN)Address);
>
> +      *((UINT16 *)Uint8Buffer) = CpuIoRead16 ((UINTN)Address);
>
>      } else if (OperationWidth == EfiCpuIoWidthUint32) {
>
> -      *((UINT32 *)Uint8Buffer) = IoRead32 ((UINTN)Address);
>
> +      *((UINT32 *)Uint8Buffer) = CpuIoRead32 ((UINTN)Address);
>
>      }
>
>    }
>
>
>
> @@ -502,6 +527,21 @@ CpuIoServiceWrite (
>
>    EFI_CPU_IO_PROTOCOL_WIDTH  OperationWidth;
>
>    UINT8                      *Uint8Buffer;
>
>
>
> +  UINT8 EFIAPI  (*CpuIoWrite8) (
>
> +    UINTN,
>
> +    UINT8
>
> +    );
>
> +
>
> +  UINT16 EFIAPI  (*CpuIoWrite16) (
>
> +    UINTN,
>
> +    UINT16
>
> +    );
>
> +
>
> +  UINT32 EFIAPI  (*CpuIoWrite32) (
>
> +    UINTN,
>
> +    UINT32
>
> +    );
>
> +
>
>    //
>
>    // Make sure the parameters are valid
>
>    //
>
> @@ -517,37 +557,48 @@ CpuIoServiceWrite (
>
>    OutStride      = mOutStride[Width];
>
>    OperationWidth = (EFI_CPU_IO_PROTOCOL_WIDTH)(Width & 0x03);
>
>
>
> -  //
>
> -  // Fifo operations supported for (mInStride[Width] == 0)
>
> -  //
>
> -  if (InStride == 0) {
>
> -    switch (OperationWidth) {
>
> -      case EfiCpuIoWidthUint8:
>
> -        IoWriteFifo8 ((UINTN)Address, Count, Buffer);
>
> -        return EFI_SUCCESS;
>
> -      case EfiCpuIoWidthUint16:
>
> -        IoWriteFifo16 ((UINTN)Address, Count, Buffer);
>
> -        return EFI_SUCCESS;
>
> -      case EfiCpuIoWidthUint32:
>
> -        IoWriteFifo32 ((UINTN)Address, Count, Buffer);
>
> -        return EFI_SUCCESS;
>
> -      default:
>
> -        //
>
> -        // The CpuIoCheckParameter call above will ensure that this
>
> -        // path is not taken.
>
> -        //
>
> -        ASSERT (FALSE);
>
> -        break;
>
> +  if (FeaturePcdGet (PcdPciIoTranslationIsEnabled) == FALSE) {
>
> +    //
>
> +    // Fifo operations supported for (mInStride[Width] == 0)
>
> +    //
>
> +    if (InStride == 0) {
>
> +      switch (OperationWidth) {
>
> +        case EfiCpuIoWidthUint8:
>
> +          IoWriteFifo8 ((UINTN)Address, Count, Buffer);
>
> +          return EFI_SUCCESS;
>
> +        case EfiCpuIoWidthUint16:
>
> +          IoWriteFifo16 ((UINTN)Address, Count, Buffer);
>
> +          return EFI_SUCCESS;
>
> +        case EfiCpuIoWidthUint32:
>
> +          IoWriteFifo32 ((UINTN)Address, Count, Buffer);
>
> +          return EFI_SUCCESS;
>
> +        default:
>
> +          //
>
> +          // The CpuIoCheckParameter call above will ensure that this
>
> +          // path is not taken.
>
> +          //
>
> +          ASSERT (FALSE);
>
> +          break;
>
> +      }
>
>      }
>
> +
>
> +    CpuIoWrite8  = IoWrite8;
>
> +    CpuIoWrite16 = IoWrite16;
>
> +    CpuIoWrite32 = IoWrite32;
>
> +  } else {
>
> +    Address     += PcdGet64 (PcdPciIoTranslation);
>
> +    CpuIoWrite8  = MmioWrite8;
>
> +    CpuIoWrite16 = MmioWrite16;
>
> +    CpuIoWrite32 = MmioWrite32;
>
>    }
>
>
>
>    for (Uint8Buffer = (UINT8 *)Buffer; Count > 0; Address += InStride, Uint8Buffer += OutStride, Count--) {
>
>      if (OperationWidth == EfiCpuIoWidthUint8) {
>
> -      IoWrite8 ((UINTN)Address, *Uint8Buffer);
>
> +      CpuIoWrite8 ((UINTN)Address, *Uint8Buffer);
>
>      } else if (OperationWidth == EfiCpuIoWidthUint16) {
>
> -      IoWrite16 ((UINTN)Address, *((UINT16 *)Uint8Buffer));
>
> +      CpuIoWrite16 ((UINTN)Address, *((UINT16 *)Uint8Buffer));
>
>      } else if (OperationWidth == EfiCpuIoWidthUint32) {
>
> -      IoWrite32 ((UINTN)Address, *((UINT32 *)Uint8Buffer));
>
> +      CpuIoWrite32 ((UINTN)Address, *((UINT32 *)Uint8Buffer));
>
>      }
>
>    }
>
>
>
> diff --git a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.h b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.h
>
> index 7ebde0759b..5256a583e1 100644
>
> --- a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.h
>
> +++ b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.h
>
> @@ -2,6 +2,8 @@
>
>    Internal include file for the CPU I/O 2 Protocol.
>
>
>
>  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
>
> +Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
>
> +Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
>
>
>
>  **/
>
> diff --git a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
>
> index 499258491f..271c47371b 100644
>
> --- a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
>
> +++ b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
>
> @@ -3,6 +3,8 @@
>
>  #
>
>  # Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
>
>  # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
>
> +# Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
>
> +# Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
>
>  #
>
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
>
>  #
>
> @@ -20,7 +22,7 @@
>
>  #
>
>  # The following information is for reference only and not required by the build tools.
>
>  #
>
> -#  VALID_ARCHITECTURES           = IA32 X64 EBC
>
> +#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64 LOONGARCH64
>
>  #
>
>
>
>  [Sources]
>
> @@ -37,6 +39,10 @@
>
>    IoLib
>
>    UefiBootServicesTableLib
>
>
>
> +[Pcd]
>
> +  gEfiMdePkgTokenSpaceGuid.PcdPciIoTranslationIsEnabled
>
> +  gEfiMdePkgTokenSpaceGuid.PcdPciIoTranslation
>
> +
>
>  [Protocols]
>
>    gEfiCpuIo2ProtocolGuid                         ## PRODUCES
>
>
>
> diff --git a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.uni b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.uni
>
> index 8d4e5dd6b4..14a36ff888 100644
>
> --- a/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.uni
>
> +++ b/UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.uni
>
> @@ -4,6 +4,8 @@
>
>  // Produces the CPU I/O 2 Protocol by using the services of the I/O Library.
>
>  //
>
>  // Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
>
> +// Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
>
> +// Copyright (c) 2023 Loongson Technology Corporation Limited. All rights reserved.<BR>
>
>  //
>
>  // SPDX-License-Identifier: BSD-2-Clause-Patent
>
>  //
>
> 


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



  reply	other threads:[~2023-12-20  7:41 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-12 13:09 [edk2-devel] [PATCH v4 00/37] Enable LoongArch virtual machine in edk2 Chao Li
2023-12-12 13:10 ` [edk2-devel] [PATCH v4 01/37] MdePkg: Add the header file named Csr.h for LoongArch64 Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 02/37] MdePkg: Add LoongArch64 FPU function set into BaseCpuLib Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 03/37] MdePkg: Add LoongArch64 exception function set into BaseLib Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 04/37] MdePkg: Add LoongArch64 local interrupt " Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 05/37] MdePkg: Add LoongArch Cpucfg function Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 06/37] MdePkg: Add read stable counter operation for LoongArch Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 07/37] MdePkg: Add CSR " Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 08/37] MdePkg: Add IOCSR " Chao Li
2023-12-12 13:11 ` [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0 Chao Li
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 10/37] UefiCpuPkg: Add LoongArch64 CPU Timer library Chao Li
2023-12-19  6:29   ` Ni, Ray
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 11/37] UefiCpuPkg: Add CPU exception library for LoongArch Chao Li
2023-12-19  6:30   ` Ni, Ray
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 12/37] UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg Chao Li
2023-12-13  5:17   ` Ni, Ray
2023-12-14  2:53     ` Chao Li
     [not found]     ` <17A0932406FD861E.11381@groups.io>
2023-12-19  1:59       ` Chao Li
2023-12-19  6:29         ` Ni, Ray
2023-12-19  6:56           ` Chao Li
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 13/37] UefiCpuPkg: Add LoongArch64CpuMmuLib " Chao Li
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 14/37] UefiCpuPkg: Add multiprocessor library for LoongArch64 Chao Li
2023-12-19  6:30   ` Ni, Ray
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 15/37] UefiCpuPkg: Add CpuDxe driver " Chao Li
2023-12-19  6:30   ` Ni, Ray
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 16/37] EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64 Chao Li
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 17/37] ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg Chao Li
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 18/37] MdePkg: Add a PCD feature flag named PcdPciIoTranslationIsEnabled Chao Li
2023-12-12 13:12 ` [edk2-devel] [PATCH v4 19/37] UefiCpuPkg: Add MMIO method in CpuIo2Dxe Chao Li
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 20/37] ArmVirtPkg: Enable UefiCpuPkg version CpuIo2Dxe Chao Li
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 21/37] OvmfPkg/RiscVVirt: " Chao Li
2023-12-20  7:01   ` Sunil V L
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 22/37] OvmfPkg/RiscVVirt: Remove PciCpuIo2Dxe from RiscVVirt Chao Li
2023-12-20  7:02   ` Sunil V L
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 23/37] ArmVirtPkg: Move the FdtSerialPortAddressLib to OvmfPkg Chao Li
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 24/37] ArmVirtPkg: Move the PcdTerminalTypeGuidBuffer into OvmfPkg Chao Li
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 25/37] ArmVirtPkg: Move PlatformBootManagerLib to OvmfPkg Chao Li
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 26/37] OvmfPkg/LoongArchVirt: Add stable timer driver Chao Li
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 27/37] OvmfPkg/LoongArchVirt: Add a NULL library named CollectApResouceLibNull Chao Li
2023-12-12 13:13 ` [edk2-devel] [PATCH v4 28/37] OvmfPkg/LoongArchVirt: Add serial port hook library Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 29/37] OvmfPkg/LoongArchVirt: Add the early serial port output library Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 30/37] OvmfPkg/LoongArchVirt: Add real time clock library Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 31/37] OvmfPkg/LoongArchVirt: Add NorFlashQemuLib Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 32/37] OvmfPkg/LoongArchVirt: Add FdtQemuFwCfgLib Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 33/37] OvmfPkg/LoongArchVirt: Add reset system library Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 34/37] OvmfPkg/LoongArchVirt: Support SEC phase Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 35/37] OvmfPkg/LoongArchVirt: Support PEI phase Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 36/37] OvmfPkg/LoongArchVirt: Add build file Chao Li
2023-12-12 13:14 ` [edk2-devel] [PATCH v4 37/37] OvmfPkg/LoongArchVirt: Add self introduction file Chao Li
     [not found] ` <17A017B459AD36A8.31409@groups.io>
2023-12-19 12:59   ` [edk2-devel] [PATCH v4 09/37] MdePkg: Add a new library named PeiServicesTablePointerLibKs0 Chao Li
2023-12-19 13:01   ` Chao Li
2023-12-19 13:07     ` 回复: " gaoliming via groups.io
2023-12-20  1:20       ` Chao Li
2023-12-21  7:16         ` 回复: " gaoliming via groups.io
2023-12-21 11:18           ` Chao Li
2023-12-25  1:33             ` 回复: " gaoliming via groups.io
2023-12-27  1:43               ` Chao Li
     [not found] ` <17A017C0864F4177.31409@groups.io>
2023-12-19 13:02   ` [edk2-devel] [PATCH v4 18/37] MdePkg: Add a PCD feature flag named PcdPciIoTranslationIsEnabled Chao Li
     [not found] ` <17A017C201FEB90D.32321@groups.io>
2023-12-19 13:03   ` [edk2-devel] [PATCH v4 19/37] UefiCpuPkg: Add MMIO method in CpuIo2Dxe Chao Li
2023-12-20  1:57     ` Ni, Ray
2023-12-20  7:41       ` Ard Biesheuvel [this message]
2023-12-20  9:44         ` Ni, Ray
2023-12-20  9:54           ` Ard Biesheuvel
2023-12-20 12:28             ` Ni, Ray
2023-12-20 15:17               ` Ard Biesheuvel
2023-12-21  3:48         ` Chao Li
2023-12-21  7:31           ` Ard Biesheuvel
2023-12-21 12:11             ` Chao Li
2023-12-21 12:31               ` Ard Biesheuvel
2023-12-21 12:41                 ` Chao Li
2023-12-21 13:59                   ` Ard Biesheuvel
2023-12-22  1:14                     ` Chao Li
2023-12-22  2:37                       ` Ni, Ray
2023-12-22  9:47                         ` Ard Biesheuvel
2023-12-22  9:56                           ` 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=CAMj1kXFj-Jb8c0h1fygv-yOCPpH8h5VanjhVRMNHzj7qEoPasQ@mail.gmail.com \
    --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