From: Leif Lindholm <leif.lindholm@linaro.org>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Scott Telford <stelford@cadence.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@ml01.01.org>,
"afish@apple.com" <afish@apple.com>
Subject: Re: [staging/cadence-aarch64 PATCH v2 1/6] CadencePkg: Add libraries for Cadence CSP platform.
Date: Mon, 5 Jun 2017 18:19:18 +0100 [thread overview]
Message-ID: <20170605171918.GU7556@bivouac.eciton.net> (raw)
In-Reply-To: <CAKv+Gu_0k4OZTSYU9TobNeuda5YZSSYd8xuNHiL9wH-K6D6k9g@mail.gmail.com>
On Mon, Jun 05, 2017 at 03:12:34PM +0000, Ard Biesheuvel wrote:
> Hi Scott,
>
> On 5 June 2017 at 10:50, Scott Telford <stelford@cadence.com> wrote:
> > Add libraries (CadenceCspLib, CadenceCspSecLib,
> > CadenceCspResetSystemLib) to support the Cadence Configurable System
> > Platform (CSP) configured with a single ARM Cortex-A53, GIC-500,
> > Cadence UART and Cadence PCIe Root Complex.
> >
>
> If I am reading the code correctly, this UEFI port may execute under
> ATF or may be booted at EL3 directly, right? In the former case, you
> should really be using PSCI for reset instead of poking the system
> registers directly.
>
>
> > Contributed-under: TianoCore Contribution Agreement 1.0
> > Signed-off-by: Scott Telford <stelford@cadence.com>
> > ---
> > CadencePkg/Include/Library/CspSysReg.h | 37 ++++++
> > .../CadenceCspLib/AArch64/ArmPlatformHelper.S | 62 +++++++++
> > CadencePkg/Library/CadenceCspLib/CadenceCspLib.c | 135 +++++++++++++++++++
> > CadencePkg/Library/CadenceCspLib/CadenceCspLib.inf | 76 +++++++++++
> > .../Library/CadenceCspLib/CadenceCspLibMem.c | 145 +++++++++++++++++++++
> > .../Library/CadenceCspLib/CadenceCspLibSec.inf | 52 ++++++++
> > .../CadenceCspResetSystemLib.c | 83 ++++++++++++
> > .../CadenceCspResetSystemLib.inf | 40 ++++++
> > .../Library/CadenceCspSecLib/AArch64/CspBoot.S | 63 +++++++++
> > .../Library/CadenceCspSecLib/AArch64/GicV3.S | 70 ++++++++++
> > .../Library/CadenceCspSecLib/CadenceCspSecLib.inf | 44 +++++++
> > CadencePkg/Library/CadenceCspSecLib/CspSec.c | 79 +++++++++++
> > 12 files changed, 886 insertions(+)
> > create mode 100644 CadencePkg/Include/Library/CspSysReg.h
> > create mode 100644 CadencePkg/Library/CadenceCspLib/AArch64/ArmPlatformHelper.S
> > create mode 100644 CadencePkg/Library/CadenceCspLib/CadenceCspLib.c
> > create mode 100644 CadencePkg/Library/CadenceCspLib/CadenceCspLib.inf
> > create mode 100644 CadencePkg/Library/CadenceCspLib/CadenceCspLibMem.c
> > create mode 100644 CadencePkg/Library/CadenceCspLib/CadenceCspLibSec.inf
> > create mode 100644 CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.c
> > create mode 100644 CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.inf
> > create mode 100644 CadencePkg/Library/CadenceCspSecLib/AArch64/CspBoot.S
> > create mode 100644 CadencePkg/Library/CadenceCspSecLib/AArch64/GicV3.S
> > create mode 100644 CadencePkg/Library/CadenceCspSecLib/CadenceCspSecLib.inf
> > create mode 100644 CadencePkg/Library/CadenceCspSecLib/CspSec.c
> >
> > diff --git a/CadencePkg/Include/Library/CspSysReg.h b/CadencePkg/Include/Library/CspSysReg.h
> > new file mode 100644
> > index 0000000..4d3ac925
> > --- /dev/null
> > +++ b/CadencePkg/Include/Library/CspSysReg.h
> > @@ -0,0 +1,37 @@
> > +/** @file
> > +* Cadence CSP system register offsets.
> > +* Copyright (c) 2017, Cadence Design Systems. 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.
> > +*
> > +**/
> > +
> > +#ifndef __CSP_SYS_REG_H__
> > +#define __CSP_SYS_REG_H__
> > +
> > +// Cadence CSP system register offsets
> > +#define CSP_SYSREG_VERSION 0x00
> > +#define CSP_SYSREG_CPU_FREQ 0x04
> > +#define CSP_SYSREG_STATUS 0x08
> > +#define CSP_SYSREG_RUN_STALL 0x0C
> > +#define CSP_SYSREG_SW_RESET 0x10
> > +#define CSP_SYSREG_CORE1_RESET 0x14
> > +#define CSP_SYSREG_SCRATCH_REG_0 0x18
> > +#define CSP_SYSREG_PROC_INTERRUPT 0x1C
> > +#define CSP_SYSREG_SCRATCH_REG_1 0x20
> > +#define CSP_SYSREG_SCRATCH_REG_2 0x24
> > +#define CSP_SYSREG_SCRATCH_REG_3 0x28
> > +#define CSP_SYSREG_SCRATCH_REG_4 0x2C
> > +#define CSP_SYSREG_SCRATCH_REG_5 0x30
> > +#define CSP_SYSREG_SCRATCH_REG_6 0x34
> > +#define CSP_SYSREG_SET_INTERRUPT 0x38
> > +#define CSP_SYSREG_CLR_INTERRUPT 0x3C
> > +#define CSP_SYSREG_DIP_SWITCHES 0x40
> > +
> > +#endif
> > diff --git a/CadencePkg/Library/CadenceCspLib/AArch64/ArmPlatformHelper.S b/CadencePkg/Library/CadenceCspLib/AArch64/ArmPlatformHelper.S
> > new file mode 100644
> > index 0000000..56af563
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspLib/AArch64/ArmPlatformHelper.S
> > @@ -0,0 +1,62 @@
> > +//
> > +// Copyright (c) 2012-2013, 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 <AsmMacroIoLibV8.h>
> > +#include <Library/ArmLib.h>
> > +
> > +.text
> > +.align 2
> > +
> > +GCC_ASM_EXPORT(ArmPlatformPeiBootAction)
> > +GCC_ASM_EXPORT(ArmPlatformGetCorePosition)
> > +GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)
> > +GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)
> > +
> > +GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)
> > +GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)
> > +
>
> No need for imports.
>
> > +ASM_PFX(ArmPlatformPeiBootAction):
> > + ret
> > +
> > +//UINTN
> > +//ArmPlatformGetCorePosition (
> > +// IN UINTN MpId
> > +// );
> > +// With this function: CorePos = (ClusterId * 4) + CoreId
> > +ASM_PFX(ArmPlatformGetCorePosition):
> > + and x1, x0, #ARM_CORE_MASK
> > + and x0, x0, #ARM_CLUSTER_MASK
> > + add x0, x1, x0, LSR #6
> > + ret
> > +
> > +//UINTN
> > +//ArmPlatformGetPrimaryCoreMpId (
> > +// VOID
> > +// );
> > +ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
> > + MOV32 (w0, FixedPcdGet32(PcdArmPrimaryCore))
> > + ret
> > +
> > +//UINTN
> > +//ArmPlatformIsPrimaryCore (
> > +// IN UINTN MpId
> > +// );
> > +ASM_PFX(ArmPlatformIsPrimaryCore):
> > + MOV32 (w1, FixedPcdGet32(PcdArmPrimaryCoreMask))
> > + and x0, x0, x1
> > + MOV32 (w1, FixedPcdGet32(PcdArmPrimaryCore))
> > + cmp w0, w1
> > + mov x0, #1
> > + mov x1, #0
> > + csel x0, x0, x1, eq
> > + ret
>
> This looks like the old, clunky default implementation which we
> replaced in the mean time. Mind replacing that?
>
> > diff --git a/CadencePkg/Library/CadenceCspLib/CadenceCspLib.c b/CadencePkg/Library/CadenceCspLib/CadenceCspLib.c
> > new file mode 100644
> > index 0000000..8a985ec
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspLib/CadenceCspLib.c
> > @@ -0,0 +1,135 @@
> > +/** @file
> > +*
> > +* Copyright (c) 2011-2012, ARM Limited. All rights reserved.
> > +* Copyright (c) 2017, Cadence Design Systems, Inc. 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 <Library/ArmPlatformLib.h>
> > +#include <Library/CspSysReg.h>
> > +#include <Library/IoLib.h>
> > +#include <Library/PcdLib.h>
> > +
> > +#include <Ppi/ArmMpCoreInfo.h>
> > +
> > +
> > +ARM_CORE_INFO mArmPlatformNullMpCoreInfoTable[] = {
> > + {
> > + // Cluster 0, Core 0
> > + 0x0, 0x0,
> > +
> > + // MP Core MailBox Set/Get/Clear Addresses and Clear Value
> > + (EFI_PHYSICAL_ADDRESS)0,
> > + (EFI_PHYSICAL_ADDRESS)0,
> > + (EFI_PHYSICAL_ADDRESS)0,
> > + (UINT64)0xFFFFFFFF
> > + }
> > +};
> > +
> > +
> > +
> > +/**
> > + Return the current Boot Mode
> > +
> > + This function returns the boot reason on the platform
> > +
> > +**/
> > +EFI_BOOT_MODE
> > +ArmPlatformGetBootMode (
> > + VOID
> > + )
> > +{
> > + return BOOT_WITH_FULL_CONFIGURATION;
> > +}
> > +
> > +/**
> > + Initialize controllers that must setup in the normal world
> > +
> > + This function is called by the ArmPlatformPkg/PrePi or ArmPlatformPkg/PlatformPei
> > + in the PEI phase.
> > +
> > +**/
> > +RETURN_STATUS
> > +ArmPlatformInitialize (
> > + IN UINTN MpId
> > + )
> > +{
> > + UINTN CspScratchReg2;
> > +
> > + if (!ArmPlatformIsPrimaryCore (MpId)) {
> > + return RETURN_SUCCESS;
> > + }
> > +
> > + // CSP System Register initialisation
> > + CspScratchReg2 = PcdGet64 (PcdCspSysRegBase) + CSP_SYSREG_SCRATCH_REG_2;
> > + MmioWrite32 ((UINTN)CspScratchReg2, 0x1);
> > + MmioWrite32 ((UINTN)CspScratchReg2, 0x3);
> > +
> > + return RETURN_SUCCESS;
> > +}
> > +
> > +/**
> > + Initialize the system (or sometimes called permanent) memory
> > +
> > + This memory is generally represented by the DRAM.
> > +
> > +**/
> > +VOID
> > +ArmPlatformInitializeSystemMemory (
> > + VOID
> > + )
> > +{
> > + //TODO: Implement me
>
> No TODOs please. Either put something there, or leave it empty.
>
> > +}
> > +
>
> STATIC
>
> > +EFI_STATUS
> > +PrePeiCoreGetMpCoreInfo (
> > + OUT UINTN *CoreCount,
> > + OUT ARM_CORE_INFO **ArmCoreTable
> > + )
> > +{
> > + if (ArmIsMpCore()) {
> > + *CoreCount = sizeof(mArmPlatformNullMpCoreInfoTable) / sizeof(ARM_CORE_INFO);
> > + *ArmCoreTable = mArmPlatformNullMpCoreInfoTable;
> > + return EFI_SUCCESS;
> > + } else {
> > + return EFI_UNSUPPORTED;
> > + }
> > +}
> > +
> > +// Needs to be declared in the file. Otherwise gArmMpCoreInfoPpiGuid is undefined in the contect of PrePeiCore
> > +EFI_GUID mArmMpCoreInfoPpiGuid = ARM_MP_CORE_INFO_PPI_GUID;
>
> This is also cargo culted nonsense. Please sync with EDK2 master.
>
> > +ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };
> > +
> STATIC
>
> > +EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] = {
> STATIC
>
> > + {
> > + EFI_PEI_PPI_DESCRIPTOR_PPI,
> > + &mArmMpCoreInfoPpiGuid,
> > + &mMpCoreInfoPpi
> > + }
> > +};
> > +
> > +VOID
> > +ArmPlatformGetPlatformPpiList (
> > + OUT UINTN *PpiListSize,
> > + OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
> > + )
> > +{
> > + if (ArmIsMpCore()) {
> > + *PpiListSize = sizeof(gPlatformPpiTable);
> > + *PpiList = gPlatformPpiTable;
> > + } else {
> > + *PpiListSize = 0;
> > + *PpiList = NULL;
> > + }
> > +}
> > +
> > diff --git a/CadencePkg/Library/CadenceCspLib/CadenceCspLib.inf b/CadencePkg/Library/CadenceCspLib/CadenceCspLib.inf
> > new file mode 100644
> > index 0000000..b2c6440
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspLib/CadenceCspLib.inf
> > @@ -0,0 +1,76 @@
> > +#/* @file
> > +# Copyright (c) 2011-2012, ARM Limited. All rights reserved.
> > +# Copyright (c) 2017, Cadence Design Systems, Inc. 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 = 1.25
> > + BASE_NAME = CadenceCspLib
> > + FILE_GUID = 13392a39-0fd2-4ec1-8541-1a7b5f0005d9
> > + MODULE_TYPE = BASE
> > + VERSION_STRING = 1.0
> > + LIBRARY_CLASS = ArmPlatformLib
> > +
> > +[Packages]
> > + MdePkg/MdePkg.dec
> > + MdeModulePkg/MdeModulePkg.dec
> > + EmbeddedPkg/EmbeddedPkg.dec
> > + ArmPkg/ArmPkg.dec
> > + ArmPlatformPkg/ArmPlatformPkg.dec
> > + CadencePkg/CadenceCspPkg.dec
> > +
> > +[LibraryClasses]
> > + ArmLib
> > + MemoryAllocationLib
> > + SerialPortLib
> > + DebugLib
> > + HobLib
> > +
> > +[Sources.common]
> > + CadenceCspLib.c
> > + CadenceCspLibMem.c
> > +
> > +[Sources.AArch64]
> > + AArch64/ArmPlatformHelper.S
> > +
> > +[FeaturePcd]
> > + gEmbeddedTokenSpaceGuid.PcdCacheEnable
> > +
>
> We should get rid of this: modern ARM requires the cache to be enabled
> for coherent DMA and atomics, so disabling it does not make a lot of
> sense. Could you please drop it, and remove the references to it from
> the code? We will do this at some point for the upstream as well, at
> least for AARCH64.
Wasn't this a crazy "debug" feature?
Yes, if there is nothing special in your model setup that requires
this, please drop. (And if there is, please let us know what.)
> > +[FixedPcd]
> > + gArmTokenSpaceGuid.PcdSystemMemoryBase
> > + gArmTokenSpaceGuid.PcdSystemMemorySize
> > +
> > + gArmTokenSpaceGuid.PcdSecureFdBaseAddress
> > + gArmTokenSpaceGuid.PcdSecureFdSize
> > + gArmTokenSpaceGuid.PcdFdBaseAddress
> > + gArmTokenSpaceGuid.PcdFdSize
> > +
> > + gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
> > + gArmTokenSpaceGuid.PcdArmPrimaryCore
> > +
> > + gArmTokenSpaceGuid.PcdGicDistributorBase
> > + gArmTokenSpaceGuid.PcdGicRedistributorsBase
> > +
> > + gCadenceCspTokenSpaceGuid.PcdCspSysRegBase
> > + gCadenceCspTokenSpaceGuid.PcdCspSysRegSize
> > +
> > + gCadenceCspTokenSpaceGuid.PcdCspSerialBase
> > + gCadenceCspTokenSpaceGuid.PcdCspSerialSize
> > +
> > + gCadenceCspTokenSpaceGuid.PcdPcie1RootPortBaseAddress
> > + gCadenceCspTokenSpaceGuid.PcdPcieRootPortBaseAddress
> > + gCadenceCspTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress
> > + gCadenceCspTokenSpaceGuid.PcdPciConfigurationSpaceSize
> > + gArmTokenSpaceGuid.PcdPciMmio32Base
> > + gArmTokenSpaceGuid.PcdPciMmio32Size
> > + gArmTokenSpaceGuid.PcdPciMmio64Base
> > + gArmTokenSpaceGuid.PcdPciMmio64Size
> > diff --git a/CadencePkg/Library/CadenceCspLib/CadenceCspLibMem.c b/CadencePkg/Library/CadenceCspLib/CadenceCspLibMem.c
> > new file mode 100644
> > index 0000000..12cd6a5
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspLib/CadenceCspLibMem.c
> > @@ -0,0 +1,145 @@
> > +/** @file
> > +*
> > +* Copyright (c) 2011, ARM Limited. All rights reserved.
> > +* Copyright (c) 2017, Cadence Design Systems, Inc. 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/IoLib.h>
> > +#include <Library/MemoryAllocationLib.h>
> > +#include <Library/PcdLib.h>
> > +
> > +#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 14
> > +
> > +// DDR attributes
> > +#define DDR_ATTRIBUTES_CACHED ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
> > +#define DDR_ATTRIBUTES_UNCACHED ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED
> > +
> > +/**
> > + 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_ATTRIBUTES CacheAttributes;
> > + UINTN Index = 0;
> > + ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable;
> > +
> > + ASSERT(VirtualMemoryMap != NULL);
> > +
> > + VirtualMemoryTable = (ARM_MEMORY_REGION_DESCRIPTOR*)AllocatePages(EFI_SIZE_TO_PAGES (sizeof(ARM_MEMORY_REGION_DESCRIPTOR) * MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS));
> > + if (VirtualMemoryTable == NULL) {
> > + return;
> > + }
> > +
> > + CacheAttributes = (FeaturePcdGet(PcdCacheEnable))
> > + ? DDR_ATTRIBUTES_CACHED
> > + : DDR_ATTRIBUTES_UNCACHED;
> > +
> > + // SRAM
> > + VirtualMemoryTable[Index].PhysicalBase = PcdGet64(PcdSystemMemoryBase);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdSystemMemoryBase);
> > + VirtualMemoryTable[Index].Length = PcdGet64(PcdSystemMemorySize);
> > + VirtualMemoryTable[Index].Attributes = CacheAttributes;
> > +
> > + // CDNS UART
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdCspSerialBase);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdCspSerialBase);
> > + VirtualMemoryTable[Index].Length = PcdGet32(PcdCspSerialSize);
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > + // UEFI ROM (Secure)
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdSecureFdBaseAddress);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdSecureFdBaseAddress);
> > + VirtualMemoryTable[Index].Length = PcdGet32(PcdSecureFdSize);
> > + VirtualMemoryTable[Index].Attributes = CacheAttributes;
> > +
> > + // UEFI ROM (Normal)
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdFdBaseAddress);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdFdBaseAddress);
> > + VirtualMemoryTable[Index].Length = PcdGet32(PcdFdSize);
> > + VirtualMemoryTable[Index].Attributes = CacheAttributes;
> > +
> > + // CSP SysRegs
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdCspSysRegBase);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdCspSysRegBase);
> > + VirtualMemoryTable[Index].Length = PcdGet32(PcdCspSysRegSize);
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > + // GIC Distributor
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdGicDistributorBase);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdGicDistributorBase);
> > + VirtualMemoryTable[Index].Length = 0x10000;
>
> No bare constants please
>
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > + // GIC Redistributor
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdGicRedistributorsBase);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdGicRedistributorsBase);
> > + VirtualMemoryTable[Index].Length = 0x20000;
>
> Idem.
>
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > + // PCIe RP
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdPcieRootPortBaseAddress);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdPcieRootPortBaseAddress);
> > + VirtualMemoryTable[Index].Length = 0x00800000;
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > + //
> > + // PCI Configuration Space (AXI region)
> > + //
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64 (PcdPciConfigurationSpaceBaseAddress);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64 (PcdPciConfigurationSpaceBaseAddress);
> > + VirtualMemoryTable[Index].Length = PcdGet64 (PcdPciConfigurationSpaceSize);
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > + //
> > + // PCI Memory Space
> > + //
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet32 (PcdPciMmio32Base);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet32 (PcdPciMmio32Base);
> > + VirtualMemoryTable[Index].Length = PcdGet32 (PcdPciMmio32Size);
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
>
> BARs that get allocated in this region will be mapped on demand by the
> PCI DXE driver, so there is no need to create a mapping for the entire
> region here.
>
> > + //
> > + // 64-bit PCI Memory Space
> > + //
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64 (PcdPciMmio64Base);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64 (PcdPciMmio64Base);
> > + VirtualMemoryTable[Index].Length = PcdGet64 (PcdPciMmio64Size);
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
>
> Same here.
>
> > + // PCIe EP
> > + VirtualMemoryTable[++Index].PhysicalBase = PcdGet64(PcdPcie1RootPortBaseAddress);
> > + VirtualMemoryTable[Index].VirtualBase = PcdGet64(PcdPcie1RootPortBaseAddress);
> > + VirtualMemoryTable[Index].Length = 0x00800000;
> > + VirtualMemoryTable[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > + // End of Table
> > + VirtualMemoryTable[++Index].PhysicalBase = 0;
> > + VirtualMemoryTable[Index].VirtualBase = 0;
> > + VirtualMemoryTable[Index].Length = 0;
> > + VirtualMemoryTable[Index].Attributes = (ARM_MEMORY_REGION_ATTRIBUTES)0;
> > +
> > + ASSERT(Index < MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS);
> > +
> > + *VirtualMemoryMap = VirtualMemoryTable;
> > +}
> > diff --git a/CadencePkg/Library/CadenceCspLib/CadenceCspLibSec.inf b/CadencePkg/Library/CadenceCspLib/CadenceCspLibSec.inf
> > new file mode 100644
> > index 0000000..dd6c5c3
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspLib/CadenceCspLibSec.inf
> > @@ -0,0 +1,52 @@
> > +#/* @file
> > +# Copyright (c) 2011-2012, ARM Limited. All rights reserved.
> > +# Copyright (c) 2017, Cadence Design Systems, Inc. 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 = 1.25
> > + BASE_NAME = CadenceCspLibSec
> > + FILE_GUID = 3008d873-1400-48d8-abda-6ac9cce97246
> > + MODULE_TYPE = BASE
> > + VERSION_STRING = 1.0
> > + LIBRARY_CLASS = ArmPlatformLib
> > +
> > +[Packages]
> > + ArmPkg/ArmPkg.dec
> > + ArmPlatformPkg/ArmPlatformPkg.dec
> > + CadencePkg/CadenceCspPkg.dec
> > + MdeModulePkg/MdeModulePkg.dec
> > + MdePkg/MdePkg.dec
> > +
> > +[LibraryClasses]
> > + ArmLib
> > + DebugLib
> > +
> > +[Sources.common]
> > + CadenceCspLib.c
> > +
> > +[Sources.AARCH64]
> > + AArch64/ArmPlatformHelper.S
> > +
> > +[FixedPcd]
> > + gArmTokenSpaceGuid.PcdSystemMemoryBase
> > + gArmTokenSpaceGuid.PcdSystemMemorySize
> > + gArmTokenSpaceGuid.PcdFvBaseAddress
> > +
> > + gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
> > + gArmTokenSpaceGuid.PcdArmPrimaryCore
> > +
> > + gCadenceCspTokenSpaceGuid.PcdCspSysRegBase
> > + gCadenceCspTokenSpaceGuid.PcdCspSysRegSize
> > +
> > +[Ppis]
> > + gArmMpCoreInfoPpiGuid
> > diff --git a/CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.c b/CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.c
> > new file mode 100644
> > index 0000000..144fa9f
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.c
> > @@ -0,0 +1,83 @@
> > +/** @file
> > + Library to support ResetSystem Runtime call.
> > +
> > + Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> > + Copyright (c) 2013, ARM Ltd. All rights reserved.<BR>
> > + Copyright (c) 2017, Cadence Design Systems, Inc. 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 <PiDxe.h>
> > +
> > +#include <Library/BaseLib.h>
> > +#include <Library/CspSysReg.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/EfiResetSystemLib.h>
> > +#include <Library/IoLib.h>
> > +#include <Library/PcdLib.h>
> > +
> > +/**
> > + Resets the entire platform.
> > +
> > + @param ResetType The type of reset to perform.
> > + @param ResetStatus The status code for the reset.
> > + @param DataSize The size, in bytes, of WatchdogData.
> > + @param ResetData For a ResetType of EfiResetCold, EfiResetWarm, or
> > + EfiResetShutdown the data buffer starts with a Null-terminated
> > + Unicode string, optionally followed by additional binary data.
> > +
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +LibResetSystem (
> > + IN EFI_RESET_TYPE ResetType,
> > + IN EFI_STATUS ResetStatus,
> > + IN UINTN DataSize,
> > + IN CHAR16 *ResetData OPTIONAL
> > + )
> > +{
> > + switch (ResetType) {
> > + case EfiResetPlatformSpecific:
> > + // Map the platform specific reset as reboot
> > + case EfiResetWarm:
> > + // Map a warm reset into a cold reset
> > + case EfiResetCold:
> > + MmioWrite16((PcdGet64(PcdCspSysRegBase) + CSP_SYSREG_SW_RESET), 0xDEAD);
> > + break;
> > + case EfiResetShutdown:
> > + // XXX TODO
>
> Another TODO. Note that 'shutdown' will now completely be ignored by
> the firmware on RELEASE builds, and will return all the way back to
> the OS. Perhaps we should deal with this in upper layers as well, but
> for now, it would be better not to ignore it here.
I would lean towards one of
while (1) {
ArmCallWFI();
}
or falling back to the cold reset.
/
Leif
> > + break;
> > + default:
> > + return EFI_INVALID_PARAMETER;
> > + }
> > +
> > + ASSERT(FALSE);
> > + return EFI_UNSUPPORTED;
> > +}
> > +
> > +/**
> > + Initialize any infrastructure required for LibResetSystem () to function.
> > +
> > + @param ImageHandle The firmware allocated handle for the EFI image.
> > + @param SystemTable A pointer to the EFI System Table.
> > +
> > + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
> > +
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +LibInitializeResetSystem (
> > + IN EFI_HANDLE ImageHandle,
> > + IN EFI_SYSTEM_TABLE *SystemTable
> > + )
> > +{
> > + return EFI_SUCCESS;
> > +}
> > diff --git a/CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.inf b/CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.inf
> > new file mode 100644
> > index 0000000..66491ee
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspResetSystemLib/CadenceCspResetSystemLib.inf
> > @@ -0,0 +1,40 @@
> > +#/** @file
> > +# Library to support ResetSystem Runtime call.
> > +#
> > +# Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
> > +# Copyright (c) 2017, Cadence Design Systems, Inc. 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 = 1.25
> > + BASE_NAME = CadenceCspResetSystemLib
> > + FILE_GUID = 4b1bc734-7534-4baa-b33f-7f5caa743996
> > + MODULE_TYPE = BASE
> > + VERSION_STRING = 1.0
> > + LIBRARY_CLASS = EfiResetSystemLib
> > +
> > +
> > +[Sources.common]
> > + CadenceCspResetSystemLib.c
> > +
> > +[Packages]
> > + CadencePkg/CadenceCspPkg.dec
> > + EmbeddedPkg/EmbeddedPkg.dec
> > + MdePkg/MdePkg.dec
> > +
> > +[LibraryClasses]
> > + IoLib
> > + DebugLib
> > + PcdLib
> > +
> > +[FixedPcd]
> > + gCadenceCspTokenSpaceGuid.PcdCspSysRegBase
> > diff --git a/CadencePkg/Library/CadenceCspSecLib/AArch64/CspBoot.S b/CadencePkg/Library/CadenceCspSecLib/AArch64/CspBoot.S
> > new file mode 100644
> > index 0000000..ae0d66b
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspSecLib/AArch64/CspBoot.S
> > @@ -0,0 +1,63 @@
> > +//
> > +// Copyright (c) 2011 - 2014, 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 <AsmMacroIoLibV8.h>
> > +#include <Base.h>
> > +#include <Library/ArmPlatformLib.h>
> > +#include <AutoGen.h>
> > +
> > +.text
> > +.align 3
> > +
> > +GCC_ASM_EXPORT(ArmPlatformSecBootAction)
> > +GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
> > +GCC_ASM_EXPORT(ArmSecMpCoreSecondariesWrite)
> > +GCC_ASM_EXPORT(ArmSecMpCoreSecondariesRead)
> > +
> > +/**
> > + Call at the beginning of the platform boot up
> > +
> > + This function allows the firmware platform to do extra actions at the early
> > + stage of the platform power up.
> > +
> > + Note: This function must be implemented in assembler as there is no stack set up yet
> > +
> > +**/
> > +ASM_PFX(ArmPlatformSecBootAction):
> > + ret
> > +
> > +/**
> > + Initialize the memory where the initial stacks will reside
> > +
> > + This memory can contain the initial stacks (Secure and Secure Monitor stacks).
> > + In some platform, this region is already initialized and the implementation of this function can
> > + do nothing. This memory can also represent the Secure RAM.
> > + This function is called before the satck has been set up. Its implementation must ensure the stack
> > + pointer is not used (probably required to use assembly language)
> > +
> > +**/
> > +ASM_PFX(ArmPlatformSecBootMemoryInit):
> > + // The SMC does not need to be initialized for RTSM
> > + ret
> > +
> > +/* Write the flag register used to start Secondary cores */
> > +ASM_PFX(ArmSecMpCoreSecondariesWrite):
> > + // Write to the CPU Mailbox
> > + ret
> > +
> > +/* Read the flag register used to start Secondary cores */
> > +ASM_PFX(ArmSecMpCoreSecondariesRead):
> > + // Return the value from the CPU Mailbox
> > + mov x0, #0
> > + ret
> > +
>
> What is the point of these? Do all cores enter EL3 when booting without ATF?
>
> > diff --git a/CadencePkg/Library/CadenceCspSecLib/AArch64/GicV3.S b/CadencePkg/Library/CadenceCspSecLib/AArch64/GicV3.S
> > new file mode 100644
> > index 0000000..035e095
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspSecLib/AArch64/GicV3.S
> > @@ -0,0 +1,70 @@
> > +//
> > +// Copyright (c) 2013-2014, 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 <AsmMacroIoLibV8.h>
> > +#include <Chipset/AArch64.h>
> > +
> > +#ifndef __clang__
> > +// Register definitions used by GCC for GICv3 access.
> > +// These are defined by ARMCC, so keep them in the GCC specific code for now.
> > +#define ICC_SRE_EL2 S3_4_C12_C9_5
> > +#define ICC_SRE_EL3 S3_6_C12_C12_5
> > +#define ICC_CTLR_EL1 S3_0_C12_C12_4
> > +#define ICC_CTLR_EL3 S3_6_C12_C12_4
> > +#define ICC_PMR_EL1 S3_0_C4_C6_0
> > +#endif
> > +
> > +.text
> > +.align 3
> > +
> > +GCC_ASM_EXPORT(InitializeGicV3)
> > +
> > +/* Initialize GICv3 to expose it as a GICv2 as UEFI does not support GICv3 yet */
> > +ASM_PFX(InitializeGicV3):
> > + // We have a GICv3. UEFI still uses the GICv2 mode. We must do enough setup
> > + // to allow Linux to use GICv3 if it chooses.
> > +
>
> As Leif pointed out, these comments seem a bit out of date.
>
> > + // In order to setup NS side we need to enable it first.
> > + mrs x0, scr_el3
> > + orr x0, x0, #1
> > + msr scr_el3, x0
> > +
> > + // Enable SRE at EL3 and ICC_SRE_EL2 access
> > + mov x0, #((1 << 3) | (1 << 0)) // Enable | SRE
> > + mrs x1, ICC_SRE_EL3
> > + orr x1, x1, x0
> > + msr ICC_SRE_EL3, x1
> > + isb
> > +
> > + // Enable SRE at EL2 and ICC_SRE_EL1 access..
> > + mrs x1, ICC_SRE_EL2
> > + orr x1, x1, x0
> > + msr ICC_SRE_EL2, x1
> > + isb
> > +
> > + // Configure CPU interface
> > + msr ICC_CTLR_EL3, xzr
> > + isb
> > + msr ICC_CTLR_EL1, xzr
> > + isb
> > +
> > + // The MemoryMap view and Register view may not be consistent, So Set PMR again.
> > + mov w1, #1 << 7 // allow NS access to GICC_PMR
> > + msr ICC_PMR_EL1, x1
> > + isb
> > +
> > + // Remove the SCR.NS bit
> > + mrs x0, scr_el3
> > + and x0, x0, #~SCR_NS
> > + msr scr_el3, x0
> > + ret
>
> Is this really all configuration that needs to be done at EL3 to put
> the GIC in a well defined state?
>
> > diff --git a/CadencePkg/Library/CadenceCspSecLib/CadenceCspSecLib.inf b/CadencePkg/Library/CadenceCspSecLib/CadenceCspSecLib.inf
> > new file mode 100644
> > index 0000000..1603ed1
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspSecLib/CadenceCspSecLib.inf
> > @@ -0,0 +1,44 @@
> > +#/* @file
> > +# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
> > +# Copyright (c) 2017, Cadence Design Systems, Inc. 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 = 1.25
> > + BASE_NAME = CadenceCspSecLib
> > + FILE_GUID = 07a2577e-43fb-40d9-9833-415cb7feefab
> > + MODULE_TYPE = BASE
> > + VERSION_STRING = 1.0
> > + LIBRARY_CLASS = ArmPlatformSecLib
> > +
> > +[Packages]
> > + ArmPkg/ArmPkg.dec
> > + ArmPlatformPkg/ArmPlatformPkg.dec
> > + EmbeddedPkg/EmbeddedPkg.dec
> > + MdeModulePkg/MdeModulePkg.dec
> > + MdePkg/MdePkg.dec
> > +
> > +[LibraryClasses]
> > + IoLib
> > + ArmLib
> > + SerialPortLib
> > +
> > +[Sources.common]
> > + CspSec.c
> > +
> > +[Sources.AARCH64]
> > + AArch64/CspBoot.S
> > + AArch64/GicV3.S
> > +
> > +[FixedPcd]
> > + gArmTokenSpaceGuid.PcdFvBaseAddress
> > + gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
> > diff --git a/CadencePkg/Library/CadenceCspSecLib/CspSec.c b/CadencePkg/Library/CadenceCspSecLib/CspSec.c
> > new file mode 100644
> > index 0000000..65eedb4
> > --- /dev/null
> > +++ b/CadencePkg/Library/CadenceCspSecLib/CspSec.c
> > @@ -0,0 +1,79 @@
> > +/** @file
> > +*
> > +* Copyright (c) 2011-2014, ARM Limited. All rights reserved.
> > +* Copyright (c) 2017, Cadence Design Systems, Inc. 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/ArmGicLib.h>
> > +#include <Library/ArmPlatformLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/IoLib.h>
> > +#include <Library/PcdLib.h>
> > +
> > +// Initialize GICv3 to expose it as a GICv2 as UEFI does not support GICv3 yet
> > +VOID
> > +InitializeGicV3 (
> > + VOID
> > + );
> > +
> > +/**
> > + Initialize the Secure peripherals and memory regions
> > +
> > + If Trustzone is supported by your platform then this function makes the required initialization
> > + of the secure peripherals and memory regions.
> > +
> > +**/
> > +VOID
> > +ArmPlatformSecTrustzoneInit (
> > + IN UINTN MpId
> > + )
> > +{
> > + // No TZPC or TZASC on RTSM to initialize
> > +}
> > +
> > +/**
> > + Initialize controllers that must setup at the early stage
> > +
> > + Some peripherals must be initialized in Secure World.
> > + For example, some L2x0 requires to be initialized in Secure World
> > +
> > +**/
> > +RETURN_STATUS
> > +ArmPlatformSecInitialize (
> > + IN UINTN MpId
> > + )
> > +{
> > + // If it is not the primary core then there is nothing to do
> > + if (!ArmPlatformIsPrimaryCore (MpId)) {
> > + return RETURN_SUCCESS;
> > + }
> > +
> > + InitializeGicV3 ();
> > +
> > + return RETURN_SUCCESS;
> > +}
> > +
> > +/**
> > + Call before jumping to Normal World
> > +
> > + This function allows the firmware platform to do extra actions before
> > + jumping to the Normal World
> > +
> > +**/
> > +VOID
> > +ArmPlatformSecExtraAction (
> > + IN UINTN MpId,
> > + OUT UINTN* JumpAddress
> > + )
> > +{
> > + *JumpAddress = PcdGet64 (PcdFvBaseAddress);
> > +}
> > --
> > 2.2.2
> >
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
next prev parent reply other threads:[~2017-06-05 17:18 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-05 10:50 [staging/cadence-aarch64 PATCH v2 0/6] CadencePkg: Add package for Cadence hardware IP support Scott Telford
2017-06-05 10:50 ` [staging/cadence-aarch64 PATCH v2 1/6] CadencePkg: Add libraries for Cadence CSP platform Scott Telford
2017-06-05 15:12 ` Ard Biesheuvel
2017-06-05 17:19 ` Leif Lindholm [this message]
2017-06-22 9:24 ` Scott Telford
2017-06-05 17:11 ` Leif Lindholm
2017-06-22 9:24 ` Scott Telford
2017-06-05 10:50 ` [staging/cadence-aarch64 PATCH v2 2/6] CadencePkg: Add library for Cadence UART Scott Telford
2017-06-06 10:00 ` Leif Lindholm
2017-06-05 10:50 ` [staging/cadence-aarch64 PATCH v2 3/6] CadencePkg: Add PCI host bridge library for Cadence PCIe Root Complex Scott Telford
2017-06-05 15:25 ` Ard Biesheuvel
2017-06-22 9:24 ` Scott Telford
2017-06-05 17:08 ` Leif Lindholm
2017-06-05 10:50 ` [staging/cadence-aarch64 PATCH v2 4/6] CadencePkg: Add SEC phase implementation for Cadence CSP platform Scott Telford
2017-06-06 10:52 ` Leif Lindholm
2017-06-22 9:24 ` Scott Telford
2017-06-05 10:50 ` [staging/cadence-aarch64 PATCH v2 5/6] CadencePkg: Add ACPI tables " Scott Telford
2017-06-05 15:40 ` Ard Biesheuvel
2017-06-06 11:11 ` Leif Lindholm
2017-06-22 9:25 ` Scott Telford
2017-06-22 9:26 ` Scott Telford
2017-06-05 10:50 ` [staging/cadence-aarch64 PATCH v2 6/6] CadencePkg: Add .dsc, .fdf and .dec files " Scott Telford
2017-06-06 11:37 ` Leif Lindholm
2017-06-22 9:26 ` Scott Telford
2017-06-29 16:15 ` Leif Lindholm
2017-07-19 16:06 ` Scott Telford
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170605171918.GU7556@bivouac.eciton.net \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox