mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/CpuDxe: introduce two PCD value
introduce PCD value: PcdCpuMaxLogicalProcessorNumber and PcdCpuApStackSize, used for initialize APs stacks. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com> Reviewed-by: Jeff Fan <jeff.fan@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16350 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
533263ee5a
commit
6a26a597a3
|
@ -75,6 +75,10 @@
|
||||||
gIdleLoopEventGuid ## CONSUMES ## Event
|
gIdleLoopEventGuid ## CONSUMES ## Event
|
||||||
gEfiVectorHandoffTableGuid ## SOMETIMES_CONSUMES ## SystemTable
|
gEfiVectorHandoffTableGuid ## SOMETIMES_CONSUMES ## SystemTable
|
||||||
|
|
||||||
|
[Pcd]
|
||||||
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber ## CONSUMES
|
||||||
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize ## CONSUMES
|
||||||
|
|
||||||
[Depex]
|
[Depex]
|
||||||
TRUE
|
TRUE
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,14 @@
|
||||||
#include "CpuDxe.h"
|
#include "CpuDxe.h"
|
||||||
#include "CpuMp.h"
|
#include "CpuMp.h"
|
||||||
|
|
||||||
|
UINTN gMaxLogicalProcessorNumber;
|
||||||
|
UINTN gApStackSize;
|
||||||
|
|
||||||
VOID *mCommonStack = 0;
|
VOID *mCommonStack = 0;
|
||||||
VOID *mTopOfApCommonStack = 0;
|
VOID *mTopOfApCommonStack = 0;
|
||||||
|
VOID *mApStackStart = 0;
|
||||||
|
|
||||||
|
volatile UINTN mNumberOfProcessors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Application Processor C code entry point.
|
Application Processor C code entry point.
|
||||||
|
@ -29,6 +34,7 @@ ApEntryPointInC (
|
||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
mNumberOfProcessors++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,5 +47,39 @@ InitializeMpSupport (
|
||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
}
|
gMaxLogicalProcessorNumber = (UINTN) PcdGet32 (PcdCpuMaxLogicalProcessorNumber);
|
||||||
|
if (gMaxLogicalProcessorNumber < 1) {
|
||||||
|
DEBUG ((DEBUG_ERROR, "Setting PcdCpuMaxLogicalProcessorNumber should be more than zero.\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gMaxLogicalProcessorNumber == 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gApStackSize = (UINTN) PcdGet32 (PcdCpuApStackSize);
|
||||||
|
ASSERT ((gApStackSize & (SIZE_4KB - 1)) == 0);
|
||||||
|
|
||||||
|
mApStackStart = AllocatePages (EFI_SIZE_TO_PAGES (gMaxLogicalProcessorNumber * gApStackSize));
|
||||||
|
ASSERT (mApStackStart != NULL);
|
||||||
|
|
||||||
|
//
|
||||||
|
// the first buffer of stack size used for common stack, when the amount of AP
|
||||||
|
// more than 1, we should never free the common stack which maybe used for AP reset.
|
||||||
|
//
|
||||||
|
mCommonStack = mApStackStart;
|
||||||
|
mTopOfApCommonStack = (UINT8*) mApStackStart + gApStackSize;
|
||||||
|
mApStackStart = mTopOfApCommonStack;
|
||||||
|
|
||||||
|
mNumberOfProcessors = 1;
|
||||||
|
|
||||||
|
if (mNumberOfProcessors == 1) {
|
||||||
|
FreePages (mCommonStack, EFI_SIZE_TO_PAGES (gMaxLogicalProcessorNumber * gApStackSize));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mNumberOfProcessors < gMaxLogicalProcessorNumber) {
|
||||||
|
FreePages (mApStackStart, EFI_SIZE_TO_PAGES ((gMaxLogicalProcessorNumber - mNumberOfProcessors) *
|
||||||
|
gApStackSize));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -54,6 +54,13 @@
|
||||||
## Specifies delay value in microseconds after sending out an INIT IPI.
|
## Specifies delay value in microseconds after sending out an INIT IPI.
|
||||||
# @Prompt Configure delay value after send an INIT IPI
|
# @Prompt Configure delay value after send an INIT IPI
|
||||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuInitIpiDelayInMicroSeconds|10000|UINT32|0x30000002
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuInitIpiDelayInMicroSeconds|10000|UINT32|0x30000002
|
||||||
|
## Specifies max supported number of Logical Processors.
|
||||||
|
# @Prompt Configure max supported number of Logical Processorss
|
||||||
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber|64|UINT32|0x00000002
|
||||||
|
## This value specifies the Application Processor (AP) stack size, used for Mp Service, which must
|
||||||
|
## aligns the address on a 4-KByte boundary.
|
||||||
|
# @Prompt Configure stack size for Application Processor (AP)
|
||||||
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize|0x8000|UINT32|0x00000003
|
||||||
|
|
||||||
[UserExtensions.TianoCore."ExtraFiles"]
|
[UserExtensions.TianoCore."ExtraFiles"]
|
||||||
UefiCpuPkgExtra.uni
|
UefiCpuPkgExtra.uni
|
||||||
|
|
Loading…
Reference in New Issue