On Mon, Sep 23, 2019 at 08:31:45AM +0800, Abner Chang wrote:
> RiscVDxeIplHandoffLib.inf: Simply use stack switch to hand off to DXE
> phase.
> 
> RiscVDxeIplHandoffOpenSbiLib.inf: Hand off to DXE phase using OpenSBI
> interface.
> 
> Signed-off-by: Abner Chang <abner.ch...@hpe.com>
> ---
>  .../RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.c  |  41 +++++++++
>  .../RiscVDxeIplHandoffLib.inf                      |  32 +++++++
>  .../RiscVDxeIplHandoffOpenSbiLib.c                 | 102 
> +++++++++++++++++++++
>  .../RiscVDxeIplHandoffOpenSbiLib.inf               |  33 +++++++
>  4 files changed, 208 insertions(+)
>  create mode 100644 
> RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.c
>  create mode 100644 
> RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.inf
>  create mode 100644 
> RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.c
>  create mode 100644 
> RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.inf
> 
> diff --git a/RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.c 
> b/RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.c
> new file mode 100644
> index 0000000..211b4e8
> --- /dev/null
> +++ b/RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.c
> @@ -0,0 +1,41 @@
> +/** @file
> +  RISC-V platform level DXE core hand off library
> +
> +  Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights 
> reserved.<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +/**
> +   RISC-V platform DXE IPL to DXE core handoff process.
> +
> +   This function performs a CPU architecture specific operations to execute
> +   the entry point of DxeCore with the parameters of HobList.
> +   It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase.
> +
> +   @param BaseOfStack        Base address of stack
> +   @param TopOfStack         Top address of stack
> +   @param DxeCoreEntryPoint  The entry point of DxeCore.
> +   @param HobList            The start of HobList passed to DxeCore.
> +
> +**/
> +
> +VOID
> +RiscVPlatformHandOffToDxeCore (
> +  IN VOID *BaseOfStack,
> +  IN VOID *TopOfStack,
> +  IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint,
> +  IN EFI_PEI_HOB_POINTERS HobList
> +  )
> +{
> +
> +  //
> +  // Transfer the control to the entry point of DxeCore.
> +  //
> +  SwitchStack (
> +    (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,
> +    HobList.Raw,
> +    NULL,
> +    TopOfStack
> +    );
> +}
> diff --git a/RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.inf 
> b/RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.inf
> new file mode 100644
> index 0000000..986db1d
> --- /dev/null
> +++ b/RiscVPkg/Library/RiscVDxeIplHandoffLib/RiscVDxeIplHandoffLib.inf
> @@ -0,0 +1,32 @@
> +## @file
> +#  Instance of RISC-V DXE IPL to DXE core handoff platform library
> +#
> +#  Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights 
> reserved.<BR>
> +#
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> +##
> +
> +[Defines]
> +  INF_VERSION                    = 0x0001001b
> +  BASE_NAME                      = RiscVPlatformDxeIplLib
> +  FILE_GUID                      = 2A77EE71-9F55-43F9-8773-7854A5B56086
> +  MODULE_TYPE                    = PEIM
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = RiscVPlatformDxeIplLib|PEIM PEI_CORE
> +
> +#
> +#  VALID_ARCHITECTURES           = RISCV64
> +#
> +
> +[Sources]
> +  RiscVDxeIplHandoffLib.c
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  RiscVPkg/RiscVPkg.dec
> +
> +[LibraryClasses]
> +  DebugLib
> +  RiscVCpuLib
> +  RiscVOpensbiLib
> +
> diff --git 
> a/RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.c
>  
> b/RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.c
> new file mode 100644
> index 0000000..c640fd2
> --- /dev/null
> +++ 
> b/RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.c
> @@ -0,0 +1,102 @@
> +/** @file
> +  RISC-V DXE IPL to DXE core handoff platform library using OpenSBI
> +
> +  Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights 
> reserved.<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include <PiPei.h>
> +#include <Library/DebugLib.h>
> +#include <Library/BaseLib.h>
> +
> +#include <sbi/sbi.h>
> +#include <sbi/sbi_hart.h>
> +#include <sbi/sbi_scratch.h>
> +#include <sbi/sbi_init.h>
> +#include <sbi/riscv_encoding.h>
> +#include <Library/RiscVCpuLib.h>
> +#include <Library/RiscVPlatformDxeIpl.h>

Please sort include files alphabetically.

> +
> +/**
> +   RISC-V platform DXE IPL to DXE OpenSBI mdoe switch handler.
> +   This function is executed in RISC-V Supervisor mode.
> +
> +   This function performs a CPU architecture specific operations to execute
> +   the entry point of DxeCore with the parameters of HobList.
> +   It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase.
> +
> +   @param BaseOfStack        Base address of stack
> +   @param TopOfStack         Top address of stack
> +   @param DxeCoreEntryPoint  The entry point of DxeCore.
> +   @param HobList            The start of HobList passed to DxeCore.
> +
> +**/
> +VOID
> +RiscVDxeIplHandoffOpenSbiHandler (
> +  IN UINTN HardId,
> +  IN OPENSBI_SWITCH_MODE_CONTEXT *ThisSwitchContext
> +  )
> +{
> +  DEBUG ((DEBUG_INFO, "[OpenSBI]: OpenSBI mode switch DXE IPL Handoff 
> handler entry\n"));

I would prefer not having [OpenSBI] tags all over EDK2 code.
Use %a __FUNCTION__ if you want to indicate location.
This applies to the whole file.

> +
> +  SwitchStack (
> +    (SWITCH_STACK_ENTRY_POINT)(UINTN)ThisSwitchContext->DxeCoreEntryPoint,
> +    ThisSwitchContext->HobList.Raw,
> +    NULL,
> +    ThisSwitchContext->TopOfStack
> +    );
> +
> +  //
> +  // Shold never came back.
> +  //
> +  __builtin_unreachable();

Please use the UNREACHABLE () macro from Base.h.

/
    Leif

> +}
> +
> +
> +/**
> +   RISC-V platform DXE IPL to DXE core handoff process.
> +
> +   This function performs a CPU architecture specific operations to execute
> +   the entry point of DxeCore with the parameters of HobList.
> +   It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase.
> +
> +   @param BaseOfStack        Base address of stack
> +   @param TopOfStack         Top address of stack
> +   @param DxeCoreEntryPoint  The entry point of DxeCore.
> +   @param HobList            The start of HobList passed to DxeCore.
> +
> +**/
> +VOID
> +RiscVPlatformHandOffToDxeCore (
> +  IN VOID *BaseOfStack,
> +  IN VOID *TopOfStack,
> +  IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint,
> +  IN EFI_PEI_HOB_POINTERS HobList
> +  )
> +{
> +  struct sbi_scratch *ThisScratch;
> +  OPENSBI_SWITCH_MODE_CONTEXT OpenSbiSwitchModeContext;
> +
> +  DEBUG ((DEBUG_INFO, "[OpenSBI]: DXE IPL to DXE Core using OpenSBI\n"));
> +  //
> +  // Setup next address in OpenSBI scratch
> +  //
> +  OpenSbiSwitchModeContext.BaseOfStack = BaseOfStack;
> +  OpenSbiSwitchModeContext.TopOfStack = TopOfStack;
> +  OpenSbiSwitchModeContext.HobList = HobList;
> +  OpenSbiSwitchModeContext.DxeCoreEntryPoint = DxeCoreEntryPoint;
> +  ThisScratch = sbi_scratch_thishart_ptr ();
> +  ThisScratch->next_arg1 = (unsigned long)(UINTN)&OpenSbiSwitchModeContext;
> +  ThisScratch->next_addr = (unsigned 
> long)(UINTN)RiscVDxeIplHandoffOpenSbiHandler;
> +  ThisScratch->next_mode = PRV_S;
> +
> +  DEBUG ((DEBUG_INFO, "          Base address of satck: 0x%x\n", 
> BaseOfStack));
> +  DEBUG ((DEBUG_INFO, "          Top address of satck: 0x%x\n", TopOfStack));
> +  DEBUG ((DEBUG_INFO, "          HOB list address: 0x%x\n", &HobList));
> +  DEBUG ((DEBUG_INFO, "          DXE core entry pointer: 0x%x\n", 
> DxeCoreEntryPoint));
> +  DEBUG ((DEBUG_INFO, "          OpenSBI Switch mode arg1: 0x%x\n", 
> (UINTN)&OpenSbiSwitchModeContext));
> +  DEBUG ((DEBUG_INFO, "          OpenSBI Switch mode handler address: 
> 0x%x\n", (UINTN)RiscVDxeIplHandoffOpenSbiHandler));
> +  DEBUG ((DEBUG_INFO, "          OpenSBI Switch mode to privilege 0x%x\n", 
> PRV_S));
> +  sbi_init (ThisScratch);
> +}
> diff --git 
> a/RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.inf
>  
> b/RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.inf
> new file mode 100644
> index 0000000..262071d
> --- /dev/null
> +++ 
> b/RiscVPkg/Library/RiscVDxeIplHandoffOpenSbiLib/RiscVDxeIplHandoffOpenSbiLib.inf
> @@ -0,0 +1,33 @@
> +## @file
> +#  Instance of RISC-V DXE IPL to DXE core handoff platform library using 
> OpenSBI
> +#
> +#  Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights 
> reserved.<BR>
> +#
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +##
> +
> +[Defines]
> +  INF_VERSION                    = 0x0001001b
> +  BASE_NAME                      = RiscVPlatformDxeIplLib
> +  FILE_GUID                      = 906A4BB9-8DE2-4CE0-A609-23818A8FF514
> +  MODULE_TYPE                    = PEIM
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = RiscVPlatformDxeIplLib|PEIM PEI_CORE
> +
> +#
> +#  VALID_ARCHITECTURES           = RISCV64
> +#
> +
> +[Sources]
> +  RiscVDxeIplHandoffOpenSbiLib.c
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  RiscVPkg/RiscVPkg.dec
> +
> +[LibraryClasses]
> +  DebugLib
> +  RiscVCpuLib
> +  RiscVOpensbiLib
> +
> -- 
> 2.7.4
> 
> 
> 
> 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#48300): https://edk2.groups.io/g/devel/message/48300
Mute This Topic: https://groups.io/mt/34258216/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to