/** @file
PCH SMM private lib.
Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
/**
Set InSmm.Sts bit
**/
VOID
PchSetInSmmSts (
VOID
)
{
UINT32 Data32;
///
/// Read memory location FED30880h OR with 00000001h, place the result in EAX,
/// and write data to lower 32 bits of MSR 1FEh (sample code available)
///
Data32 = MmioRead32 (0xFED30880);
AsmWriteMsr32 (MSR_SPCL_CHIPSET_USAGE, Data32 | BIT0);
///
/// Read FED30880h back to ensure the setting went through.
///
Data32 = MmioRead32 (0xFED30880);
}
/**
Clear InSmm.Sts bit
**/
VOID
PchClearInSmmSts (
VOID
)
{
UINT32 Data32;
///
/// Read memory location FED30880h AND with FFFFFFFEh, place the result in EAX,
/// and write data to lower 32 bits of MSR 1FEh (sample code available)
///
Data32 = MmioRead32 (0xFED30880);
AsmWriteMsr32 (MSR_SPCL_CHIPSET_USAGE, Data32 & (UINT32) (~BIT0));
///
/// Read FED30880h back to ensure the setting went through.
///
Data32 = MmioRead32 (0xFED30880);
}