mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
ArmPlatformPkg/PrePi: Drop MPCore variant
The PrePi SEC driver can be built in unicore and MPcore versions from [mostly] the same source. The latter is obsolete, so remove it and simplyify the remaining code accordingly. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
parent
4fc1c513f8
commit
cee49c82d5
@ -123,7 +123,6 @@
|
||||
ArmPlatformPkg/PrePeiCore/PrePeiCoreMPCore.inf
|
||||
ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
|
||||
|
||||
ArmPlatformPkg/PrePi/PeiMPCore.inf
|
||||
ArmPlatformPkg/PrePi/PeiUniCore.inf
|
||||
|
||||
ArmPlatformPkg/Library/ArmMaliDp/ArmMaliDp.inf
|
||||
|
@ -1,104 +0,0 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2011-2014, ARM Limited. All rights reserved.
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "PrePi.h"
|
||||
|
||||
#include <Library/ArmGicLib.h>
|
||||
|
||||
#include <Ppi/ArmMpCoreInfo.h>
|
||||
|
||||
VOID
|
||||
PrimaryMain (
|
||||
IN UINTN UefiMemoryBase,
|
||||
IN UINTN StacksBase,
|
||||
IN UINT64 StartTimeStamp
|
||||
)
|
||||
{
|
||||
// Enable the GIC Distributor
|
||||
ArmGicEnableDistributor (PcdGet64 (PcdGicDistributorBase));
|
||||
|
||||
// In some cases, the secondary cores are waiting for an SGI from the next stage boot loader to resume their initialization
|
||||
if (!FixedPcdGet32 (PcdSendSgiToBringUpSecondaryCores)) {
|
||||
// Sending SGI to all the Secondary CPU interfaces
|
||||
ArmGicSendSgiTo (PcdGet64 (PcdGicDistributorBase), ARM_GIC_ICDSGIR_FILTER_EVERYONEELSE, 0x0E, PcdGet32 (PcdGicSgiIntId));
|
||||
}
|
||||
|
||||
PrePiMain (UefiMemoryBase, StacksBase, StartTimeStamp);
|
||||
|
||||
// We must never return
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
VOID
|
||||
SecondaryMain (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ARM_MP_CORE_INFO_PPI *ArmMpCoreInfoPpi;
|
||||
UINTN Index;
|
||||
UINTN ArmCoreCount;
|
||||
ARM_CORE_INFO *ArmCoreInfoTable;
|
||||
UINT32 ClusterId;
|
||||
UINT32 CoreId;
|
||||
|
||||
VOID (*SecondaryStart)(
|
||||
VOID
|
||||
);
|
||||
UINTN SecondaryEntryAddr;
|
||||
UINTN AcknowledgeInterrupt;
|
||||
UINTN InterruptId;
|
||||
|
||||
ClusterId = GET_CLUSTER_ID (MpId);
|
||||
CoreId = GET_CORE_ID (MpId);
|
||||
|
||||
// On MP Core Platform we must implement the ARM MP Core Info PPI (gArmMpCoreInfoPpiGuid)
|
||||
Status = GetPlatformPpi (&gArmMpCoreInfoPpiGuid, (VOID **)&ArmMpCoreInfoPpi);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
ArmCoreCount = 0;
|
||||
Status = ArmMpCoreInfoPpi->GetMpCoreInfo (&ArmCoreCount, &ArmCoreInfoTable);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
// Find the core in the ArmCoreTable
|
||||
for (Index = 0; Index < ArmCoreCount; Index++) {
|
||||
if ((GET_MPIDR_AFF1 (ArmCoreInfoTable[Index].Mpidr) == ClusterId) &&
|
||||
(GET_MPIDR_AFF0 (ArmCoreInfoTable[Index].Mpidr) == CoreId))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// The ARM Core Info Table must define every core
|
||||
ASSERT (Index != ArmCoreCount);
|
||||
|
||||
// Clear Secondary cores MailBox
|
||||
MmioWrite32 (ArmCoreInfoTable[Index].MailboxClearAddress, ArmCoreInfoTable[Index].MailboxClearValue);
|
||||
|
||||
do {
|
||||
ArmCallWFI ();
|
||||
|
||||
// Read the Mailbox
|
||||
SecondaryEntryAddr = MmioRead32 (ArmCoreInfoTable[Index].MailboxGetAddress);
|
||||
|
||||
// Acknowledge the interrupt and send End of Interrupt signal.
|
||||
AcknowledgeInterrupt = ArmGicAcknowledgeInterrupt (PcdGet64 (PcdGicInterruptInterfaceBase), &InterruptId);
|
||||
// Check if it is a valid interrupt ID
|
||||
if (InterruptId < ArmGicGetMaxNumInterrupts (PcdGet64 (PcdGicDistributorBase))) {
|
||||
// Got a valid SGI number hence signal End of Interrupt
|
||||
ArmGicEndOfInterrupt (PcdGet64 (PcdGicInterruptInterfaceBase), AcknowledgeInterrupt);
|
||||
}
|
||||
} while (SecondaryEntryAddr == 0);
|
||||
|
||||
// Jump to secondary core entry point.
|
||||
SecondaryStart = (VOID (*)()) SecondaryEntryAddr;
|
||||
SecondaryStart ();
|
||||
|
||||
// The secondaries shouldn't reach here
|
||||
ASSERT (FALSE);
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "PrePi.h"
|
||||
|
||||
VOID
|
||||
PrimaryMain (
|
||||
IN UINTN UefiMemoryBase,
|
||||
IN UINTN StacksBase,
|
||||
IN UINT64 StartTimeStamp
|
||||
)
|
||||
{
|
||||
PrePiMain (UefiMemoryBase, StacksBase, StartTimeStamp);
|
||||
|
||||
// We must never return
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
VOID
|
||||
SecondaryMain (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
// We must never get into this function on UniCore system
|
||||
ASSERT (FALSE);
|
||||
}
|
@ -1,106 +0,0 @@
|
||||
#/** @file
|
||||
#
|
||||
# (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
|
||||
# Copyright (c) 2011-2017, ARM Ltd. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
#**/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 1.30
|
||||
BASE_NAME = ArmPlatformPrePiMPCore
|
||||
FILE_GUID = d959e387-7b91-452c-90e0-a1dbac90ddb8
|
||||
MODULE_TYPE = SEC
|
||||
VERSION_STRING = 1.0
|
||||
|
||||
[Sources]
|
||||
PrePi.h
|
||||
PrePi.c
|
||||
MainMPCore.c
|
||||
|
||||
[Sources.ARM]
|
||||
Arm/ArchPrePi.c
|
||||
Arm/ModuleEntryPoint.S | GCC
|
||||
|
||||
[Sources.AArch64]
|
||||
AArch64/ArchPrePi.c
|
||||
AArch64/ModuleEntryPoint.S
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseLib
|
||||
CacheMaintenanceLib
|
||||
DebugLib
|
||||
DebugAgentLib
|
||||
ArmLib
|
||||
ArmGicLib
|
||||
IoLib
|
||||
TimerLib
|
||||
SerialPortLib
|
||||
ExtractGuidedSectionLib
|
||||
LzmaDecompressLib
|
||||
DebugAgentLib
|
||||
PrePiLib
|
||||
ArmPlatformLib
|
||||
ArmPlatformStackLib
|
||||
MemoryAllocationLib
|
||||
HobLib
|
||||
PrePiHobListPointerLib
|
||||
PlatformPeiLib
|
||||
MemoryInitPeiLib
|
||||
|
||||
[Ppis]
|
||||
gArmMpCoreInfoPpiGuid
|
||||
|
||||
[Guids]
|
||||
gArmMpCoreInfoGuid
|
||||
gEfiFirmwarePerformanceGuid
|
||||
|
||||
[FeaturePcd]
|
||||
gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob
|
||||
gArmPlatformTokenSpaceGuid.PcdSendSgiToBringUpSecondaryCores
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdVFPEnabled
|
||||
|
||||
gArmTokenSpaceGuid.PcdFdBaseAddress
|
||||
gArmTokenSpaceGuid.PcdFdSize
|
||||
|
||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||
gArmTokenSpaceGuid.PcdFvSize
|
||||
|
||||
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize
|
||||
gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize
|
||||
|
||||
gArmTokenSpaceGuid.PcdGicDistributorBase
|
||||
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
|
||||
gArmTokenSpaceGuid.PcdGicSgiIntId
|
||||
|
||||
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
||||
gArmTokenSpaceGuid.PcdSystemMemorySize
|
||||
gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
|
||||
|
||||
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
||||
|
||||
gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize
|
||||
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode
|
||||
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData
|
||||
|
@ -18,7 +18,6 @@
|
||||
[Sources]
|
||||
PrePi.h
|
||||
PrePi.c
|
||||
MainUniCore.c
|
||||
|
||||
[Sources.ARM]
|
||||
Arm/ArchPrePi.c
|
||||
|
@ -108,14 +108,8 @@ PrePiMain (
|
||||
Status = MemoryPeim (UefiMemoryBase, FixedPcdGet32 (PcdSystemMemoryUefiRegionSize));
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
// Create the Stacks HOB (reserve the memory for all stacks)
|
||||
if (ArmIsMpCore ()) {
|
||||
StacksSize = PcdGet32 (PcdCPUCorePrimaryStackSize) +
|
||||
((FixedPcdGet32 (PcdCoreCount) - 1) * FixedPcdGet32 (PcdCPUCoreSecondaryStackSize));
|
||||
} else {
|
||||
StacksSize = PcdGet32 (PcdCPUCorePrimaryStackSize);
|
||||
}
|
||||
|
||||
// Create the Stacks HOB
|
||||
StacksSize = PcdGet32 (PcdCPUCorePrimaryStackSize);
|
||||
BuildStackHob (StacksBase, StacksSize);
|
||||
|
||||
// TODO: Call CpuPei as a library
|
||||
@ -177,7 +171,7 @@ CEntryPoint (
|
||||
// Initialize the platform specific controllers
|
||||
ArmPlatformInitialize (MpId);
|
||||
|
||||
if (ArmPlatformIsPrimaryCore (MpId) && PerformanceMeasurementEnabled ()) {
|
||||
if (PerformanceMeasurementEnabled ()) {
|
||||
// Initialize the Timer Library to setup the Timer HW controller
|
||||
TimerConstructor ();
|
||||
// We cannot call yet the PerformanceLib because the HOB List has not been initialized
|
||||
@ -193,31 +187,12 @@ CEntryPoint (
|
||||
// Enable Instruction Caches on all cores.
|
||||
ArmEnableInstructionCache ();
|
||||
|
||||
// Define the Global Variable region when we are not running in XIP
|
||||
if (!IS_XIP ()) {
|
||||
if (ArmPlatformIsPrimaryCore (MpId)) {
|
||||
if (ArmIsMpCore ()) {
|
||||
// Signal the Global Variable Region is defined (event: ARM_CPU_EVENT_DEFAULT)
|
||||
ArmCallSEV ();
|
||||
}
|
||||
} else {
|
||||
// Wait the Primary core has defined the address of the Global Variable region (event: ARM_CPU_EVENT_DEFAULT)
|
||||
ArmCallWFE ();
|
||||
}
|
||||
}
|
||||
InvalidateDataCacheRange (
|
||||
(VOID *)UefiMemoryBase,
|
||||
FixedPcdGet32 (PcdSystemMemoryUefiRegionSize)
|
||||
);
|
||||
|
||||
// If not primary Jump to Secondary Main
|
||||
if (ArmPlatformIsPrimaryCore (MpId)) {
|
||||
InvalidateDataCacheRange (
|
||||
(VOID *)UefiMemoryBase,
|
||||
FixedPcdGet32 (PcdSystemMemoryUefiRegionSize)
|
||||
);
|
||||
|
||||
// Goto primary Main.
|
||||
PrimaryMain (UefiMemoryBase, StacksBase, StartTimeStamp);
|
||||
} else {
|
||||
SecondaryMain (MpId);
|
||||
}
|
||||
PrePiMain (UefiMemoryBase, StacksBase, StartTimeStamp);
|
||||
|
||||
// DXE Core should always load and never return
|
||||
ASSERT (FALSE);
|
||||
|
@ -29,13 +29,6 @@ TimerConstructor (
|
||||
VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
PrePiMain (
|
||||
IN UINTN UefiMemoryBase,
|
||||
IN UINTN StacksBase,
|
||||
IN UINT64 StartTimeStamp
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
MemoryPeim (
|
||||
@ -49,18 +42,6 @@ PlatformPeim (
|
||||
VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
PrimaryMain (
|
||||
IN UINTN UefiMemoryBase,
|
||||
IN UINTN StacksBase,
|
||||
IN UINT64 StartTimeStamp
|
||||
);
|
||||
|
||||
VOID
|
||||
SecondaryMain (
|
||||
IN UINTN MpId
|
||||
);
|
||||
|
||||
// Either implemented by PrePiLib or by MemoryInitPei
|
||||
VOID
|
||||
BuildMemoryTypeInformationHob (
|
||||
|
Loading…
x
Reference in New Issue
Block a user