Skip to content

Commit

Permalink
UefiCpuPkg/CpuMpPei: Add LoongArch64 support
Browse files Browse the repository at this point in the history
Added LoongArch64 CPU multiple processor PPI support.

Cc: Ray Ni <[email protected]>
Cc: Jiaxin Wu <[email protected]>
Cc: Zhiguang Liu <[email protected]>
Cc: Dun Tan <[email protected]>
Cc: Rahul Kumar <[email protected]>
Cc: Gerd Hoffmann <[email protected]>
Signed-off-by: Chao Li <[email protected]>
  • Loading branch information
kilaterlee authored and mergify[bot] committed Jan 22, 2025
1 parent 7bc51fc commit 336e7e0
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 3 deletions.
13 changes: 10 additions & 3 deletions UefiCpuPkg/CpuMpPei/CpuMpPei.inf
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,22 @@
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64
# VALID_ARCHITECTURES = IA32 X64 LOONGARCH64
#

[Sources]
CpuMpPei.h
CpuMp.c
CpuMp2.c

[Sources.Ia32, Sources.X64]
CpuBist.c
CpuPaging.c
CpuMpPei.c

[Sources.LoongArch64]
LoongArch64/CpuMpPei.c

[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Expand All @@ -39,16 +44,18 @@
BaseLib
DebugLib
HobLib
LocalApicLib
PeimEntryPoint
PeiServicesLib
ReportStatusCodeLib
CpuExceptionHandlerLib
MpInitLib
BaseMemoryLib
CpuLib
MemoryAllocationLib

[LibraryClasses.Ia32, LibraryClasses.X64]
CpuExceptionHandlerLib
CpuPageTableLib
LocalApicLib

[Guids]
gEdkiiMigratedFvInfoGuid ## SOMETIMES_CONSUMES ## HOB
Expand Down
80 changes: 80 additions & 0 deletions UefiCpuPkg/CpuMpPei/LoongArch64/CpuMpPei.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/** @file
CPU PEI Module installs CPU Multiple Processor PPI.
Copyright (c) 2015 - 2022, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2025, Loongson Technology Corporation Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#include "CpuMpPei.h"

EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiList[] = {
{
EFI_PEI_PPI_DESCRIPTOR_PPI,
&gEdkiiPeiMpServices2PpiGuid,
&mMpServices2Ppi
},
{
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
&gEfiPeiMpServicesPpiGuid,
&mMpServicesPpi
}
};

/**
Initializes MP and exceptions handlers.
@param PeiServices The pointer to the PEI Services Table.
@retval EFI_SUCCESS MP was successfully initialized.
@retval others Error occurred in MP initialization.
**/
EFI_STATUS
InitializeCpuMpWorker (
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;

Status = MpInitLibInitialize ();
if (EFI_ERROR (Status)) {
return Status;
}

//
// Install CPU MP PPI
//
Status = PeiServicesInstallPpi (mPeiCpuMpPpiList);
ASSERT_EFI_ERROR (Status);

return Status;
}

/**
The Entry point of the MP CPU PEIM.
This function will wakeup APs and collect CPU AP count and install the
Mp Service Ppi.
@param FileHandle Handle of the file being invoked.
@param PeiServices Describes the list of possible PEI Services.
@retval EFI_SUCCESS MpServicePpi is installed successfully.
**/
EFI_STATUS
EFIAPI
CpuMpPeimInit (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;

Status = InitializeCpuMpWorker ((CONST EFI_PEI_SERVICES **)PeiServices);
ASSERT_EFI_ERROR (Status);

return Status;
}

0 comments on commit 336e7e0

Please sign in to comment.