回复: [PATCH v2 32/34] MdeModulePkg/DxeIplPeim : LoongArch DxeIPL implementation.


gaoliming
 

Reviewed-by: Liming Gao <gaoliming@...>

 

发件人: chao li <lichao@...>
发送时间: 2022923 15:24
收件人: Liming Gao <gaoliming@...>; Guomin Jiang <guomin.jiang@...>; Baoqi Zhang <zhangbaoqi@...>
抄送: devel@edk2.groups.io
主题: Re: [PATCH v2 32/34] MdeModulePkg/DxeIplPeim : LoongArch DxeIPL implementation.

 

Hi Liming and Guomin,

This patch has not been reviewed, would you please review it?

 


Thanks,
Chao
--------

On 9 14 2022, at 5:42 下午, Chao Li <lichao@...> wrote:

 

Implement LoongArch DxeIPL instance.

 

Cc: Liming Gao <gaoliming@...>

Cc: Guomin Jiang <guomin.jiang@...>

 

Signed-off-by: Chao Li <lichao@...>

Co-authored-by: Baoqi Zhang <zhangbaoqi@...>

---

MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 6 +-

.../Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c | 63 +++++++++++++++++++

2 files changed, 68 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..95d3af19ea

--- /dev/null

+++ b/MdeModulePkg/Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c

@@ -0,0 +1,63 @@

+/** @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[in] DxeCoreEntryPoint The entry point of DxeCore.

 

+ @param[in] 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 signal

 

+ //

 

+ 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

Join devel@edk2.groups.io to automatically receive all group messages.