public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Chang, Abner" <abner.chang@amd.com>
To: Sunil V L <sunilvl@ventanamicro.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
	Jian J Wang <jian.j.wang@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>,
	Eric Dong <eric.dong@intel.com>, Ray Ni <ray.ni@intel.com>,
	Rahul Kumar <rahul1.kumar@intel.com>,
	Debkumar De <debkumar.de@intel.com>,
	Catharine West <catharine.west@intel.com>,
	Daniel Schaefer <git@danielschaefer.me>,
	Leif Lindholm <quic_llindhol@quicinc.com>,
	Ard Biesheuvel <ardb@kernel.org>,
	Heinrich Schuchardt <heinrich.schuchardt@canonical.com>,
	Anup Patel <apatel@ventanamicro.com>
Subject: Re: [RFC PATCH 16/17] UefiCpuPkg/CpuDxe: Add RISC-V support in CpuDxe module
Date: Thu, 8 Sep 2022 12:02:30 +0000	[thread overview]
Message-ID: <MN2PR12MB3966A131AA03A01387A41CEDEA409@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20220908105322.GA103934@sunil-laptop>

[AMD Official Use Only - General]



> -----Original Message-----
> From: Sunil V L <sunilvl@ventanamicro.com>
> Sent: Thursday, September 8, 2022 6:53 PM
> To: Chang, Abner <Abner.Chang@amd.com>
> Cc: devel@edk2.groups.io; Jian J Wang <jian.j.wang@intel.com>; Liming Gao
> <gaoliming@byosoft.com.cn>; Eric Dong <eric.dong@intel.com>; Ray Ni
> <ray.ni@intel.com>; Rahul Kumar <rahul1.kumar@intel.com>; Debkumar De
> <debkumar.de@intel.com>; Catharine West <catharine.west@intel.com>;
> Daniel Schaefer <git@danielschaefer.me>; Leif Lindholm
> <quic_llindhol@quicinc.com>; Ard Biesheuvel <ardb@kernel.org>; Heinrich
> Schuchardt <heinrich.schuchardt@canonical.com>; Anup Patel
> <apatel@ventanamicro.com>
> Subject: Re: [RFC PATCH 16/17] UefiCpuPkg/CpuDxe: Add RISC-V support in
> CpuDxe module
> 
> [CAUTION: External Email]
> 
> On Wed, Sep 07, 2022 at 12:46:59PM +0000, Chang, Abner wrote:
> > [AMD Official Use Only - General]
> >
> >
> >
> > > -----Original Message-----
> > > From: Sunil V L <sunilvl@ventanamicro.com>
> > > Sent: Wednesday, September 7, 2022 7:22 PM
> > > To: Chang, Abner <Abner.Chang@amd.com>
> > > Cc: devel@edk2.groups.io; Jian J Wang <jian.j.wang@intel.com>;
> > > Liming Gao <gaoliming@byosoft.com.cn>; Eric Dong
> > > <eric.dong@intel.com>; Ray Ni <ray.ni@intel.com>; Rahul Kumar
> > > <rahul1.kumar@intel.com>; Debkumar De <debkumar.de@intel.com>;
> > > Catharine West <catharine.west@intel.com>; Daniel Schaefer
> > > <git@danielschaefer.me>; Leif Lindholm <quic_llindhol@quicinc.com>;
> > > Ard Biesheuvel <ardb@kernel.org>; Heinrich Schuchardt
> > > <heinrich.schuchardt@canonical.com>; Anup Patel
> > > <apatel@ventanamicro.com>
> > > Subject: Re: [RFC PATCH 16/17] UefiCpuPkg/CpuDxe: Add RISC-V support
> > > in CpuDxe module
> > >
> > > [CAUTION: External Email]
> > >
> > > On Wed, Sep 07, 2022 at 09:32:12AM +0000, Chang, Abner wrote:
> > > > [AMD Official Use Only - General]
> > > >
> > > > Hi Sunil and UefiCpuPkg maintainers, For CpuDxe case, I think we
> > > > should abstract CpuDxe to accommodate all
> > > processor architectures instead of having copy for each archs.
> > > CpuDxeCommon.c can have the generic protocol structure and the
> > > installation functions, and CpuDxeCommon.h has the general
> > > definitions. So does CpuMp related files. Move processor
> > > architecture dependent files to under arch folders. AMD may have
> > > some differences with Intel so we will have CpuDxeAmd.inf under
> > > CpuDxe\. AMD is revising SmmFeatureCpuLib base on the similar
> > > concept.  I think this makes the module looks simple and
> > > architectural. Furthermore, the similar concept should apply to all
> > > modules (if
> > > necessary) under UefiCpuPkg.
> > > > I think we should revise CpuDxe before adding new arch such as
> > > > RISC-V
> > > and Loongson64 to this module.
> > > Thanks Abner!. I have sent V2 in the current form itself since I had
> > > to move DSC to OvmfPkg instead of edk2-platforms.
> > >
> > > I am not sure whether we really need this level of restructuring
> > > since I didn't find much to share between architectures. Thats why,
> > > I just made current sources as x86 speicifc and added RISC-V sources.
> > > Anyway, let me wait for maintainers feedback.
> > I was also struggled with UefiCpuPkg when I tried to move RISC-V stuff
> over here. Some modules are easy to be abstracted but some are not. Some
> as you mentioned have not much to share among processor archs. For these
> cases we can use folder or a separate module for the abstraction. Having X86
> source code on the module root and other processor archs in the folder look
> weird though.
> >
> > >Do you have a patch already
> > > for this restructuring? If so, I can rebase RISC-V changes on top of
> > >it if  maintainers accept the approach.
> > No,  I don't have that yet. But I am willing to help on restructuring this
> module and others if maintainers agree with this.
> That's great!. Could you please take care of refactoring
> DxeCpuExceptionHandlerLib also in UefiCpuPkg along with CpuDxe as soon
> as maintainers agree? That would be very helful.
Yes, I can do it together.

Abner

> 
> Thanks
> Sunil
> > Thanks
> > Abner
> > >
> > > Thanks
> > > Sunil
> > > >
> > > > Here is a BZ for UefiCpuPkg rearchitecture,
> > > >
> > >
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbu
> > > gz
> > > >
> > >
> illa.tianocore.org%2Fshow_bug.cgi%3Fid%3D3860&amp;data=05%7C01%7CA
> > > bner
> > >
> > .Chang%40amd.com%7Cc9bca42bd85c489c38ff08da90c33618%7C3dd8961fe
> > > 4884e60
> > > >
> > >
> 8e11a82d994e183d%7C0%7C0%7C637981465382450232%7CUnknown%7CTW
> > > FpbGZsb3d8
> > > >
> > >
> eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3
> > > D%7C3
> > > >
> > >
> 000%7C%7C%7C&amp;sdata=iDjOPZCMAH6BSBhR2kx567ibVHza2ZfhjzLHC77
> > > cfI8%3D&
> > > > amp;reserved=0
> > > >
> > > > Abner
> > > >
> > > > Something looks like below,
> > > > CpuDxe\X86\Ia32\
> > > >                        \IA32\CpuAsm.asm
> > > >                        \IA32\PageAttribute.c
> > > >               \X86\X64\
> > > >                        \X64\CpuAsm.asm
> > > >                        \X64\PageAttribute.c
> > > >               \X86\CpuGdt.c
> > > >                        \CpuGdt.h
> > > >                        \CpuPageTable.C
> > > >                        \CpuPageTableh.h
> > > >                        \CpuDxe.c
> > > >               \RISCV\RISCV64\
> > > >                           \RISCV64\CpuDxe.h
> > > >                           \CpuDxe.c
> > > >               \ARM\ARM\
> > > >                         \AARCH64\
> > > >                         \CpuDxe.c
> > > >               \CpuDxeCommon.c
> > > >               \CpuMpCommon.c
> > > >               \CpuDxeCommon.h
> > > >               \CpuMpCommon.h
> > > >               \CpuDxe.inf
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Sunil V L <sunilvl@ventanamicro.com>
> > > > > Sent: Wednesday, September 7, 2022 1:09 AM
> > > > > To: devel@edk2.groups.io
> > > > > Cc: Jian J Wang <jian.j.wang@intel.com>; Liming Gao
> > > > > <gaoliming@byosoft.com.cn>; Eric Dong <eric.dong@intel.com>; Ray
> > > > > Ni <ray.ni@intel.com>; Rahul Kumar <rahul1.kumar@intel.com>;
> > > > > Debkumar De <debkumar.de@intel.com>; Catharine West
> > > > > <catharine.west@intel.com>; Daniel Schaefer
> > > > > <git@danielschaefer.me>; Chang, Abner <Abner.Chang@amd.com>;
> > > > > Leif Lindholm <quic_llindhol@quicinc.com>; Ard Biesheuvel
> > > > > <ardb@kernel.org>; Heinrich Schuchardt
> > > > > <heinrich.schuchardt@canonical.com>; Anup Patel
> > > > > <apatel@ventanamicro.com>; Sunil V L <sunilvl@ventanamicro.com>
> > > > > Subject: [RFC PATCH 16/17] UefiCpuPkg/CpuDxe: Add RISC-V support
> > > > > in CpuDxe module
> > > > >
> > > > > [CAUTION: External Email]
> > > > >
> > > > > This DXE module initializes the RISC-V CPU by installing the CPU
> > > > > specific ARCH protocol handlers. This also initializes the
> > > > > RISCV_EFI_BOOT_PROTOCOL which is required on RISC-V platforms.
> > > > >
> > > > > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com>
> > > > > ---
> > > > >  UefiCpuPkg/CpuDxe/CpuDxe.inf       |  16 +-
> > > > >  UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.c | 337
> > > > > +++++++++++++++++++++++++++++
> > > > > UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.h | 200 +++++++++++++++++
> > > > >  3 files changed, 552 insertions(+), 1 deletion(-)  create mode
> > > > > 100644 UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.c
> > > > >  create mode 100644 UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.h
> > > > >
> > > > > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.inf
> > > > > b/UefiCpuPkg/CpuDxe/CpuDxe.inf index 4f2ea42f16..17cf2b1ecd
> > > > > 100644
> > > > > --- a/UefiCpuPkg/CpuDxe/CpuDxe.inf
> > > > > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.inf
> > > > > @@ -1,8 +1,12 @@
> > > > >  ## @file
> > > > >
> > > > > -#  CPU driver installs CPU Architecture Protocol and CPU MP protocol.
> > > > >
> > > > > +#  On X86, CPU driver installs CPU Architecture Protocol and
> > > > > +CPU MP
> > > > > protocol.
> > > > >
> > > > > +#
> > > > >
> > > > > +#  On RISC-V, CPU driver installs CPU Architecture Protocol and
> > > > > +RISC-V boot
> > > > >
> > > > > +#  protocol
> > > > >
> > > > >  #
> > > > >
> > > > >  #  Copyright (c) 2008 - 2019, Intel Corporation. All rights
> > > > > reserved.<BR>
> > > > >
> > > > >  #  Copyright (c) 2017, AMD Incorporated. All rights
> > > > > reserved.<BR>
> > > > >
> > > > > +#  Copyright (c) 2022, Ventana Micro Systems Inc. All rights
> > > > > +reserved.<BR>
> > > > >
> > > > >  #
> > > > >
> > > > >  #  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > >  #
> > > > >
> > > > > @@ -44,6 +48,9 @@
> > > > >    MtrrLib
> > > > >
> > > > >    UefiCpuLib
> > > > >
> > > > >
> > > > >
> > > > > +[LibraryClasses.RISCV64]
> > > > >
> > > > > +  RiscVSbiLib
> > > > >
> > > > > +
> > > > >
> > > > >  [Sources.IA32, Sources.X64]
> > > > >
> > > > >    CpuDxe.c
> > > > >
> > > > >    CpuDxe.h
> > > > >
> > > > > @@ -62,11 +69,18 @@
> > > > >    X64/CpuAsm.nasm
> > > > >
> > > > >    X64/PagingAttribute.c
> > > > >
> > > > >
> > > > >
> > > > > +[Sources.RISCV64]
> > > > >
> > > > > +  RiscV64/CpuDxe.c
> > > > >
> > > > > +  RiscV64/CpuDxe.h
> > > > >
> > > > > +
> > > > >
> > > > >  [Protocols]
> > > > >
> > > > >    gEfiCpuArchProtocolGuid                       ## PRODUCES
> > > > >
> > > > >    gEfiMpServiceProtocolGuid                     ## PRODUCES
> > > > >
> > > > >    gEfiSmmBase2ProtocolGuid                      ## SOMETIMES_CONSUMES
> > > > >
> > > > >
> > > > >
> > > > > +[Protocols.RISCV64]
> > > > >
> > > > > +  gRiscVEfiBootProtocolGuid                     ## PRODUCES
> > > > >
> > > > > +
> > > > >
> > > > >  [Guids]
> > > > >
> > > > >    gIdleLoopEventGuid                            ## CONSUMES           ## Event
> > > > >
> > > > >    gEfiVectorHandoffTableGuid                    ## SOMETIMES_CONSUMES
> ##
> > > > > SystemTable
> > > > >
> > > > > diff --git a/UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.c
> > > > > b/UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.c
> > > > > new file mode 100644
> > > > > index 0000000000..4112b6b8c6
> > > > > --- /dev/null
> > > > > +++ b/UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.c
> > > > > @@ -0,0 +1,337 @@
> > > > > +/** @file
> > > > >
> > > > > +  RISC-V CPU DXE driver.
> > > > >
> > > > > +
> > > > >
> > > > > +  Copyright (c) 2016 - 2022, Hewlett Packard Enterprise Development
> LP.
> > > > > + All rights reserved.<BR>
> > > > >
> > > > > +  Copyright (c) 2022, Ventana Micro Systems Inc. All rights
> > > > > + reserved.<BR>
> > > > >
> > > > > +
> > > > >
> > > > > +  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +
> > > > >
> > > > > +#include <Library/PcdLib.h>
> > > > >
> > > > > +#include <Register/RiscV64/RiscVAsm.h>
> > > > >
> > > > > +#include "CpuDxe.h"
> > > > >
> > > > > +
> > > > >
> > > > > +//
> > > > >
> > > > > +// Global Variables
> > > > >
> > > > > +//
> > > > >
> > > > > +STATIC BOOLEAN     mInterruptState = FALSE;
> > > > >
> > > > > +STATIC EFI_HANDLE  mCpuHandle      = NULL;
> > > > >
> > > > > +STATIC UINTN mBootHartId;
> > > > >
> > > > > +RISCV_EFI_BOOT_PROTOCOL gRiscvBootProtocol;
> > > > >
> > > > > +
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +RiscvGetBootHartId (
> > > > >
> > > > > +  IN RISCV_EFI_BOOT_PROTOCOL   *This,
> > > > >
> > > > > +  OUT UINTN                    *BootHartId
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  if((This != &gRiscvBootProtocol) || (BootHartId == NULL)) {
> > > > >
> > > > > +    return EFI_INVALID_PARAMETER;
> > > > >
> > > > > +  }
> > > > >
> > > > > +
> > > > >
> > > > > +  *BootHartId = mBootHartId;
> > > > >
> > > > > +  return EFI_SUCCESS;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +RISCV_EFI_BOOT_PROTOCOL  gRiscvBootProtocol = {
> > > > >
> > > > > +  RISCV_EFI_BOOT_PROTOCOL_LATEST_VERSION,
> > > > >
> > > > > +  RiscvGetBootHartId
> > > > >
> > > > > +};
> > > > >
> > > > > +
> > > > >
> > > > > +EFI_CPU_ARCH_PROTOCOL  gCpu = {
> > > > >
> > > > > +  CpuFlushCpuDataCache,
> > > > >
> > > > > +  CpuEnableInterrupt,
> > > > >
> > > > > +  CpuDisableInterrupt,
> > > > >
> > > > > +  CpuGetInterruptState,
> > > > >
> > > > > +  CpuInit,
> > > > >
> > > > > +  CpuRegisterInterruptHandler,
> > > > >
> > > > > +  CpuGetTimerValue,
> > > > >
> > > > > +  CpuSetMemoryAttributes,
> > > > >
> > > > > +  1,                          // NumberOfTimers
> > > > >
> > > > > +  4                           // DmaBufferAlignment
> > > > >
> > > > > +};
> > > > >
> > > > > +
> > > > >
> > > > > +//
> > > > >
> > > > > +// CPU Arch Protocol Functions
> > > > >
> > > > > +//
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Flush CPU data cache. If the instruction cache is fully
> > > > > + coherent
> > > > >
> > > > > +  with all DMA operations then function can just return EFI_SUCCESS.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +  @param  Start             Physical address to start flushing from.
> > > > >
> > > > > +  @param  Length            Number of bytes to flush. Round up to
> chipset
> > > > >
> > > > > +                            granularity.
> > > > >
> > > > > +  @param  FlushType         Specifies the type of flush operation to
> > > perform.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If cache was flushed
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED   If flush type is not supported.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If requested range could not be
> flushed.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuFlushCpuDataCache (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN EFI_PHYSICAL_ADDRESS   Start,
> > > > >
> > > > > +  IN UINT64                 Length,
> > > > >
> > > > > +  IN EFI_CPU_FLUSH_TYPE     FlushType
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  return EFI_SUCCESS;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Enables CPU interrupts.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If interrupts were enabled in the CPU
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If interrupts could not be enabled
> > > > > + on the
> > > CPU.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuEnableInterrupt (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  EnableInterrupts ();
> > > > >
> > > > > +  mInterruptState = TRUE;
> > > > >
> > > > > +  return EFI_SUCCESS;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Disables CPU interrupts.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If interrupts were disabled in the CPU.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If interrupts could not be disabled
> > > > > + on the
> > > CPU.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuDisableInterrupt (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  DisableInterrupts ();
> > > > >
> > > > > +  mInterruptState = FALSE;
> > > > >
> > > > > +  return EFI_SUCCESS;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Return the state of interrupts.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This                   Protocol instance structure
> > > > >
> > > > > +  @param  State                  Pointer to the CPU's current interrupt state
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS            If interrupts were disabled in the CPU.
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER  State is NULL.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuGetInterruptState (
> > > > >
> > > > > +  IN  EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  OUT BOOLEAN                *State
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  if (State == NULL) {
> > > > >
> > > > > +    return EFI_INVALID_PARAMETER;
> > > > >
> > > > > +  }
> > > > >
> > > > > +
> > > > >
> > > > > +  *State = mInterruptState;
> > > > >
> > > > > +  return EFI_SUCCESS;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Generates an INIT to the CPU.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +  @param  InitType          Type of CPU INIT to perform
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If CPU INIT occurred. This value should
> never
> > > be
> > > > >
> > > > > +                            seen.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If CPU INIT failed.
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED   Requested type of CPU INIT not
> > > supported.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuInit (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN EFI_CPU_INIT_TYPE      InitType
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  return EFI_UNSUPPORTED;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Registers a function to be called from the CPU interrupt handler.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This                   Protocol instance structure
> > > > >
> > > > > +  @param  InterruptType          Defines which interrupt to hook. IA-32
> > > > >
> > > > > +                                 valid range is 0x00 through
> > > > > + 0xFF
> > > > >
> > > > > +  @param  InterruptHandler       A pointer to a function of type
> > > > >
> > > > > +                                 EFI_CPU_INTERRUPT_HANDLER that
> > > > > + is called
> > > > >
> > > > > +                                 when a processor interrupt occurs.
> > > > > + A null
> > > > >
> > > > > +                                 pointer is an error condition.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS            If handler installed or uninstalled.
> > > > >
> > > > > +  @retval EFI_ALREADY_STARTED    InterruptHandler is not NULL, and
> a
> > > > > handler
> > > > >
> > > > > +                                 for InterruptType was previously installed.
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER  InterruptHandler is NULL, and
> > > > > + a handler for
> > > > >
> > > > > +                                 InterruptType was not previously installed.
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED        The interrupt specified by
> > > InterruptType
> > > > >
> > > > > +                                 is not supported.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuRegisterInterruptHandler (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL      *This,
> > > > >
> > > > > +  IN EFI_EXCEPTION_TYPE         InterruptType,
> > > > >
> > > > > +  IN EFI_CPU_INTERRUPT_HANDLER  InterruptHandler
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  return RegisterCpuInterruptHandler (InterruptType,
> > > > > + InterruptHandler);
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Returns a timer value from one of the CPU's internal timers.
> > > > > + There is no
> > > > >
> > > > > +  inherent time interval between ticks but is a function of the
> > > > > + CPU
> > > > > frequency.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This                - Protocol instance structure.
> > > > >
> > > > > +  @param  TimerIndex          - Specifies which CPU timer is requested.
> > > > >
> > > > > +  @param  TimerValue          - Pointer to the returned timer value.
> > > > >
> > > > > +  @param  TimerPeriod         - A pointer to the amount of time that
> > > passes
> > > > >
> > > > > +                                in femtoseconds (10-15) for
> > > > > + each increment
> > > > >
> > > > > +                                of TimerValue. If TimerValue
> > > > > + does not
> > > > >
> > > > > +                                increment at a predictable
> > > > > + rate, then 0 is
> > > > >
> > > > > +                                returned.  The amount of time
> > > > > + that has
> > > > >
> > > > > +                                passed between two calls to
> > > > > + GetTimerValue()
> > > > >
> > > > > +                                can be calculated with the
> > > > > + formula
> > > > >
> > > > > +                                (TimerValue2 - TimerValue1) * TimerPeriod.
> > > > >
> > > > > +                                This parameter is optional and may be NULL.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS           - If the CPU timer count was returned.
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED       - If the CPU does not have any
> readable
> > > > > timers.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR      - If an error occurred while reading
> the
> > > > > timer.
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER - TimerIndex is not valid or
> > > > > + TimerValue
> > > > > is NULL.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuGetTimerValue (
> > > > >
> > > > > +  IN  EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN  UINT32                 TimerIndex,
> > > > >
> > > > > +  OUT UINT64                 *TimerValue,
> > > > >
> > > > > +  OUT UINT64                 *TimerPeriod OPTIONAL
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  return EFI_UNSUPPORTED;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Implementation of SetMemoryAttributes() service of CPU
> > > > > + Architecture
> > > > > Protocol.
> > > > >
> > > > > +
> > > > >
> > > > > +  This function modifies the attributes for the memory region
> > > > > + specified by BaseAddress and
> > > > >
> > > > > +  Length from their current attributes to the attributes
> > > > > + specified by
> > > > > Attributes.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This             The EFI_CPU_ARCH_PROTOCOL instance.
> > > > >
> > > > > +  @param  BaseAddress      The physical address that is the start
> address
> > > of a
> > > > > memory region.
> > > > >
> > > > > +  @param  Length           The size in bytes of the memory region.
> > > > >
> > > > > +  @param  Attributes       The bit mask of attributes to set for the
> > > memory
> > > > > region.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS           The attributes were set for the memory
> > > region.
> > > > >
> > > > > +  @retval EFI_ACCESS_DENIED     The attributes for the memory
> > > resource
> > > > > range specified by
> > > > >
> > > > > +                                BaseAddress and Length cannot be modified.
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER Length is zero.
> > > > >
> > > > > +                                Attributes specified an illegal
> > > > > + combination of attributes that
> > > > >
> > > > > +                                cannot be set together.
> > > > >
> > > > > +  @retval EFI_OUT_OF_RESOURCES  There are not enough system
> > > > > resources
> > > > > + to modify the attributes of
> > > > >
> > > > > +                                the memory resource range.
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED       The processor does not support
> one or
> > > > > more bytes of the memory
> > > > >
> > > > > +                                resource range specified by BaseAddress and Length.
> > > > >
> > > > > +                                The bit mask of attributes is
> > > > > + not support for the memory resource
> > > > >
> > > > > +                                range specified by BaseAddress and Length.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuSetMemoryAttributes (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN EFI_PHYSICAL_ADDRESS   BaseAddress,
> > > > >
> > > > > +  IN UINT64                 Length,
> > > > >
> > > > > +  IN UINT64                 Attributes
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  DEBUG ((DEBUG_INFO, "%a: Set memory attributes not supported
> > > > > + yet\n", __FUNCTION__));
> > > > >
> > > > > +  return EFI_SUCCESS;
> > > > >
> > > > > +}
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Initialize the state information for the CPU Architectural Protocol.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param ImageHandle     Image handle this driver.
> > > > >
> > > > > +  @param SystemTable     Pointer to the System Table.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS           Thread can be successfully created
> > > > >
> > > > > +  @retval EFI_OUT_OF_RESOURCES  Cannot allocate protocol data
> > > > > + structure
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR      Cannot create the thread
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +InitializeCpu (
> > > > >
> > > > > +  IN EFI_HANDLE        ImageHandle,
> > > > >
> > > > > +  IN EFI_SYSTEM_TABLE  *SystemTable
> > > > >
> > > > > +  )
> > > > >
> > > > > +{
> > > > >
> > > > > +  EFI_STATUS  Status;
> > > > >
> > > > > +  EFI_RISCV_FIRMWARE_CONTEXT *FirmwareContext;
> > > > >
> > > > > +
> > > > >
> > > > > +  GetFirmwareContextPointer (&FirmwareContext);
> > > > >
> > > > > +  ASSERT (FirmwareContext != NULL);
> > > > >
> > > > > +  if (FirmwareContext == NULL) {
> > > > >
> > > > > +    DEBUG ((DEBUG_ERROR, "Failed to get the pointer of
> > > > > + EFI_RISCV_FIRMWARE_CONTEXT\n"));
> > > > >
> > > > > +    return EFI_NOT_FOUND;
> > > > >
> > > > > +  }
> > > > >
> > > > > +  DEBUG ((DEBUG_INFO, " %a: Firmware Context is at 0x%x.\n",
> > > > > + __FUNCTION__, FirmwareContext));
> > > > >
> > > > > +
> > > > >
> > > > > +  mBootHartId = FirmwareContext->BootHartId;
> > > > >
> > > > > +  DEBUG ((DEBUG_INFO, " %a: mBootHartId = 0x%x.\n",
> > > __FUNCTION__,
> > > > > + mBootHartId));
> > > > >
> > > > > +
> > > > >
> > > > > +
> > > > >
> > > > > +  InitializeCpuExceptionHandlers(NULL);
> > > > >
> > > > > +
> > > > >
> > > > > +  //
> > > > >
> > > > > +  // Make sure interrupts are disabled
> > > > >
> > > > > +  //
> > > > >
> > > > > +  DisableInterrupts ();
> > > > >
> > > > > +
> > > > >
> > > > > +  Status = gBS->InstallProtocolInterface (&ImageHandle,
> > > > >
> > > > > +
> > > > > + &gRiscVEfiBootProtocolGuid,
> > > > >
> > > > > +                                          EFI_NATIVE_INTERFACE,
> > > > >
> > > > > +                                          &gRiscvBootProtocol
> > > > >
> > > > > +                                         );
> > > > >
> > > > > +
> > > > >
> > > > > +  ASSERT_EFI_ERROR (Status);
> > > > >
> > > > > +
> > > > >
> > > > > +  //
> > > > >
> > > > > +  // Install CPU Architectural Protocol
> > > > >
> > > > > +  //
> > > > >
> > > > > +  Status = gBS->InstallMultipleProtocolInterfaces (
> > > > >
> > > > > +                  &mCpuHandle,
> > > > >
> > > > > +                  &gEfiCpuArchProtocolGuid,
> > > > >
> > > > > +                  &gCpu,
> > > > >
> > > > > +                  NULL
> > > > >
> > > > > +                  );
> > > > >
> > > > > +  ASSERT_EFI_ERROR (Status);
> > > > >
> > > > > +  return Status;
> > > > >
> > > > > +}
> > > > >
> > > > > diff --git a/UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.h
> > > > > b/UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.h
> > > > > new file mode 100644
> > > > > index 0000000000..f039759dbd
> > > > > --- /dev/null
> > > > > +++ b/UefiCpuPkg/CpuDxe/RiscV64/CpuDxe.h
> > > > > @@ -0,0 +1,200 @@
> > > > > +/** @file
> > > > >
> > > > > +  RISC-V CPU DXE module header file.
> > > > >
> > > > > +
> > > > >
> > > > > +  Copyright (c) 2016 - 2022, Hewlett Packard Enterprise Development
> LP.
> > > > > + All rights reserved.<BR>
> > > > >
> > > > > +  Copyright (c) 2022, Ventana Micro Systems Inc. All rights
> > > > > + reserved.<BR>
> > > > >
> > > > > +
> > > > >
> > > > > +  SPDX-License-Identifier: BSD-2-Clause-Patent
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +
> > > > >
> > > > > +#ifndef CPU_DXE_H_
> > > > >
> > > > > +#define CPU_DXE_H_
> > > > >
> > > > > +
> > > > >
> > > > > +#include <PiDxe.h>
> > > > >
> > > > > +
> > > > >
> > > > > +#include <Protocol/Cpu.h>
> > > > >
> > > > > +#include <Protocol/RiscVBootProtocol.h>
> > > > >
> > > > > +#include <Library/RiscVSbiLib.h>
> > > > >
> > > > > +#include <Library/BaseLib.h>
> > > > >
> > > > > +#include <Library/CpuExceptionHandlerLib.h>
> > > > >
> > > > > +#include <Library/DebugLib.h>
> > > > >
> > > > > +#include <Library/UefiBootServicesTableLib.h>
> > > > >
> > > > > +#include <Library/UefiDriverEntryPoint.h>
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Flush CPU data cache. If the instruction cache is fully
> > > > > + coherent
> > > > >
> > > > > +  with all DMA operations then function can just return EFI_SUCCESS.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +  @param  Start             Physical address to start flushing from.
> > > > >
> > > > > +  @param  Length            Number of bytes to flush. Round up to
> chipset
> > > > >
> > > > > +                            granularity.
> > > > >
> > > > > +  @param  FlushType         Specifies the type of flush operation to
> > > perform.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If cache was flushed
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED   If flush type is not supported.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If requested range could not be
> flushed.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuFlushCpuDataCache (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN EFI_PHYSICAL_ADDRESS   Start,
> > > > >
> > > > > +  IN UINT64                 Length,
> > > > >
> > > > > +  IN EFI_CPU_FLUSH_TYPE     FlushType
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Enables CPU interrupts.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If interrupts were enabled in the CPU
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If interrupts could not be enabled
> > > > > + on the
> > > CPU.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuEnableInterrupt (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Disables CPU interrupts.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If interrupts were disabled in the CPU.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If interrupts could not be disabled
> > > > > + on the
> > > CPU.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuDisableInterrupt (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Return the state of interrupts.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This                   Protocol instance structure
> > > > >
> > > > > +  @param  State                  Pointer to the CPU's current interrupt state
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS            If interrupts were disabled in the CPU.
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER  State is NULL.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuGetInterruptState (
> > > > >
> > > > > +  IN  EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  OUT BOOLEAN                *State
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Generates an INIT to the CPU.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This              Protocol instance structure
> > > > >
> > > > > +  @param  InitType          Type of CPU INIT to perform
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS       If CPU INIT occurred. This value should
> never
> > > be
> > > > >
> > > > > +                            seen.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR  If CPU INIT failed.
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED   Requested type of CPU INIT not
> > > supported.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuInit (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN EFI_CPU_INIT_TYPE      InitType
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Registers a function to be called from the CPU interrupt handler.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This                   Protocol instance structure
> > > > >
> > > > > +  @param  InterruptType          Defines which interrupt to hook. IA-32
> > > > >
> > > > > +                                 valid range is 0x00 through
> > > > > + 0xFF
> > > > >
> > > > > +  @param  InterruptHandler       A pointer to a function of type
> > > > >
> > > > > +                                 EFI_CPU_INTERRUPT_HANDLER that
> > > > > + is called
> > > > >
> > > > > +                                 when a processor interrupt occurs.
> > > > > + A null
> > > > >
> > > > > +                                 pointer is an error condition.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS            If handler installed or uninstalled.
> > > > >
> > > > > +  @retval EFI_ALREADY_STARTED    InterruptHandler is not NULL, and
> a
> > > > > handler
> > > > >
> > > > > +                                 for InterruptType was previously installed.
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER  InterruptHandler is NULL, and
> > > > > + a handler for
> > > > >
> > > > > +                                 InterruptType was not previously installed.
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED        The interrupt specified by
> > > InterruptType
> > > > >
> > > > > +                                 is not supported.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuRegisterInterruptHandler (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL      *This,
> > > > >
> > > > > +  IN EFI_EXCEPTION_TYPE         InterruptType,
> > > > >
> > > > > +  IN EFI_CPU_INTERRUPT_HANDLER  InterruptHandler
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Returns a timer value from one of the CPU's internal timers.
> > > > > + There is no
> > > > >
> > > > > +  inherent time interval between ticks but is a function of the
> > > > > + CPU
> > > > > frequency.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This                - Protocol instance structure.
> > > > >
> > > > > +  @param  TimerIndex          - Specifies which CPU timer is requested.
> > > > >
> > > > > +  @param  TimerValue          - Pointer to the returned timer value.
> > > > >
> > > > > +  @param  TimerPeriod         - A pointer to the amount of time that
> > > passes
> > > > >
> > > > > +                                in femtoseconds (10-15) for
> > > > > + each increment
> > > > >
> > > > > +                                of TimerValue. If TimerValue
> > > > > + does not
> > > > >
> > > > > +                                increment at a predictable
> > > > > + rate, then 0 is
> > > > >
> > > > > +                                returned.  The amount of time
> > > > > + that has
> > > > >
> > > > > +                                passed between two calls to
> > > > > + GetTimerValue()
> > > > >
> > > > > +                                can be calculated with the
> > > > > + formula
> > > > >
> > > > > +                                (TimerValue2 - TimerValue1) * TimerPeriod.
> > > > >
> > > > > +                                This parameter is optional and may be NULL.
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS           - If the CPU timer count was returned.
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED       - If the CPU does not have any
> readable
> > > > > timers.
> > > > >
> > > > > +  @retval EFI_DEVICE_ERROR      - If an error occurred while reading
> the
> > > > > timer.
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER - TimerIndex is not valid or
> > > > > + TimerValue
> > > > > is NULL.
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuGetTimerValue (
> > > > >
> > > > > +  IN  EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN  UINT32                 TimerIndex,
> > > > >
> > > > > +  OUT UINT64                 *TimerValue,
> > > > >
> > > > > +  OUT UINT64                 *TimerPeriod OPTIONAL
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +/**
> > > > >
> > > > > +  Set memory cacheability attributes for given range of memeory.
> > > > >
> > > > > +
> > > > >
> > > > > +  @param  This                   Protocol instance structure
> > > > >
> > > > > +  @param  BaseAddress            Specifies the start address of the
> > > > >
> > > > > +                                 memory range
> > > > >
> > > > > +  @param  Length                 Specifies the length of the memory range
> > > > >
> > > > > +  @param  Attributes             The memory cacheability for the memory
> > > range
> > > > >
> > > > > +
> > > > >
> > > > > +  @retval EFI_SUCCESS            If the cacheability of that memory range
> is
> > > > >
> > > > > +                                 set successfully
> > > > >
> > > > > +  @retval EFI_UNSUPPORTED        If the desired operation cannot be
> > > done
> > > > >
> > > > > +  @retval EFI_INVALID_PARAMETER  The input parameter is not
> > > > > + correct,
> > > > >
> > > > > +                                 such as Length = 0
> > > > >
> > > > > +
> > > > >
> > > > > +**/
> > > > >
> > > > > +EFI_STATUS
> > > > >
> > > > > +EFIAPI
> > > > >
> > > > > +CpuSetMemoryAttributes (
> > > > >
> > > > > +  IN EFI_CPU_ARCH_PROTOCOL  *This,
> > > > >
> > > > > +  IN EFI_PHYSICAL_ADDRESS   BaseAddress,
> > > > >
> > > > > +  IN UINT64                 Length,
> > > > >
> > > > > +  IN UINT64                 Attributes
> > > > >
> > > > > +  );
> > > > >
> > > > > +
> > > > >
> > > > > +#endif
> > > > >
> > > > > --
> > > > > 2.25.1

  reply	other threads:[~2022-09-08 12:02 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-06 17:08 [RFC PATCH 00/17] Refactor and add RISC-V support in edk2 repo Sunil V L
2022-09-06 17:08 ` [RFC PATCH 01/17] MdePkg/Register: Add register definition header files for RISC-V Sunil V L
2022-09-06 17:08 ` [RFC PATCH 02/17] MdePkg/MdePkg.dec: Add RISCV_EFI_BOOT_PROTOCOL GUID Sunil V L
2022-09-06 17:08 ` [RFC PATCH 03/17] MdePkg/Protocol: Add RiscVBootProtocol.h Sunil V L
2022-09-06 17:08 ` [RFC PATCH 04/17] MdeModulePkg/MdeModulePkg.dec: Add PCD variables for RISC-V Sunil V L
2022-09-06 17:08 ` [RFC PATCH 05/17] UefiCpuPkg.dec: Add PCD variable " Sunil V L
2022-09-06 17:08 ` [RFC PATCH 06/17] MdePkg/BaseLib: RISC-V: Add generic CPU related functions Sunil V L
2022-09-06 17:08 ` [RFC PATCH 07/17] MdePkg: Add ArchTimerLib library Sunil V L
2022-09-06 17:08 ` [RFC PATCH 08/17] MdePkg: Add RiscVSbiLib Library for RISC-V Sunil V L
2022-09-06 17:08 ` [RFC PATCH 09/17] UefiCpuPkg/DxeCpuExceptionHandlerLib: Refactor to add other architectures Sunil V L
2022-09-06 17:08 ` [RFC PATCH 10/17] UefiCpuPkg: Add RISC-V support in DxeCpuExceptionHandlerLib Sunil V L
2022-09-06 17:08 ` [RFC PATCH 11/17] MdePkg/Library: Add ResetSystemLib library Sunil V L
2022-09-06 17:08 ` [RFC PATCH 12/17] UefiCpuPkg/SecCore: Add SEC startup code for RISC-V Sunil V L
2022-09-06 17:08 ` [RFC PATCH 13/17] MdePkg: Add PlatformPeiLib library Sunil V L
2022-09-06 17:08 ` [RFC PATCH 14/17] MdeModulePkg/Universal: Add PlatformPei module for RISC-V Sunil V L
2022-09-06 17:08 ` [RFC PATCH 15/17] UefiCpuPkg/CpuDxe: Refactor to allow other CPU architectures Sunil V L
2022-09-06 17:08 ` [RFC PATCH 16/17] UefiCpuPkg/CpuDxe: Add RISC-V support in CpuDxe module Sunil V L
2022-09-07  9:32   ` Chang, Abner
2022-09-07 11:22     ` Sunil V L
2022-09-07 12:46       ` Chang, Abner
2022-09-08 10:53         ` Sunil V L
2022-09-08 12:02           ` Chang, Abner [this message]
2022-09-06 17:08 ` [RFC PATCH 17/17] MdeModulePkg/Universal: Add TimerDxe module Sunil V L
2022-09-07  5:54 ` [edk2-devel] [RFC PATCH 00/17] Refactor and add RISC-V support in edk2 repo Gerd Hoffmann

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=MN2PR12MB3966A131AA03A01387A41CEDEA409@MN2PR12MB3966.namprd12.prod.outlook.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