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.ch...@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 <gaolim...@byosoft.com.cn>; Guomin Jiang > <guomin.ji...@intel.com>; Baoqi Zhang <zhangba...@loongson.cn> > Subject: [edk2-devel] [staging/LoongArch RESEND PATCH v1 30/33] > MdeModulePkg/DxeIplPeim : LoongArch DxeIPL implementation. > > Implement LoongArch DxeIPL instance. > > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Guomin Jiang <guomin.ji...@intel.com> > > Signed-off-by: Chao Li <lic...@loongson.cn> > Co-authored-by: Baoqi Zhang <zhangba...@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 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#88620): https://edk2.groups.io/g/devel/message/88620 Mute This Topic: https://groups.io/mt/89017516/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-