mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 08:34:07 +02:00
ArmVirtPkg: remove ArmPlatformLib implementations
These libraries are no longer used, so remove them from the tree. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
39da48614a
commit
3d544c564b
@ -48,7 +48,6 @@
|
|||||||
QemuFwCfgLib|ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
|
QemuFwCfgLib|ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
|
||||||
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf
|
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf
|
||||||
|
|
||||||
ArmPlatformLib|ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/ArmQemuRelocatablePlatformLib.inf
|
|
||||||
ArmVirtMemInfoLib|ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf
|
ArmVirtMemInfoLib|ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf
|
||||||
|
|
||||||
TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
|
TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
|
VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
|
||||||
VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf
|
VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf
|
||||||
|
|
||||||
ArmPlatformLib|ArmVirtPkg/Library/ArmXenRelocatablePlatformLib/ArmXenRelocatablePlatformLib.inf
|
|
||||||
ArmVirtMemInfoLib|ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf
|
ArmVirtMemInfoLib|ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf
|
||||||
|
|
||||||
TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
|
TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
|
||||||
|
@ -1,141 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2016, Linaro 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 <AsmMacroIoLibV8.h>
|
|
||||||
#include <Library/ArmLib.h>
|
|
||||||
|
|
||||||
// VOID
|
|
||||||
// ArmPlatformPeiBootAction (
|
|
||||||
// VOID *DeviceTreeBaseAddress, // passed by loader in x0
|
|
||||||
// VOID *ImageBase // passed by FDF trampoline in x1
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformPeiBootAction)
|
|
||||||
//
|
|
||||||
// If we are booting from RAM using the Linux kernel boot protocol, x0 will
|
|
||||||
// point to the DTB image in memory. Otherwise, use the default value defined
|
|
||||||
// by the platform.
|
|
||||||
//
|
|
||||||
cbnz x0, 0f
|
|
||||||
ldr x0, PcdGet64 (PcdDeviceTreeInitialBaseAddress)
|
|
||||||
|
|
||||||
0:mov x29, x30 // preserve LR
|
|
||||||
mov x28, x0 // preserve DTB pointer
|
|
||||||
mov x27, x1 // preserve base of image pointer
|
|
||||||
|
|
||||||
//
|
|
||||||
// The base of the runtime image has been preserved in x1. Check whether
|
|
||||||
// the expected magic number can be found in the header.
|
|
||||||
//
|
|
||||||
ldr w8, .LArm64LinuxMagic
|
|
||||||
ldr w9, [x1, #0x38]
|
|
||||||
cmp w8, w9
|
|
||||||
bne .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// OK, so far so good. We have confirmed that we likely have a DTB and are
|
|
||||||
// booting via the arm64 Linux boot protocol. Update the base-of-image PCD
|
|
||||||
// to the actual relocated value, and add the shift of PcdFdBaseAddress to
|
|
||||||
// PcdFvBaseAddress as well
|
|
||||||
//
|
|
||||||
adr x8, PcdGet64 (PcdFdBaseAddress)
|
|
||||||
adr x9, PcdGet64 (PcdFvBaseAddress)
|
|
||||||
ldr x6, [x8]
|
|
||||||
ldr x7, [x9]
|
|
||||||
sub x7, x7, x6
|
|
||||||
add x7, x7, x1
|
|
||||||
str x1, [x8]
|
|
||||||
str x7, [x9]
|
|
||||||
|
|
||||||
//
|
|
||||||
// Discover the memory size and offset from the DTB, and record in the
|
|
||||||
// respective PCDs. This will also return false if a corrupt DTB is
|
|
||||||
// encountered. Since we are calling a C function, use the window at the
|
|
||||||
// beginning of the FD image as a temp stack.
|
|
||||||
//
|
|
||||||
adr x1, PcdGet64 (PcdSystemMemoryBase)
|
|
||||||
adr x2, PcdGet64 (PcdSystemMemorySize)
|
|
||||||
mov sp, x7
|
|
||||||
bl FindMemnode
|
|
||||||
cbz x0, .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the DTB to the slack space right after the 64 byte arm64/Linux style
|
|
||||||
// image header at the base of this image (defined in the FDF), and record the
|
|
||||||
// pointer in PcdDeviceTreeInitialBaseAddress.
|
|
||||||
//
|
|
||||||
adr x8, PcdGet64 (PcdDeviceTreeInitialBaseAddress)
|
|
||||||
add x27, x27, #0x40
|
|
||||||
str x27, [x8]
|
|
||||||
|
|
||||||
mov x0, x27
|
|
||||||
mov x1, x28
|
|
||||||
bl CopyFdt
|
|
||||||
|
|
||||||
.Lout:
|
|
||||||
ret x29
|
|
||||||
|
|
||||||
.LArm64LinuxMagic:
|
|
||||||
.byte 0x41, 0x52, 0x4d, 0x64
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetPrimaryCoreMpId (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
|
|
||||||
MOV32 (w0, FixedPcdGet32 (PcdArmPrimaryCore))
|
|
||||||
ret
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformIsPrimaryCore (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformIsPrimaryCore)
|
|
||||||
mov x0, #1
|
|
||||||
ret
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetCorePosition (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
// With this function: CorePos = (ClusterId * 4) + CoreId
|
|
||||||
ASM_FUNC(ArmPlatformGetCorePosition)
|
|
||||||
and x1, x0, #ARM_CORE_MASK
|
|
||||||
and x0, x0, #ARM_CLUSTER_MASK
|
|
||||||
add x0, x1, x0, LSR #6
|
|
||||||
ret
|
|
||||||
|
|
||||||
//EFI_PHYSICAL_ADDRESS
|
|
||||||
//GetPhysAddrTop (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmGetPhysAddrTop)
|
|
||||||
mrs x0, id_aa64mmfr0_el1
|
|
||||||
adr x1, .LPARanges
|
|
||||||
and x0, x0, #7
|
|
||||||
ldrb w1, [x1, x0]
|
|
||||||
mov x0, #1
|
|
||||||
lsl x0, x0, x1
|
|
||||||
ret
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the
|
|
||||||
// physical address space support on this CPU:
|
|
||||||
// 0 == 32 bits, 1 == 36 bits, etc etc
|
|
||||||
// 6 and 7 are reserved
|
|
||||||
//
|
|
||||||
.LPARanges:
|
|
||||||
.byte 32, 36, 40, 42, 44, 48, -1, -1
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
@ -1,123 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2014-2016, Linaro 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>
|
|
||||||
|
|
||||||
ASM_FUNC(ArmPlatformPeiBootAction)
|
|
||||||
//
|
|
||||||
// If we are booting from RAM using the Linux kernel boot protocol, r0 will
|
|
||||||
// point to the DTB image in memory. Otherwise, use the default value defined
|
|
||||||
// by the platform.
|
|
||||||
//
|
|
||||||
teq r0, #0
|
|
||||||
bne 0f
|
|
||||||
LDRL (r0, PcdGet64 (PcdDeviceTreeInitialBaseAddress))
|
|
||||||
|
|
||||||
0:mov r11, r14 // preserve LR
|
|
||||||
mov r10, r0 // preserve DTB pointer
|
|
||||||
mov r9, r1 // preserve base of image pointer
|
|
||||||
|
|
||||||
//
|
|
||||||
// The base of the runtime image has been preserved in r1. Check whether
|
|
||||||
// the expected magic number can be found in the header.
|
|
||||||
//
|
|
||||||
ldr r8, .LArm32LinuxMagic
|
|
||||||
ldr r7, [r1, #0x24]
|
|
||||||
cmp r7, r8
|
|
||||||
bne .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// OK, so far so good. We have confirmed that we likely have a DTB and are
|
|
||||||
// booting via the ARM Linux boot protocol. Update the base-of-image PCD
|
|
||||||
// to the actual relocated value, and add the shift of PcdFdBaseAddress to
|
|
||||||
// PcdFvBaseAddress as well
|
|
||||||
//
|
|
||||||
ADRL (r8, PcdGet64 (PcdFdBaseAddress))
|
|
||||||
ADRL (r7, PcdGet64 (PcdFvBaseAddress))
|
|
||||||
ldr r6, [r8]
|
|
||||||
ldr r5, [r7]
|
|
||||||
sub r5, r5, r6
|
|
||||||
add r5, r5, r1
|
|
||||||
str r1, [r8]
|
|
||||||
str r5, [r7]
|
|
||||||
|
|
||||||
//
|
|
||||||
// Discover the memory size and offset from the DTB, and record in the
|
|
||||||
// respective PCDs. This will also return false if a corrupt DTB is
|
|
||||||
// encountered. Since we are calling a C function, use the window at the
|
|
||||||
// beginning of the FD image as a temp stack.
|
|
||||||
//
|
|
||||||
ADRL (r1, PcdGet64 (PcdSystemMemoryBase))
|
|
||||||
ADRL (r2, PcdGet64 (PcdSystemMemorySize))
|
|
||||||
mov sp, r5
|
|
||||||
bl FindMemnode
|
|
||||||
teq r0, #0
|
|
||||||
beq .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the DTB to the slack space right after the 64 byte arm64/Linux style
|
|
||||||
// image header at the base of this image (defined in the FDF), and record the
|
|
||||||
// pointer in PcdDeviceTreeInitialBaseAddress.
|
|
||||||
//
|
|
||||||
ADRL (r8, PcdGet64 (PcdDeviceTreeInitialBaseAddress))
|
|
||||||
add r9, r9, #0x40
|
|
||||||
str r9, [r8]
|
|
||||||
|
|
||||||
mov r0, r9
|
|
||||||
mov r1, r10
|
|
||||||
bl CopyFdt
|
|
||||||
|
|
||||||
.Lout:
|
|
||||||
bx r11
|
|
||||||
|
|
||||||
.LArm32LinuxMagic:
|
|
||||||
.byte 0x18, 0x28, 0x6f, 0x01
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetPrimaryCoreMpId (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
|
|
||||||
MOV32 (r0, FixedPcdGet32 (PcdArmPrimaryCore))
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformIsPrimaryCore (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformIsPrimaryCore)
|
|
||||||
mov r0, #1
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetCorePosition (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
// With this function: CorePos = (ClusterId * 4) + CoreId
|
|
||||||
ASM_FUNC(ArmPlatformGetCorePosition)
|
|
||||||
and r1, r0, #ARM_CORE_MASK
|
|
||||||
and r0, r0, #ARM_CLUSTER_MASK
|
|
||||||
add r0, r1, r0, LSR #6
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//EFI_PHYSICAL_ADDRESS
|
|
||||||
//GetPhysAddrTop (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmGetPhysAddrTop)
|
|
||||||
mov r0, #0x00000000
|
|
||||||
mov r1, #0x10000
|
|
||||||
bx lr
|
|
@ -1,64 +0,0 @@
|
|||||||
#/* @file
|
|
||||||
# Copyright (c) 2011-2015, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2014, Linaro 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.
|
|
||||||
#
|
|
||||||
#*/
|
|
||||||
|
|
||||||
[Defines]
|
|
||||||
INF_VERSION = 0x00010005
|
|
||||||
BASE_NAME = ArmXenRelocatablePlatformLib
|
|
||||||
FILE_GUID = c8602718-4faa-4119-90ca-cae72509ac4c
|
|
||||||
MODULE_TYPE = BASE
|
|
||||||
VERSION_STRING = 1.0
|
|
||||||
LIBRARY_CLASS = ArmPlatformLib|SEC PEIM
|
|
||||||
|
|
||||||
[Packages]
|
|
||||||
MdePkg/MdePkg.dec
|
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
|
||||||
EmbeddedPkg/EmbeddedPkg.dec
|
|
||||||
ArmPkg/ArmPkg.dec
|
|
||||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
|
||||||
ArmVirtPkg/ArmVirtPkg.dec
|
|
||||||
|
|
||||||
[LibraryClasses]
|
|
||||||
IoLib
|
|
||||||
ArmLib
|
|
||||||
PrintLib
|
|
||||||
FdtLib
|
|
||||||
|
|
||||||
[Sources.common]
|
|
||||||
RelocatableVirt.c
|
|
||||||
QemuVirtMem.c
|
|
||||||
FdtParser.c
|
|
||||||
|
|
||||||
[Sources.AARCH64]
|
|
||||||
AARCH64/RelocatableVirtHelper.S
|
|
||||||
|
|
||||||
[Sources.ARM]
|
|
||||||
ARM/RelocatableVirtHelper.S
|
|
||||||
|
|
||||||
[FeaturePcd]
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec
|
|
||||||
|
|
||||||
[PatchPcd]
|
|
||||||
gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress
|
|
||||||
gArmTokenSpaceGuid.PcdFdBaseAddress
|
|
||||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemorySize
|
|
||||||
|
|
||||||
[FixedPcd]
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
||||||
gArmTokenSpaceGuid.PcdFdSize
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
|
|
@ -1,90 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, Linaro Ltd. 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 <Uefi.h>
|
|
||||||
#include <Include/libfdt.h>
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
FindMemnode (
|
|
||||||
IN VOID *DeviceTreeBlob,
|
|
||||||
OUT UINT64 *SystemMemoryBase,
|
|
||||||
OUT UINT64 *SystemMemorySize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
INT32 MemoryNode;
|
|
||||||
INT32 AddressCells;
|
|
||||||
INT32 SizeCells;
|
|
||||||
INT32 Length;
|
|
||||||
CONST INT32 *Prop;
|
|
||||||
|
|
||||||
if (fdt_check_header (DeviceTreeBlob) != 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Look for a node called "memory" at the lowest level of the tree
|
|
||||||
//
|
|
||||||
MemoryNode = fdt_path_offset (DeviceTreeBlob, "/memory");
|
|
||||||
if (MemoryNode <= 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Retrieve the #address-cells and #size-cells properties
|
|
||||||
// from the root node, or use the default if not provided.
|
|
||||||
//
|
|
||||||
AddressCells = 1;
|
|
||||||
SizeCells = 1;
|
|
||||||
|
|
||||||
Prop = fdt_getprop (DeviceTreeBlob, 0, "#address-cells", &Length);
|
|
||||||
if (Length == 4) {
|
|
||||||
AddressCells = fdt32_to_cpu (*Prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
Prop = fdt_getprop (DeviceTreeBlob, 0, "#size-cells", &Length);
|
|
||||||
if (Length == 4) {
|
|
||||||
SizeCells = fdt32_to_cpu (*Prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Now find the 'reg' property of the /memory node, and read the first
|
|
||||||
// range listed.
|
|
||||||
//
|
|
||||||
Prop = fdt_getprop (DeviceTreeBlob, MemoryNode, "reg", &Length);
|
|
||||||
|
|
||||||
if (Length < (AddressCells + SizeCells) * sizeof (INT32)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
*SystemMemoryBase = fdt32_to_cpu (Prop[0]);
|
|
||||||
if (AddressCells > 1) {
|
|
||||||
*SystemMemoryBase = (*SystemMemoryBase << 32) | fdt32_to_cpu (Prop[1]);
|
|
||||||
}
|
|
||||||
Prop += AddressCells;
|
|
||||||
|
|
||||||
*SystemMemorySize = fdt32_to_cpu (Prop[0]);
|
|
||||||
if (SizeCells > 1) {
|
|
||||||
*SystemMemorySize = (*SystemMemorySize << 32) | fdt32_to_cpu (Prop[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
CopyFdt (
|
|
||||||
IN VOID *FdtDest,
|
|
||||||
IN VOID *FdtSource
|
|
||||||
)
|
|
||||||
{
|
|
||||||
fdt_pack(FdtSource);
|
|
||||||
CopyMem (FdtDest, FdtSource, fdt_totalsize (FdtSource));
|
|
||||||
}
|
|
@ -1,106 +0,0 @@
|
|||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014, Linaro 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 <Library/ArmPlatformLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
|
||||||
#include <Library/PcdLib.h>
|
|
||||||
#include <Library/IoLib.h>
|
|
||||||
#include <Library/MemoryAllocationLib.h>
|
|
||||||
|
|
||||||
// Number of Virtual Memory Map Descriptors
|
|
||||||
#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 5
|
|
||||||
|
|
||||||
// DDR attributes
|
|
||||||
#define DDR_ATTRIBUTES_CACHED ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
|
|
||||||
#define DDR_ATTRIBUTES_UNCACHED ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED
|
|
||||||
|
|
||||||
EFI_PHYSICAL_ADDRESS
|
|
||||||
ArmGetPhysAddrTop (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the Virtual Memory Map of your platform
|
|
||||||
|
|
||||||
This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU
|
|
||||||
on your platform.
|
|
||||||
|
|
||||||
@param[out] VirtualMemoryMap Array of ARM_MEMORY_REGION_DESCRIPTOR
|
|
||||||
describing a Physical-to-Virtual Memory
|
|
||||||
mapping. This array must be ended by a
|
|
||||||
zero-filled entry
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
ArmPlatformGetVirtualMemoryMap (
|
|
||||||
IN ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable;
|
|
||||||
|
|
||||||
ASSERT (VirtualMemoryMap != NULL);
|
|
||||||
|
|
||||||
VirtualMemoryTable = AllocatePages (
|
|
||||||
EFI_SIZE_TO_PAGES (
|
|
||||||
sizeof (ARM_MEMORY_REGION_DESCRIPTOR)
|
|
||||||
* MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (VirtualMemoryTable == NULL) {
|
|
||||||
DEBUG ((EFI_D_ERROR, "%a: Error: Failed AllocatePages()\n", __FUNCTION__));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// System DRAM
|
|
||||||
VirtualMemoryTable[0].PhysicalBase = PcdGet64 (PcdSystemMemoryBase);
|
|
||||||
VirtualMemoryTable[0].VirtualBase = VirtualMemoryTable[0].PhysicalBase;
|
|
||||||
VirtualMemoryTable[0].Length = PcdGet64 (PcdSystemMemorySize);
|
|
||||||
VirtualMemoryTable[0].Attributes = DDR_ATTRIBUTES_CACHED;
|
|
||||||
|
|
||||||
DEBUG ((EFI_D_INFO, "%a: Dumping System DRAM Memory Map:\n"
|
|
||||||
"\tPhysicalBase: 0x%lX\n"
|
|
||||||
"\tVirtualBase: 0x%lX\n"
|
|
||||||
"\tLength: 0x%lX\n",
|
|
||||||
__FUNCTION__,
|
|
||||||
VirtualMemoryTable[0].PhysicalBase,
|
|
||||||
VirtualMemoryTable[0].VirtualBase,
|
|
||||||
VirtualMemoryTable[0].Length));
|
|
||||||
|
|
||||||
// Peripheral space before DRAM
|
|
||||||
VirtualMemoryTable[1].PhysicalBase = 0x0;
|
|
||||||
VirtualMemoryTable[1].VirtualBase = 0x0;
|
|
||||||
VirtualMemoryTable[1].Length = VirtualMemoryTable[0].PhysicalBase;
|
|
||||||
VirtualMemoryTable[1].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
|
|
||||||
|
|
||||||
// Peripheral space after DRAM
|
|
||||||
VirtualMemoryTable[2].PhysicalBase = VirtualMemoryTable[0].Length + VirtualMemoryTable[1].Length;
|
|
||||||
VirtualMemoryTable[2].VirtualBase = VirtualMemoryTable[2].PhysicalBase;
|
|
||||||
VirtualMemoryTable[2].Length = MIN (1ULL << FixedPcdGet8 (PcdPrePiCpuMemorySize),
|
|
||||||
ArmGetPhysAddrTop ()) -
|
|
||||||
VirtualMemoryTable[2].PhysicalBase;
|
|
||||||
VirtualMemoryTable[2].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
|
|
||||||
|
|
||||||
// Remap the FD region as normal executable memory
|
|
||||||
VirtualMemoryTable[3].PhysicalBase = PcdGet64 (PcdFdBaseAddress);
|
|
||||||
VirtualMemoryTable[3].VirtualBase = VirtualMemoryTable[3].PhysicalBase;
|
|
||||||
VirtualMemoryTable[3].Length = FixedPcdGet32 (PcdFdSize);
|
|
||||||
VirtualMemoryTable[3].Attributes = DDR_ATTRIBUTES_CACHED;
|
|
||||||
|
|
||||||
// End of Table
|
|
||||||
ZeroMem (&VirtualMemoryTable[4], sizeof (ARM_MEMORY_REGION_DESCRIPTOR));
|
|
||||||
|
|
||||||
*VirtualMemoryMap = VirtualMemoryTable;
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
* Copyright (c) 2014, Linaro Limited. All rights reserved.
|
|
||||||
* Copyright (c) 2014, Red Hat, Inc.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 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 <Library/IoLib.h>
|
|
||||||
#include <Library/ArmPlatformLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Pi/PiBootMode.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the current Boot Mode
|
|
||||||
|
|
||||||
This function returns the boot reason on the platform
|
|
||||||
|
|
||||||
@return Return the current Boot Mode of the platform
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_BOOT_MODE
|
|
||||||
ArmPlatformGetBootMode (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return BOOT_WITH_FULL_CONFIGURATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
This function is called by PrePeiCore, in the SEC phase.
|
|
||||||
**/
|
|
||||||
RETURN_STATUS
|
|
||||||
ArmPlatformInitialize (
|
|
||||||
IN UINTN MpId
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// We are relying on ArmPlatformInitializeSystemMemory () being called from
|
|
||||||
// InitializeMemory (), which only occurs if the following feature is disabled
|
|
||||||
//
|
|
||||||
ASSERT (!FeaturePcdGet (PcdSystemMemoryInitializeInSec));
|
|
||||||
return RETURN_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ArmPlatformInitializeSystemMemory (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ArmPlatformGetPlatformPpiList (
|
|
||||||
OUT UINTN *PpiListSize,
|
|
||||||
OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
|
|
||||||
)
|
|
||||||
{
|
|
||||||
*PpiListSize = 0;
|
|
||||||
*PpiList = NULL;
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2016, Linaro 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 <AsmMacroIoLibV8.h>
|
|
||||||
#include <Library/ArmLib.h>
|
|
||||||
|
|
||||||
ASM_FUNC(ArmPlatformPeiBootAction)
|
|
||||||
ret
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetPrimaryCoreMpId (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
|
|
||||||
MOV32 (w0, FixedPcdGet32 (PcdArmPrimaryCore))
|
|
||||||
ret
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformIsPrimaryCore (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformIsPrimaryCore)
|
|
||||||
mov x0, #1
|
|
||||||
ret
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetCorePosition (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
// With this function: CorePos = (ClusterId * 4) + CoreId
|
|
||||||
ASM_FUNC(ArmPlatformGetCorePosition)
|
|
||||||
and x1, x0, #ARM_CORE_MASK
|
|
||||||
and x0, x0, #ARM_CLUSTER_MASK
|
|
||||||
add x0, x1, x0, LSR #6
|
|
||||||
ret
|
|
||||||
|
|
||||||
//EFI_PHYSICAL_ADDRESS
|
|
||||||
//GetPhysAddrTop (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmGetPhysAddrTop)
|
|
||||||
mrs x0, id_aa64mmfr0_el1
|
|
||||||
adr x1, .LPARanges
|
|
||||||
and x0, x0, #7
|
|
||||||
ldrb w1, [x1, x0]
|
|
||||||
mov x0, #1
|
|
||||||
lsl x0, x0, x1
|
|
||||||
ret
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the
|
|
||||||
// physical address space support on this CPU:
|
|
||||||
// 0 == 32 bits, 1 == 36 bits, etc etc
|
|
||||||
// 6 and 7 are reserved
|
|
||||||
//
|
|
||||||
.LPARanges:
|
|
||||||
.byte 32, 36, 40, 42, 44, 48, -1, -1
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
@ -1,57 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2014-2016, Linaro 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>
|
|
||||||
|
|
||||||
ASM_FUNC(ArmPlatformPeiBootAction)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetPrimaryCoreMpId (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
|
|
||||||
MOV32 (r0, FixedPcdGet32 (PcdArmPrimaryCore))
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformIsPrimaryCore (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformIsPrimaryCore)
|
|
||||||
mov r0, #1
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetCorePosition (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
// With this function: CorePos = (ClusterId * 4) + CoreId
|
|
||||||
ASM_FUNC(ArmPlatformGetCorePosition)
|
|
||||||
and r1, r0, #ARM_CORE_MASK
|
|
||||||
and r0, r0, #ARM_CLUSTER_MASK
|
|
||||||
add r0, r1, r0, LSR #6
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//EFI_PHYSICAL_ADDRESS
|
|
||||||
//GetPhysAddrTop (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmGetPhysAddrTop)
|
|
||||||
mov r0, #0x00000000
|
|
||||||
mov r1, #0x10000
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
@ -1,71 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2014, ARM Limited. All rights reserved.
|
|
||||||
// Copyright (c) 2014, Linaro 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 <Library/ArmLib.h>
|
|
||||||
#include <AutoGen.h>
|
|
||||||
|
|
||||||
INCLUDE AsmMacroIoLib.inc
|
|
||||||
|
|
||||||
EXPORT ArmPlatformPeiBootAction
|
|
||||||
EXPORT ArmPlatformIsPrimaryCore
|
|
||||||
EXPORT ArmPlatformGetPrimaryCoreMpId
|
|
||||||
EXPORT ArmPlatformGetCorePosition
|
|
||||||
EXPORT ArmGetPhysAddrTop
|
|
||||||
|
|
||||||
AREA VirtHelper, CODE, READONLY
|
|
||||||
|
|
||||||
ArmPlatformPeiBootAction FUNCTION
|
|
||||||
bx lr
|
|
||||||
ENDFUNC
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetPrimaryCoreMpId (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ArmPlatformGetPrimaryCoreMpId FUNCTION
|
|
||||||
MOV32 r0, FixedPcdGet32 (PcdArmPrimaryCore)
|
|
||||||
bx lr
|
|
||||||
ENDFUNC
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformIsPrimaryCore (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
ArmPlatformIsPrimaryCore FUNCTION
|
|
||||||
mov r0, #1
|
|
||||||
bx lr
|
|
||||||
ENDFUNC
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetCorePosition (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
// With this function: CorePos = (ClusterId * 4) + CoreId
|
|
||||||
ArmPlatformGetCorePosition FUNCTION
|
|
||||||
and r1, r0, #ARM_CORE_MASK
|
|
||||||
and r0, r0, #ARM_CLUSTER_MASK
|
|
||||||
add r0, r1, r0, LSR #6
|
|
||||||
bx lr
|
|
||||||
ENDFUNC
|
|
||||||
|
|
||||||
//EFI_PHYSICAL_ADDRESS
|
|
||||||
//GetPhysAddrTop (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ArmGetPhysAddrTop FUNCTION
|
|
||||||
mov r0, #0x00000000
|
|
||||||
mov r1, #0x10000
|
|
||||||
bx lr
|
|
||||||
ENDFUNC
|
|
||||||
|
|
||||||
END
|
|
@ -1,64 +0,0 @@
|
|||||||
#/* @file
|
|
||||||
# Copyright (c) 2011-2014, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2014, Linaro 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.
|
|
||||||
#
|
|
||||||
#*/
|
|
||||||
|
|
||||||
[Defines]
|
|
||||||
INF_VERSION = 0x00010005
|
|
||||||
BASE_NAME = ArmVirtPlatformLib
|
|
||||||
FILE_GUID = 00214cc1-06d1-45fe-9700-dca5726ad7bf
|
|
||||||
MODULE_TYPE = BASE
|
|
||||||
VERSION_STRING = 1.0
|
|
||||||
LIBRARY_CLASS = ArmPlatformLib|SEC PEIM
|
|
||||||
|
|
||||||
[Packages]
|
|
||||||
MdePkg/MdePkg.dec
|
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
|
||||||
EmbeddedPkg/EmbeddedPkg.dec
|
|
||||||
ArmPkg/ArmPkg.dec
|
|
||||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
|
||||||
ArmVirtPkg/ArmVirtPkg.dec
|
|
||||||
|
|
||||||
[LibraryClasses]
|
|
||||||
IoLib
|
|
||||||
MemoryAllocationLib
|
|
||||||
ArmLib
|
|
||||||
PrintLib
|
|
||||||
FdtLib
|
|
||||||
|
|
||||||
[Sources.common]
|
|
||||||
Virt.c
|
|
||||||
VirtMem.c
|
|
||||||
|
|
||||||
[Sources.AARCH64]
|
|
||||||
AARCH64/VirtHelper.S
|
|
||||||
|
|
||||||
[Sources.ARM]
|
|
||||||
ARM/VirtHelper.S | GCC
|
|
||||||
ARM/VirtHelper.asm | RVCT
|
|
||||||
|
|
||||||
[FeaturePcd]
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec
|
|
||||||
|
|
||||||
[Pcd]
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemorySize
|
|
||||||
|
|
||||||
[FixedPcd]
|
|
||||||
gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
||||||
gArmTokenSpaceGuid.PcdFdBaseAddress
|
|
||||||
gArmTokenSpaceGuid.PcdFdSize
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
|
|
@ -1,160 +0,0 @@
|
|||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
* Copyright (c) 2014, Linaro Limited. All rights reserved.
|
|
||||||
* Copyright (c) 2014, Red Hat, Inc.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 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 <Library/IoLib.h>
|
|
||||||
#include <Library/ArmPlatformLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Library/PcdLib.h>
|
|
||||||
#include <libfdt.h>
|
|
||||||
#include <Pi/PiBootMode.h>
|
|
||||||
#include <Uefi/UefiBaseType.h>
|
|
||||||
#include <Uefi/UefiMultiPhase.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the current Boot Mode
|
|
||||||
|
|
||||||
This function returns the boot reason on the platform
|
|
||||||
|
|
||||||
@return Return the current Boot Mode of the platform
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_BOOT_MODE
|
|
||||||
ArmPlatformGetBootMode (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return BOOT_WITH_FULL_CONFIGURATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
This function is called by PrePeiCore, in the SEC phase.
|
|
||||||
**/
|
|
||||||
RETURN_STATUS
|
|
||||||
ArmPlatformInitialize (
|
|
||||||
IN UINTN MpId
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// We are relying on ArmPlatformInitializeSystemMemory () being called from
|
|
||||||
// InitializeMemory (), which only occurs if the following feature is disabled
|
|
||||||
//
|
|
||||||
ASSERT (!FeaturePcdGet (PcdSystemMemoryInitializeInSec));
|
|
||||||
return RETURN_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Initialize the system (or sometimes called permanent) memory
|
|
||||||
|
|
||||||
This memory is generally represented by the DRAM.
|
|
||||||
|
|
||||||
This function is called from InitializeMemory() in MemoryInitPeim, in the PEI
|
|
||||||
phase.
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
ArmPlatformInitializeSystemMemory (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *DeviceTreeBase;
|
|
||||||
INT32 Node, Prev;
|
|
||||||
UINT64 NewBase, CurBase;
|
|
||||||
UINT64 NewSize, CurSize;
|
|
||||||
CONST CHAR8 *Type;
|
|
||||||
INT32 Len;
|
|
||||||
CONST UINT64 *RegProp;
|
|
||||||
RETURN_STATUS PcdStatus;
|
|
||||||
|
|
||||||
NewBase = 0;
|
|
||||||
NewSize = 0;
|
|
||||||
|
|
||||||
DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress);
|
|
||||||
ASSERT (DeviceTreeBase != NULL);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Make sure we have a valid device tree blob
|
|
||||||
//
|
|
||||||
ASSERT (fdt_check_header (DeviceTreeBase) == 0);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Look for the lowest memory node
|
|
||||||
//
|
|
||||||
for (Prev = 0;; Prev = Node) {
|
|
||||||
Node = fdt_next_node (DeviceTreeBase, Prev, NULL);
|
|
||||||
if (Node < 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check for memory node
|
|
||||||
//
|
|
||||||
Type = fdt_getprop (DeviceTreeBase, Node, "device_type", &Len);
|
|
||||||
if (Type && AsciiStrnCmp (Type, "memory", Len) == 0) {
|
|
||||||
//
|
|
||||||
// Get the 'reg' property of this node. For now, we will assume
|
|
||||||
// two 8 byte quantities for base and size, respectively.
|
|
||||||
//
|
|
||||||
RegProp = fdt_getprop (DeviceTreeBase, Node, "reg", &Len);
|
|
||||||
if (RegProp != 0 && Len == (2 * sizeof (UINT64))) {
|
|
||||||
|
|
||||||
CurBase = fdt64_to_cpu (ReadUnaligned64 (RegProp));
|
|
||||||
CurSize = fdt64_to_cpu (ReadUnaligned64 (RegProp + 1));
|
|
||||||
|
|
||||||
DEBUG ((EFI_D_INFO, "%a: System RAM @ 0x%lx - 0x%lx\n",
|
|
||||||
__FUNCTION__, CurBase, CurBase + CurSize - 1));
|
|
||||||
|
|
||||||
if (NewBase > CurBase || NewBase == 0) {
|
|
||||||
NewBase = CurBase;
|
|
||||||
NewSize = CurSize;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
DEBUG ((EFI_D_ERROR, "%a: Failed to parse FDT memory node\n",
|
|
||||||
__FUNCTION__));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Make sure the start of DRAM matches our expectation
|
|
||||||
//
|
|
||||||
ASSERT (FixedPcdGet64 (PcdSystemMemoryBase) == NewBase);
|
|
||||||
PcdStatus = PcdSet64S (PcdSystemMemorySize, NewSize);
|
|
||||||
ASSERT_RETURN_ERROR (PcdStatus);
|
|
||||||
|
|
||||||
//
|
|
||||||
// We need to make sure that the machine we are running on has at least
|
|
||||||
// 128 MB of memory configured, and is currently executing this binary from
|
|
||||||
// NOR flash. This prevents a device tree image in DRAM from getting
|
|
||||||
// clobbered when our caller installs permanent PEI RAM, before we have a
|
|
||||||
// chance of marking its location as reserved or copy it to a freshly
|
|
||||||
// allocated block in the permanent PEI RAM in the platform PEIM.
|
|
||||||
//
|
|
||||||
ASSERT (NewSize >= SIZE_128MB);
|
|
||||||
ASSERT (
|
|
||||||
(((UINT64)PcdGet64 (PcdFdBaseAddress) +
|
|
||||||
(UINT64)PcdGet32 (PcdFdSize)) <= NewBase) ||
|
|
||||||
((UINT64)PcdGet64 (PcdFdBaseAddress) >= (NewBase + NewSize)));
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ArmPlatformGetPlatformPpiList (
|
|
||||||
OUT UINTN *PpiListSize,
|
|
||||||
OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
|
|
||||||
)
|
|
||||||
{
|
|
||||||
*PpiListSize = 0;
|
|
||||||
*PpiList = NULL;
|
|
||||||
}
|
|
@ -1,102 +0,0 @@
|
|||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014, Linaro 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 <Library/ArmPlatformLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
|
||||||
#include <Library/PcdLib.h>
|
|
||||||
#include <Library/IoLib.h>
|
|
||||||
#include <Library/MemoryAllocationLib.h>
|
|
||||||
|
|
||||||
// Number of Virtual Memory Map Descriptors
|
|
||||||
#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 5
|
|
||||||
|
|
||||||
EFI_PHYSICAL_ADDRESS
|
|
||||||
ArmGetPhysAddrTop (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the Virtual Memory Map of your platform
|
|
||||||
|
|
||||||
This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU
|
|
||||||
on your platform.
|
|
||||||
|
|
||||||
@param[out] VirtualMemoryMap Array of ARM_MEMORY_REGION_DESCRIPTOR
|
|
||||||
describing a Physical-to-Virtual Memory
|
|
||||||
mapping. This array must be ended by a
|
|
||||||
zero-filled entry
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
ArmPlatformGetVirtualMemoryMap (
|
|
||||||
IN ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable;
|
|
||||||
|
|
||||||
ASSERT (VirtualMemoryMap != NULL);
|
|
||||||
|
|
||||||
VirtualMemoryTable = AllocatePages (
|
|
||||||
EFI_SIZE_TO_PAGES (
|
|
||||||
sizeof (ARM_MEMORY_REGION_DESCRIPTOR)
|
|
||||||
* MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (VirtualMemoryTable == NULL) {
|
|
||||||
DEBUG ((EFI_D_ERROR, "%a: Error: Failed AllocatePages()\n", __FUNCTION__));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// System DRAM
|
|
||||||
VirtualMemoryTable[0].PhysicalBase = PcdGet64 (PcdSystemMemoryBase);
|
|
||||||
VirtualMemoryTable[0].VirtualBase = VirtualMemoryTable[0].PhysicalBase;
|
|
||||||
VirtualMemoryTable[0].Length = PcdGet64 (PcdSystemMemorySize);
|
|
||||||
VirtualMemoryTable[0].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
|
||||||
|
|
||||||
DEBUG ((EFI_D_INFO, "%a: Dumping System DRAM Memory Map:\n"
|
|
||||||
"\tPhysicalBase: 0x%lX\n"
|
|
||||||
"\tVirtualBase: 0x%lX\n"
|
|
||||||
"\tLength: 0x%lX\n",
|
|
||||||
__FUNCTION__,
|
|
||||||
VirtualMemoryTable[0].PhysicalBase,
|
|
||||||
VirtualMemoryTable[0].VirtualBase,
|
|
||||||
VirtualMemoryTable[0].Length));
|
|
||||||
|
|
||||||
// Peripheral space before DRAM
|
|
||||||
VirtualMemoryTable[1].PhysicalBase = 0x0;
|
|
||||||
VirtualMemoryTable[1].VirtualBase = 0x0;
|
|
||||||
VirtualMemoryTable[1].Length = VirtualMemoryTable[0].PhysicalBase;
|
|
||||||
VirtualMemoryTable[1].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
|
|
||||||
|
|
||||||
// Peripheral space after DRAM
|
|
||||||
VirtualMemoryTable[2].PhysicalBase = VirtualMemoryTable[0].Length + VirtualMemoryTable[1].Length;
|
|
||||||
VirtualMemoryTable[2].VirtualBase = VirtualMemoryTable[2].PhysicalBase;
|
|
||||||
VirtualMemoryTable[2].Length = MIN (1ULL << FixedPcdGet8 (PcdPrePiCpuMemorySize),
|
|
||||||
ArmGetPhysAddrTop ()) -
|
|
||||||
VirtualMemoryTable[2].PhysicalBase;
|
|
||||||
VirtualMemoryTable[2].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
|
|
||||||
|
|
||||||
// Remap the FD region as normal executable memory
|
|
||||||
VirtualMemoryTable[3].PhysicalBase = FixedPcdGet64 (PcdFdBaseAddress);
|
|
||||||
VirtualMemoryTable[3].VirtualBase = VirtualMemoryTable[3].PhysicalBase;
|
|
||||||
VirtualMemoryTable[3].Length = FixedPcdGet32 (PcdFdSize);
|
|
||||||
VirtualMemoryTable[3].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
|
||||||
|
|
||||||
// End of Table
|
|
||||||
ZeroMem (&VirtualMemoryTable[4], sizeof (ARM_MEMORY_REGION_DESCRIPTOR));
|
|
||||||
|
|
||||||
*VirtualMemoryMap = VirtualMemoryTable;
|
|
||||||
}
|
|
@ -1,140 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2016, Linaro 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 <AsmMacroIoLibV8.h>
|
|
||||||
#include <Library/ArmLib.h>
|
|
||||||
|
|
||||||
// VOID
|
|
||||||
// ArmPlatformPeiBootAction (
|
|
||||||
// VOID *DeviceTreeBaseAddress, // passed by loader in x0
|
|
||||||
// VOID *ImageBase // passed by FDF trampoline in x1
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformPeiBootAction)
|
|
||||||
mov x29, x30 // preserve LR
|
|
||||||
mov x28, x0 // preserve DTB pointer
|
|
||||||
mov x27, x1 // preserve base of image pointer
|
|
||||||
|
|
||||||
//
|
|
||||||
// If we are booting from RAM using the Linux kernel boot protocol, x0 will
|
|
||||||
// point to the DTB image in memory. Otherwise, we are just coming out of
|
|
||||||
// reset, and x0 will be 0.
|
|
||||||
//
|
|
||||||
cbz x0, .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
// The base of the runtime image has been preserved in x1. Check whether
|
|
||||||
// the expected magic number can be found in the header.
|
|
||||||
//
|
|
||||||
ldr w8, .LArm64LinuxMagic
|
|
||||||
ldr w9, [x1, #0x38]
|
|
||||||
cmp w8, w9
|
|
||||||
bne .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// OK, so far so good. We have confirmed that we likely have a DTB and are
|
|
||||||
// booting via the arm64 Linux boot protocol. Update the base-of-image PCD
|
|
||||||
// to the actual relocated value, and add the shift of PcdFdBaseAddress to
|
|
||||||
// PcdFvBaseAddress as well
|
|
||||||
//
|
|
||||||
adr x8, PcdGet64 (PcdFdBaseAddress)
|
|
||||||
adr x9, PcdGet64 (PcdFvBaseAddress)
|
|
||||||
ldr x6, [x8]
|
|
||||||
ldr x7, [x9]
|
|
||||||
sub x7, x7, x6
|
|
||||||
add x7, x7, x1
|
|
||||||
str x1, [x8]
|
|
||||||
str x7, [x9]
|
|
||||||
|
|
||||||
//
|
|
||||||
// Discover the memory size and offset from the DTB, and record in the
|
|
||||||
// respective PCDs. This will also return false if a corrupt DTB is
|
|
||||||
// encountered. Since we are calling a C function, use the window at the
|
|
||||||
// beginning of the FD image as a temp stack.
|
|
||||||
//
|
|
||||||
adr x1, PcdGet64 (PcdSystemMemoryBase)
|
|
||||||
adr x2, PcdGet64 (PcdSystemMemorySize)
|
|
||||||
mov sp, x7
|
|
||||||
bl FindMemnode
|
|
||||||
cbz x0, .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the DTB to the slack space right after the 64 byte arm64/Linux style
|
|
||||||
// image header at the base of this image (defined in the FDF), and record the
|
|
||||||
// pointer in PcdDeviceTreeInitialBaseAddress.
|
|
||||||
//
|
|
||||||
adr x8, PcdGet64 (PcdDeviceTreeInitialBaseAddress)
|
|
||||||
add x27, x27, #0x40
|
|
||||||
str x27, [x8]
|
|
||||||
|
|
||||||
mov x0, x27
|
|
||||||
mov x1, x28
|
|
||||||
bl CopyFdt
|
|
||||||
|
|
||||||
.Lout:
|
|
||||||
ret x29
|
|
||||||
|
|
||||||
.LArm64LinuxMagic:
|
|
||||||
.byte 0x41, 0x52, 0x4d, 0x64
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetPrimaryCoreMpId (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
|
|
||||||
MOV32 (w0, FixedPcdGet32 (PcdArmPrimaryCore))
|
|
||||||
ret
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformIsPrimaryCore (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformIsPrimaryCore)
|
|
||||||
mov x0, #1
|
|
||||||
ret
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetCorePosition (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
// With this function: CorePos = (ClusterId * 4) + CoreId
|
|
||||||
ASM_FUNC(ArmPlatformGetCorePosition)
|
|
||||||
and x1, x0, #ARM_CORE_MASK
|
|
||||||
and x0, x0, #ARM_CLUSTER_MASK
|
|
||||||
add x0, x1, x0, LSR #6
|
|
||||||
ret
|
|
||||||
|
|
||||||
//EFI_PHYSICAL_ADDRESS
|
|
||||||
//GetPhysAddrTop (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmGetPhysAddrTop)
|
|
||||||
mrs x0, id_aa64mmfr0_el1
|
|
||||||
adr x1, .LPARanges
|
|
||||||
and x0, x0, #7
|
|
||||||
ldrb w1, [x1, x0]
|
|
||||||
mov x0, #1
|
|
||||||
lsl x0, x0, x1
|
|
||||||
ret
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the
|
|
||||||
// physical address space support on this CPU:
|
|
||||||
// 0 == 32 bits, 1 == 36 bits, etc etc
|
|
||||||
// 6 and 7 are reserved
|
|
||||||
//
|
|
||||||
.LPARanges:
|
|
||||||
.byte 32, 36, 40, 42, 44, 48, -1, -1
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
@ -1,123 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2014-2016, Linaro 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>
|
|
||||||
|
|
||||||
ASM_FUNC(ArmPlatformPeiBootAction)
|
|
||||||
mov r11, r14 // preserve LR
|
|
||||||
mov r10, r0 // preserve DTB pointer
|
|
||||||
mov r9, r1 // preserve base of image pointer
|
|
||||||
|
|
||||||
//
|
|
||||||
// If we are booting from RAM using the Linux kernel boot protocol, r0 will
|
|
||||||
// point to the DTB image in memory. Otherwise, we are just coming out of
|
|
||||||
// reset, and r0 will be 0.
|
|
||||||
//
|
|
||||||
teq r0, #0
|
|
||||||
beq .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
// The base of the runtime image has been preserved in r1. Check whether
|
|
||||||
// the expected magic number can be found in the header.
|
|
||||||
//
|
|
||||||
ldr r8, .LArm32LinuxMagic
|
|
||||||
ldr r7, [r1, #0x24]
|
|
||||||
cmp r7, r8
|
|
||||||
bne .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// OK, so far so good. We have confirmed that we likely have a DTB and are
|
|
||||||
// booting via the ARM Linux boot protocol. Update the base-of-image PCD
|
|
||||||
// to the actual relocated value, and add the shift of PcdFdBaseAddress to
|
|
||||||
// PcdFvBaseAddress as well
|
|
||||||
//
|
|
||||||
ADRL (r8, PcdGet64 (PcdFdBaseAddress))
|
|
||||||
ADRL (r7, PcdGet64 (PcdFvBaseAddress))
|
|
||||||
ldr r6, [r8]
|
|
||||||
ldr r5, [r7]
|
|
||||||
sub r5, r5, r6
|
|
||||||
add r5, r5, r1
|
|
||||||
str r1, [r8]
|
|
||||||
str r5, [r7]
|
|
||||||
|
|
||||||
//
|
|
||||||
// Discover the memory size and offset from the DTB, and record in the
|
|
||||||
// respective PCDs. This will also return false if a corrupt DTB is
|
|
||||||
// encountered. Since we are calling a C function, use the window at the
|
|
||||||
// beginning of the FD image as a temp stack.
|
|
||||||
//
|
|
||||||
ADRL (r1, PcdGet64 (PcdSystemMemoryBase))
|
|
||||||
ADRL (r2, PcdGet64 (PcdSystemMemorySize))
|
|
||||||
mov sp, r5
|
|
||||||
bl FindMemnode
|
|
||||||
teq r0, #0
|
|
||||||
beq .Lout
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the DTB to the slack space right after the 64 byte arm64/Linux style
|
|
||||||
// image header at the base of this image (defined in the FDF), and record the
|
|
||||||
// pointer in PcdDeviceTreeInitialBaseAddress.
|
|
||||||
//
|
|
||||||
ADRL (r8, PcdGet64 (PcdDeviceTreeInitialBaseAddress))
|
|
||||||
add r9, r9, #0x40
|
|
||||||
str r9, [r8]
|
|
||||||
|
|
||||||
mov r0, r9
|
|
||||||
mov r1, r10
|
|
||||||
bl CopyFdt
|
|
||||||
|
|
||||||
.Lout:
|
|
||||||
bx r11
|
|
||||||
|
|
||||||
.LArm32LinuxMagic:
|
|
||||||
.byte 0x18, 0x28, 0x6f, 0x01
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetPrimaryCoreMpId (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
|
|
||||||
MOV32 (r0, FixedPcdGet32 (PcdArmPrimaryCore))
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformIsPrimaryCore (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmPlatformIsPrimaryCore)
|
|
||||||
mov r0, #1
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//UINTN
|
|
||||||
//ArmPlatformGetCorePosition (
|
|
||||||
// IN UINTN MpId
|
|
||||||
// );
|
|
||||||
// With this function: CorePos = (ClusterId * 4) + CoreId
|
|
||||||
ASM_FUNC(ArmPlatformGetCorePosition)
|
|
||||||
and r1, r0, #ARM_CORE_MASK
|
|
||||||
and r0, r0, #ARM_CLUSTER_MASK
|
|
||||||
add r0, r1, r0, LSR #6
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//EFI_PHYSICAL_ADDRESS
|
|
||||||
//GetPhysAddrTop (
|
|
||||||
// VOID
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmGetPhysAddrTop)
|
|
||||||
mov r0, #0x00000000
|
|
||||||
mov r1, #0x10000
|
|
||||||
bx lr
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
|||||||
#/* @file
|
|
||||||
# Copyright (c) 2011-2015, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2014, Linaro 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.
|
|
||||||
#
|
|
||||||
#*/
|
|
||||||
|
|
||||||
[Defines]
|
|
||||||
INF_VERSION = 0x00010005
|
|
||||||
BASE_NAME = ArmXenRelocatablePlatformLib
|
|
||||||
FILE_GUID = c8602718-4faa-4119-90ca-cae72509ac4c
|
|
||||||
MODULE_TYPE = BASE
|
|
||||||
VERSION_STRING = 1.0
|
|
||||||
LIBRARY_CLASS = ArmPlatformLib|SEC PEIM
|
|
||||||
|
|
||||||
[Packages]
|
|
||||||
MdePkg/MdePkg.dec
|
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
|
||||||
EmbeddedPkg/EmbeddedPkg.dec
|
|
||||||
ArmPkg/ArmPkg.dec
|
|
||||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
|
||||||
ArmVirtPkg/ArmVirtPkg.dec
|
|
||||||
|
|
||||||
[LibraryClasses]
|
|
||||||
IoLib
|
|
||||||
ArmLib
|
|
||||||
PrintLib
|
|
||||||
FdtLib
|
|
||||||
|
|
||||||
[Sources.common]
|
|
||||||
RelocatableVirt.c
|
|
||||||
XenVirtMem.c
|
|
||||||
FdtParser.c
|
|
||||||
|
|
||||||
[Sources.AARCH64]
|
|
||||||
AARCH64/RelocatableVirtHelper.S
|
|
||||||
|
|
||||||
[Sources.ARM]
|
|
||||||
ARM/RelocatableVirtHelper.S
|
|
||||||
|
|
||||||
[FeaturePcd]
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec
|
|
||||||
|
|
||||||
[PatchPcd]
|
|
||||||
gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress
|
|
||||||
gArmTokenSpaceGuid.PcdFdBaseAddress
|
|
||||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
|
||||||
gArmTokenSpaceGuid.PcdSystemMemorySize
|
|
||||||
|
|
||||||
[FixedPcd]
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
||||||
gArmTokenSpaceGuid.PcdFdSize
|
|
@ -1,89 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, Linaro Ltd. 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 <Uefi.h>
|
|
||||||
#include <Include/libfdt.h>
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
FindMemnode (
|
|
||||||
IN VOID *DeviceTreeBlob,
|
|
||||||
OUT UINT64 *SystemMemoryBase,
|
|
||||||
OUT UINT64 *SystemMemorySize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
INT32 MemoryNode;
|
|
||||||
INT32 AddressCells;
|
|
||||||
INT32 SizeCells;
|
|
||||||
INT32 Length;
|
|
||||||
CONST INT32 *Prop;
|
|
||||||
|
|
||||||
if (fdt_check_header (DeviceTreeBlob) != 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Look for a node called "memory" at the lowest level of the tree
|
|
||||||
//
|
|
||||||
MemoryNode = fdt_path_offset (DeviceTreeBlob, "/memory");
|
|
||||||
if (MemoryNode <= 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Retrieve the #address-cells and #size-cells properties
|
|
||||||
// from the root node, or use the default if not provided.
|
|
||||||
//
|
|
||||||
AddressCells = 1;
|
|
||||||
SizeCells = 1;
|
|
||||||
|
|
||||||
Prop = fdt_getprop (DeviceTreeBlob, 0, "#address-cells", &Length);
|
|
||||||
if (Length == 4) {
|
|
||||||
AddressCells = fdt32_to_cpu (*Prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
Prop = fdt_getprop (DeviceTreeBlob, 0, "#size-cells", &Length);
|
|
||||||
if (Length == 4) {
|
|
||||||
SizeCells = fdt32_to_cpu (*Prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Now find the 'reg' property of the /memory node, and read the first
|
|
||||||
// range listed.
|
|
||||||
//
|
|
||||||
Prop = fdt_getprop (DeviceTreeBlob, MemoryNode, "reg", &Length);
|
|
||||||
|
|
||||||
if (Length < (AddressCells + SizeCells) * sizeof (INT32)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
*SystemMemoryBase = fdt32_to_cpu (Prop[0]);
|
|
||||||
if (AddressCells > 1) {
|
|
||||||
*SystemMemoryBase = (*SystemMemoryBase << 32) | fdt32_to_cpu (Prop[1]);
|
|
||||||
}
|
|
||||||
Prop += AddressCells;
|
|
||||||
|
|
||||||
*SystemMemorySize = fdt32_to_cpu (Prop[0]);
|
|
||||||
if (SizeCells > 1) {
|
|
||||||
*SystemMemorySize = (*SystemMemorySize << 32) | fdt32_to_cpu (Prop[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
CopyFdt (
|
|
||||||
IN VOID *FdtDest,
|
|
||||||
IN VOID *FdtSource
|
|
||||||
)
|
|
||||||
{
|
|
||||||
CopyMem (FdtDest, FdtSource, fdt_totalsize (FdtSource));
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
* Copyright (c) 2014, Linaro Limited. All rights reserved.
|
|
||||||
* Copyright (c) 2014, Red Hat, Inc.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 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 <Library/IoLib.h>
|
|
||||||
#include <Library/ArmPlatformLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Pi/PiBootMode.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the current Boot Mode
|
|
||||||
|
|
||||||
This function returns the boot reason on the platform
|
|
||||||
|
|
||||||
@return Return the current Boot Mode of the platform
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_BOOT_MODE
|
|
||||||
ArmPlatformGetBootMode (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return BOOT_WITH_FULL_CONFIGURATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
This function is called by PrePeiCore, in the SEC phase.
|
|
||||||
**/
|
|
||||||
RETURN_STATUS
|
|
||||||
ArmPlatformInitialize (
|
|
||||||
IN UINTN MpId
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// We are relying on ArmPlatformInitializeSystemMemory () being called from
|
|
||||||
// InitializeMemory (), which only occurs if the following feature is disabled
|
|
||||||
//
|
|
||||||
ASSERT (!FeaturePcdGet (PcdSystemMemoryInitializeInSec));
|
|
||||||
return RETURN_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ArmPlatformInitializeSystemMemory (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ArmPlatformGetPlatformPpiList (
|
|
||||||
OUT UINTN *PpiListSize,
|
|
||||||
OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
|
|
||||||
)
|
|
||||||
{
|
|
||||||
*PpiListSize = 0;
|
|
||||||
*PpiList = NULL;
|
|
||||||
}
|
|
@ -1,82 +0,0 @@
|
|||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014, Linaro 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 <Library/ArmPlatformLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
|
||||||
#include <Library/PcdLib.h>
|
|
||||||
#include <Library/IoLib.h>
|
|
||||||
#include <Library/MemoryAllocationLib.h>
|
|
||||||
|
|
||||||
// Number of Virtual Memory Map Descriptors
|
|
||||||
#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 2
|
|
||||||
|
|
||||||
// DDR attributes
|
|
||||||
#define DDR_ATTRIBUTES_CACHED ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
|
|
||||||
#define DDR_ATTRIBUTES_UNCACHED ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED
|
|
||||||
|
|
||||||
EFI_PHYSICAL_ADDRESS
|
|
||||||
ArmGetPhysAddrTop (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Return the Virtual Memory Map of your platform
|
|
||||||
|
|
||||||
This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU
|
|
||||||
on your platform.
|
|
||||||
|
|
||||||
@param[out] VirtualMemoryMap Array of ARM_MEMORY_REGION_DESCRIPTOR
|
|
||||||
describing a Physical-to-Virtual Memory
|
|
||||||
mapping. This array must be ended by a
|
|
||||||
zero-filled entry
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
ArmPlatformGetVirtualMemoryMap (
|
|
||||||
IN ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable;
|
|
||||||
|
|
||||||
ASSERT (VirtualMemoryMap != NULL);
|
|
||||||
|
|
||||||
VirtualMemoryTable = AllocatePages (
|
|
||||||
EFI_SIZE_TO_PAGES (
|
|
||||||
sizeof (ARM_MEMORY_REGION_DESCRIPTOR)
|
|
||||||
* MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (VirtualMemoryTable == NULL) {
|
|
||||||
DEBUG ((EFI_D_ERROR, "%a: Error: Failed AllocatePages()\n", __FUNCTION__));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Map the entire physical memory space as cached. The only device
|
|
||||||
// we care about is the GIC, which will be stage 2 mapped as a device
|
|
||||||
// by the hypervisor, which will override the cached mapping we install
|
|
||||||
// here.
|
|
||||||
//
|
|
||||||
VirtualMemoryTable[0].PhysicalBase = 0x0;
|
|
||||||
VirtualMemoryTable[0].VirtualBase = 0x0;
|
|
||||||
VirtualMemoryTable[0].Length = ArmGetPhysAddrTop ();
|
|
||||||
VirtualMemoryTable[0].Attributes = DDR_ATTRIBUTES_CACHED;
|
|
||||||
|
|
||||||
// End of Table
|
|
||||||
ZeroMem (&VirtualMemoryTable[1], sizeof (ARM_MEMORY_REGION_DESCRIPTOR));
|
|
||||||
|
|
||||||
*VirtualMemoryMap = VirtualMemoryTable;
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user