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 <[email protected]>
> ---
> .../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: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-