/** @file
ARM implementation of architecture specific routines related to
PersistAcrossReset capsules
Copyright (c) 2018, Linaro, Ltd. All rights reserved.
Copyright (c) 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "CapsuleService.h"
/**
Whether the platform supports capsules that persist across reset. Note that
some platforms only support such capsules at boot time.
@return TRUE if a PersistAcrossReset capsule may be passed to UpdateCapsule()
at this time
FALSE otherwise
**/
BOOLEAN
IsPersistAcrossResetCapsuleSupported (
VOID
)
{
//
// ARM requires the capsule payload to be cleaned to the point of coherency
// (PoC), but only permits doing so using cache maintenance instructions that
// operate on virtual addresses. Since at runtime, we don't know the virtual
// addresses of the data structures that make up the scatter/gather list, we
// cannot perform the maintenance, and all we can do is give up.
//
return FeaturePcdGet (PcdSupportUpdateCapsuleReset) && !EfiAtRuntime ();
}