/** @file Support ResetSystem Runtime call using PSCI calls Note: A similar library is implemented in ArmVirtPkg/Library/ArmVirtualizationPsciResetSystemLib So similar issues might exist in this implementation too. Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
Copyright (c) 2013-2015, ARM Ltd. All rights reserved.
Copyright (c) 2014, Linaro Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include /** 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 ) { ARM_SMC_ARGS ArmSmcArgs; switch (ResetType) { case EfiResetPlatformSpecific: // Map the platform specific reset as reboot case EfiResetWarm: // Map a warm reset into a cold reset case EfiResetCold: // Send a PSCI 0.2 SYSTEM_RESET command ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_RESET; break; case EfiResetShutdown: // Send a PSCI 0.2 SYSTEM_OFF command ArmSmcArgs.Arg0 = ARM_SMC_ID_PSCI_SYSTEM_OFF; break; default: ASSERT (FALSE); return EFI_UNSUPPORTED; } ArmCallSmc (&ArmSmcArgs); // We should never be here DEBUG ((EFI_D_ERROR, "%a: PSCI Reset failed\n", __FUNCTION__)); CpuDeadLoop (); 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; }