From 52eb643d0785a19c7f1c107d390c7bb52a79789e Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Mon, 22 Jul 2024 12:49:19 +0200 Subject: ArmVirtPkg/ArmVirtQemu: Switch to generic ResetSystemLib Retire the special ResetSystemLib implementation for the PEI phase on virtual platforms, which has been superseded by the generic version combined with a PEI-compatible implementation of ArmMonitorLib. Signed-off-by: Ard Biesheuvel --- ArmVirtPkg/ArmVirtQemu.dsc | 8 +- .../ArmVirtPsciResetSystemPeiLib.c | 240 --------------------- .../ArmVirtPsciResetSystemPeiLib.inf | 40 ---- 3 files changed, 3 insertions(+), 285 deletions(-) delete mode 100644 ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.c delete mode 100644 ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.inf (limited to 'ArmVirtPkg') diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 6a0e99bc64..942a602706 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -104,8 +104,9 @@ ArmVirtMemInfoLib|ArmVirtPkg/Library/QemuVirtMemInfoLib/QemuVirtMemInfoPeiLib.inf !if $(TPM2_ENABLE) == TRUE + ArmMonitorLib|ArmVirtPkg/Library/ArmVirtQemuMonitorPeiLib/ArmVirtQemuMonitorPeiLib.inf BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf - ResetSystemLib|MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf + FdtLib|MdePkg/Library/BaseFdtLib/BaseFdtLib.inf Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.inf !endif @@ -355,10 +356,7 @@ PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf } - MdeModulePkg/Universal/ResetSystemPei/ResetSystemPei.inf { - - ResetSystemLib|ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.inf - } + MdeModulePkg/Universal/ResetSystemPei/ResetSystemPei.inf OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf { diff --git a/ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.c b/ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.c deleted file mode 100644 index dffc1fb979..0000000000 --- a/ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.c +++ /dev/null @@ -1,240 +0,0 @@ -/** @file - Reset System lib using PSCI hypervisor or secure monitor calls - - Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
- Copyright (c) 2013, ARM Ltd. All rights reserved.
- Copyright (c) 2014-2020, Linaro Ltd. All rights reserved.
- Copyright (c) 2019, Intel Corporation. All rights reserved.
- - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -typedef enum { - PsciMethodUnknown, - PsciMethodSmc, - PsciMethodHvc, -} PSCI_METHOD; - -STATIC -PSCI_METHOD -DiscoverPsciMethod ( - VOID - ) -{ - VOID *DeviceTreeBase; - INT32 Node, Prev; - INT32 Len; - CONST CHAR8 *Compatible; - CONST CHAR8 *CompatibleItem; - CONST VOID *Prop; - - DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress); - ASSERT (fdt_check_header (DeviceTreeBase) == 0); - - // - // Enumerate all FDT nodes looking for the PSCI node and capture the method - // - for (Prev = 0; ; Prev = Node) { - Node = fdt_next_node (DeviceTreeBase, Prev, NULL); - if (Node < 0) { - break; - } - - Compatible = fdt_getprop (DeviceTreeBase, Node, "compatible", &Len); - if (Compatible == NULL) { - continue; - } - - // - // Iterate over the NULL-separated items in the compatible string - // - for (CompatibleItem = Compatible; CompatibleItem < Compatible + Len; - CompatibleItem += 1 + AsciiStrLen (CompatibleItem)) - { - if (AsciiStrCmp (CompatibleItem, "arm,psci-0.2") != 0) { - continue; - } - - Prop = fdt_getprop (DeviceTreeBase, Node, "method", NULL); - if (!Prop) { - DEBUG (( - DEBUG_ERROR, - "%a: Missing PSCI method property\n", - __func__ - )); - return PsciMethodUnknown; - } - - if (AsciiStrnCmp (Prop, "hvc", 3) == 0) { - return PsciMethodHvc; - } else if (AsciiStrnCmp (Prop, "smc", 3) == 0) { - return PsciMethodSmc; - } else { - DEBUG (( - DEBUG_ERROR, - "%a: Unknown PSCI method \"%a\"\n", - __func__, - Prop - )); - return PsciMethodUnknown; - } - } - } - - return PsciMethodUnknown; -} - -STATIC -VOID -PerformPsciAction ( - IN UINTN Arg0 - ) -{ - ARM_SMC_ARGS ArmSmcArgs; - ARM_HVC_ARGS ArmHvcArgs; - - ArmSmcArgs.Arg0 = Arg0; - ArmHvcArgs.Arg0 = Arg0; - - switch (DiscoverPsciMethod ()) { - case PsciMethodHvc: - ArmCallHvc (&ArmHvcArgs); - break; - - case PsciMethodSmc: - ArmCallSmc (&ArmSmcArgs); - break; - - default: - DEBUG ((DEBUG_ERROR, "%a: no PSCI method defined\n", __func__)); - ASSERT (FALSE); - } -} - -/** - This function causes a system-wide reset (cold reset), in which - all circuitry within the system returns to its initial state. This type of reset - is asynchronous to system operation and operates without regard to - cycle boundaries. - - If this function returns, it means that the system does not support cold reset. -**/ -VOID -EFIAPI -ResetCold ( - VOID - ) -{ - // Send a PSCI 0.2 SYSTEM_RESET command - PerformPsciAction (ARM_SMC_ID_PSCI_SYSTEM_RESET); -} - -/** - This function causes a system-wide initialization (warm reset), in which all processors - are set to their initial state. Pending cycles are not corrupted. - - If this function returns, it means that the system does not support warm reset. -**/ -VOID -EFIAPI -ResetWarm ( - VOID - ) -{ - // Map a warm reset into a cold reset - ResetCold (); -} - -/** - This function causes the system to enter a power state equivalent - to the ACPI G2/S5 or G3 states. - - If this function returns, it means that the system does not support shutdown reset. -**/ -VOID -EFIAPI -ResetShutdown ( - VOID - ) -{ - // Send a PSCI 0.2 SYSTEM_OFF command - PerformPsciAction (ARM_SMC_ID_PSCI_SYSTEM_OFF); -} - -/** - This function causes a systemwide reset. The exact type of the reset is - defined by the EFI_GUID that follows the Null-terminated Unicode string passed - into ResetData. If the platform does not recognize the EFI_GUID in ResetData - the platform must pick a supported reset type to perform.The platform may - optionally log the parameters from any non-normal reset that occurs. - - @param[in] DataSize The size, in bytes, of ResetData. - @param[in] ResetData The data buffer starts with a Null-terminated string, - followed by the EFI_GUID. -**/ -VOID -EFIAPI -ResetPlatformSpecific ( - IN UINTN DataSize, - IN VOID *ResetData - ) -{ - // Map the platform specific reset as reboot - ResetCold (); -} - -/** - The ResetSystem function resets the entire platform. - - @param[in] ResetType The type of reset to perform. - @param[in] ResetStatus The status code for the reset. - @param[in] DataSize The size, in bytes, of ResetData. - @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown - the data buffer starts with a Null-terminated string, optionally - followed by additional binary data. The string is a description - that the caller may use to further indicate the reason for the - system reset. -**/ -VOID -EFIAPI -ResetSystem ( - IN EFI_RESET_TYPE ResetType, - IN EFI_STATUS ResetStatus, - IN UINTN DataSize, - IN VOID *ResetData OPTIONAL - ) -{ - switch (ResetType) { - case EfiResetWarm: - ResetWarm (); - break; - - case EfiResetCold: - ResetCold (); - break; - - case EfiResetShutdown: - ResetShutdown (); - return; - - case EfiResetPlatformSpecific: - ResetPlatformSpecific (DataSize, ResetData); - return; - - default: - return; - } -} diff --git a/ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.inf b/ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.inf deleted file mode 100644 index 79217d296d..0000000000 --- a/ArmVirtPkg/Library/ArmVirtPsciResetSystemPeiLib/ArmVirtPsciResetSystemPeiLib.inf +++ /dev/null @@ -1,40 +0,0 @@ -#/** @file -# Reset System lib using PSCI hypervisor or secure monitor calls -# -# Copyright (c) 2008, Apple Inc. All rights reserved.
-# Copyright (c) 2014-2020, Linaro Ltd. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -# -#**/ - -[Defines] - INF_VERSION = 1.27 - BASE_NAME = ArmVirtPsciResetSystemPeiLib - FILE_GUID = 551cfb98-c185-41a3-86bf-8cdb7e2a530c - MODULE_TYPE = BASE - VERSION_STRING = 1.0 - LIBRARY_CLASS = ResetSystemLib|PEIM - -[Sources] - ArmVirtPsciResetSystemPeiLib.c - -[Packages] - ArmPkg/ArmPkg.dec - ArmVirtPkg/ArmVirtPkg.dec - EmbeddedPkg/EmbeddedPkg.dec - MdeModulePkg/MdeModulePkg.dec - MdePkg/MdePkg.dec - OvmfPkg/OvmfPkg.dec - -[LibraryClasses] - ArmSmcLib - ArmHvcLib - BaseLib - DebugLib - FdtLib - HobLib - -[Pcd] - gUefiOvmfPkgTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress -- cgit