On Mon, Sep 30, 2019 at 09:15:57PM +0100, Leif Lindholm wrote:
> 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;

Oh yes - these (unsigned long) statements need to be be replaced with
something better. Is UINTN insufficient?

In fact, there are several additional instances in Include/sbi/sbi.h.

/
    Leif

> > +  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 (#48305): https://edk2.groups.io/g/devel/message/48305
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