@@ -42,6 +42,9 @@
gAmdStyxTokenSpaceGuid = { 0x220d9653, 0x4a0e, 0x40bc, { 0xb3, 0x65, 0x2f, 0xbb, 0xa2, 0xd9, 0x03, 0x45 } }
gAmdStyxMpCoreInfoGuid = { 0x68efeabd, 0xcb77, 0x4aa5, { 0xbf, 0x0c, 0xa3, 0x31, 0xfc, 0xcf, 0x76, 0x66 } }
+ # used to manually order the dispatch of FdtDxe after AcpiPlatformDxe
+ gAmdStyxAcpiPlatformDxeFileGuid = { 0xf229c831, 0x6a35, 0x440b, { 0x9c, 0x84, 0xdd, 0x3b, 0xc7, 0x1e, 0x38, 0x65 } }
+
[PcdsDynamic]
gAmdStyxTokenSpaceGuid.PcdSocCoreCount|1|UINT32|0x00000100
gAmdStyxTokenSpaceGuid.PcdSocCpuId|1|UINT32|0x00000101
@@ -26,6 +26,7 @@
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DebugLib.h>
+#include <AcpiPlatformParkingProtocol.h>
#define MAX_ACPI_TABLES 12
@@ -55,6 +56,12 @@ AcpiPlatformEntryPoint (
UINTN TableHandle;
UINTN TableIndex;
+ // Move secondary cores to a Pen compliant with MP-Parking protocol
+ if (!FixedPcdGetBool (PcdPsciOsSupport) &&
+ FixedPcdGetBool (PcdTrustedFWSupport)) {
+ AmdStyxParkSecondaryCores();
+ }
+
ZeroMem(AcpiTableList, sizeof(AcpiTableList));
TableIndex = 0;
@@ -28,10 +28,15 @@
[Sources]
AcpiPlatform.c
+ AcpiPlatformParkingProtocol.c
+
+[Sources.AARCH64]
+ AcpiPlatformParkingProtocolHelper.S
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
+ AmdModulePkg/AmdModulePkg.dec
OpenPlatformPkg/Platforms/AMD/Styx/AmdStyx.dec
[LibraryClasses]
@@ -44,10 +49,18 @@
UefiDriverEntryPoint
AmdStyxHelperLib
AmdStyxAcpiLib
+ ArmSmcLib
+ CacheMaintenanceLib
+
+[FixedPcd]
+ gAmdStyxTokenSpaceGuid.PcdParkingProtocolVersion
+ gAmdStyxTokenSpaceGuid.PcdParkingProtocolBase
+ gAmdStyxTokenSpaceGuid.PcdParkingProtocolSize
+ gAmdStyxTokenSpaceGuid.PcdPsciOsSupport
+ gAmdStyxTokenSpaceGuid.PcdTrustedFWSupport
[Protocols]
gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
[Depex]
gEfiAcpiTableProtocolGuid
-
similarity index 91%
rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/AArch64/BdsLinuxLoader.c
rename to Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformParkingProtocol.c
@@ -2,6 +2,7 @@
*
* Copyright (c) 2011-2014, ARM Limited. All rights reserved.<BR>
* Copyright (c) 2014 - 2015, AMD Inc. All rights reserved.<BR>
+* Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
*
* This program and the accompanying materials
* are licensed and made available under the terms and conditions of the BSD License
@@ -18,11 +19,11 @@
**/
+#include <Base.h>
+#include <Library/ArmLib.h>
#include <Library/ArmSmcLib.h>
#include <Library/CacheMaintenanceLib.h>
#include <Library/PcdLib.h>
-#include <Base.h>
-#include <BdsLib/BdsInternal.h>
#include <Common/CoreState.h>
#include <IndustryStandard/ArmStdSmc.h>
@@ -67,7 +68,7 @@ AmdStyxBringupSecondary (
VOID
EFIAPI
-AmdStyxParkSecondaryCores(
+AmdStyxParkSecondaryCores (
VOID
)
{
@@ -104,11 +105,7 @@ AmdStyxParkSecondaryCores(
// Reserve the memory as RuntimeServices
Status = gBS->AllocatePages (AllocateAddress, EfiRuntimeServicesCode,
EFI_SIZE_TO_PAGES (MpParkingSize ), &MpParkingBase );
- if (EFI_ERROR (Status)) {
- Print (L"Warning: Failed to reserve memory for MP-Parking protocol at 0x%lX, Status = %r\n",
- MpParkingBase, Status);
- // Even if there is a risk of memory corruption we carry on
- }
+ ASSERT_EFI_ERROR (Status);
// Relocate the Pen code
CopyMem ((VOID*)(PenBase), (VOID*)&SecondariesPenStart, PenSize);
new file mode 100644
@@ -0,0 +1,19 @@
+/** @file
+*
+* Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
+*
+* 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.
+*
+**/
+
+VOID
+EFIAPI
+AmdStyxParkSecondaryCores (
+ VOID
+ );
similarity index 100%
rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/AArch64/BdsLinuxLoaderHelper.S
rename to Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformParkingProtocolHelper.S
@@ -117,11 +117,6 @@ FdtReadyToBoot (
UINTN FdtBlobSize = 0;
EFI_DEVICE_PATH *FdtDevicePath;
- // Move secondary cores to a Pen complaint with MP-Parking protocol
- if (!FixedPcdGetBool (PcdPsciOsSupport) && FixedPcdGetBool (PcdTrustedFWSupport)) {
- AmdStyxParkSecondaryCores();
- }
-
// Search for FDT blob in EFI partition
Status = FdtOverrideDevicePath(L"fdt.dtb", &FdtDevicePath);
if (!EFI_ERROR (Status)) {
@@ -32,10 +32,6 @@
BdsLinuxFdt.c
LinuxLoaderHelper.c
-[Sources.AARCH64]
- AArch64/BdsLinuxLoader.c
- AArch64/BdsLinuxLoaderHelper.S | GCC
-
[Packages]
ArmPkg/ArmPkg.dec
EmbeddedPkg/EmbeddedPkg.dec
@@ -78,8 +74,6 @@
gArmTokenSpaceGuid.PcdArmLinuxFdtAlignment
gAmdStyxTokenSpaceGuid.PcdPsciOsSupport
gAmdStyxTokenSpaceGuid.PcdTrustedFWSupport
- gAmdStyxTokenSpaceGuid.PcdParkingProtocolBase
- gAmdStyxTokenSpaceGuid.PcdParkingProtocolSize
[Depex]
- TRUE
+ AFTER gAmdStyxAcpiPlatformDxeFileGuid
Since ACPI is mandatory on ARM 64-bit servers while FDT support is optional, it makes sense to move shared functionality to the ACPI driver. So move the parking protocol code to AcpiPlatformDxe. This way, we can [conditionally] remove FdtDxe from the build without affecting ACPI parking protocol functionality. Note that this requires the dispatch of FdtDxe to be strictly order after the dispatch of ApciPlatformDxe, so update the FdtDxe Depex expression as well. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/AMD/Styx/AmdStyx.dec | 3 +++ Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatform.c | 7 +++++++ Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf | 15 ++++++++++++++- Platforms/AMD/Styx/{OverdriveBoard/FdtDxe/AArch64/BdsLinuxLoader.c => Drivers/AcpiPlatformDxe/AcpiPlatformParkingProtocol.c} | 13 +++++-------- Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformParkingProtocol.h | 19 +++++++++++++++++++ Platforms/AMD/Styx/{OverdriveBoard/FdtDxe/AArch64/BdsLinuxLoaderHelper.S => Drivers/AcpiPlatformDxe/AcpiPlatformParkingProtocolHelper.S} | 0 Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.c | 5 ----- Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf | 8 +------- 8 files changed, 49 insertions(+), 21 deletions(-)