ArmPlatformGetPrimaryCoreMpId returns the MPID of the primary core. The primary core might not be known at build time (eg: the platform allows the boot CPU to be changed through board config). This function is used during the secondary core stack initialization to know the position of the secondary core in the SoC. A secondary core that is at the position N, with N greater than the primary core position, will be at the position N-1 in the list of secondary stacks (the primary core has its own separate bigger stack). Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> Acked-by: Ryan Harkin <ryan.harkin@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14345 6f19259b-4bc3-4df7-8a09-765794883524
68 lines
1.7 KiB
NASM
68 lines
1.7 KiB
NASM
//
|
|
// Copyright (c) 2012, ARM Limited. All rights reserved.
|
|
//
|
|
// This program and the accompanying materials
|
|
// are licensed and made available under the terms and conditions of the BSD License
|
|
// which accompanies this distribution. The full text of the license may be found at
|
|
// http://opensource.org/licenses/bsd-license.php
|
|
//
|
|
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
//
|
|
//
|
|
|
|
#include <AsmMacroIoLib.h>
|
|
#include <Library/ArmLib.h>
|
|
|
|
INCLUDE AsmMacroIoLib.inc
|
|
|
|
EXPORT ArmPlatformGetCorePosition
|
|
EXPORT ArmPlatformGetPrimaryCoreMpId
|
|
EXPORT ArmPlatformIsPrimaryCore
|
|
|
|
IMPORT _gPcd_FixedAtBuild_PcdArmPrimaryCore
|
|
IMPORT _gPcd_FixedAtBuild_PcdArmPrimaryCoreMask
|
|
|
|
PRESERVE8
|
|
AREA ArmPlatformNullHelper, CODE, READONLY
|
|
|
|
//UINTN
|
|
//ArmPlatformGetCorePosition (
|
|
// IN UINTN MpId
|
|
// );
|
|
ArmPlatformGetCorePosition FUNCTION
|
|
and r1, r0, #ARM_CORE_MASK
|
|
and r0, r0, #ARM_CLUSTER_MASK
|
|
add r0, r1, r0, LSR #7
|
|
bx lr
|
|
ENDFUNC
|
|
|
|
//UINTN
|
|
//ArmPlatformGetPrimaryCoreMpId (
|
|
// VOID
|
|
// );
|
|
ArmPlatformGetPrimaryCoreMpId FUNCTION
|
|
LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)
|
|
ldr r0, [r0]
|
|
bx lr
|
|
ENDFUNC
|
|
|
|
//UINTN
|
|
//ArmPlatformIsPrimaryCore (
|
|
// IN UINTN MpId
|
|
// );
|
|
ArmPlatformIsPrimaryCore FUNCTION
|
|
LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)
|
|
ldr r1, [r1]
|
|
and r0, r0, r1
|
|
LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)
|
|
ldr r1, [r1]
|
|
cmp r0, r1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
bx lr
|
|
ENDFUNC
|
|
|
|
END
|
|
|