--
Thanks,
Chao
------------------------
DxeLoadFunc.c is almost the same as RISC-V instance. However, I don't have idea how to leverage it because DxeLoadFunc is currently in the architecture-based folder.Acked-by: Abner Chang <abner.chang@hpe.com>> -----Original Message-----> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chao Li> Sent: Wednesday, February 9, 2022 4:02 PM> To: devel@edk2.groups.io> Cc: Liming Gao <gaoliming@byosoft.com.cn>; Guomin Jiang> <guomin.jiang@intel.com>; Baoqi Zhang <zhangbaoqi@loongson.cn>> Subject: [edk2-devel] [staging/LoongArch RESEND PATCH v1 30/33]> MdeModulePkg/DxeIplPeim : LoongArch DxeIPL implementation.>> Implement LoongArch DxeIPL instance.>> Cc: Liming Gao <gaoliming@byosoft.com.cn>> Cc: Guomin Jiang <guomin.jiang@intel.com>>> Signed-off-by: Chao Li <lichao@loongson.cn>> Co-authored-by: Baoqi Zhang <zhangbaoqi@loongson.cn>> ---> MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 6 +-> .../Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c | 61> +++++++++++++++++++> 2 files changed, 66 insertions(+), 1 deletion(-)> create mode 100644> MdeModulePkg/Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c>> diff --git a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf> b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf> index 19b8a4c8ae..052ea0ec1a 100644> --- a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf> +++ b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf> @@ -8,6 +8,7 @@> # Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>> # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>> # Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights> reserved.<BR>> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights> reserved.<BR>> #> # SPDX-License-Identifier: BSD-2-Clause-Patent> #> @@ -26,7 +27,7 @@> #> # The following information is for reference only and not required by the> build tools.> #> -# VALID_ARCHITECTURES = IA32 X64 EBC (EBC is for build only)> AARCH64 RISCV64> +# VALID_ARCHITECTURES = IA32 X64 EBC (EBC is for build only)> AARCH64 RISCV64 LOONGARCH64> #>> [Sources]> @@ -53,6 +54,9 @@> [Sources.RISCV64]> RiscV64/DxeLoadFunc.c>> +[Sources.LOONGARCH64]> + LoongArch64/DxeLoadFunc.c> +> [Packages]> MdePkg/MdePkg.dec> MdeModulePkg/MdeModulePkg.dec> diff --git a/MdeModulePkg/Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c> b/MdeModulePkg/Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c> new file mode 100644> index 0000000000..27ffc072d0> --- /dev/null> +++ b/MdeModulePkg/Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c> @@ -0,0 +1,61 @@> +/** @file> + LoongArch specifc functionality for DxeLoad.> +> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights> reserved.<BR>> +> + SPDX-License-Identifier: BSD-2-Clause-Patent> +> +**/> +> +#include "DxeIpl.h"> +> +/**> + Transfers control to DxeCore.> +> + 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 DxeCoreEntryPoint The entry point of DxeCore.> + @param HobList The start of HobList passed to DxeCore.> +> +**/> +VOID> +HandOffToDxeCore (> + IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint,> + IN EFI_PEI_HOB_POINTERS HobList> + )> +{> + VOID *BaseOfStack;> + VOID *TopOfStack;> + EFI_STATUS Status;> +> + //> + // Allocate 128KB for the Stack> + //> + BaseOfStack = AllocatePages (EFI_SIZE_TO_PAGES (STACK_SIZE));> + ASSERT (BaseOfStack != NULL);> + //> + // Compute the top of the stack we were allocated. Pre-allocate a UINTN> + // for safety.> + //> + TopOfStack = (VOID *) ((UINTN) BaseOfStack + EFI_SIZE_TO_PAGES> (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT);> + TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);> + //> + // End of PEI phase singal> + //> + Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);> + ASSERT_EFI_ERROR (Status);> +> + //> + // Update the contents of BSP stack HOB to reflect the real stack info> passed to DxeCore.> + //> + UpdateStackHob ((EFI_PHYSICAL_ADDRESS)(UINTN) BaseOfStack,> STACK_SIZE);> +> + SwitchStack (> + (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,> + HobList.Raw,> + NULL,> + TopOfStack> + );> +}> --> 2.27.0>>>>>