/** @file
Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Module Name:
ClockControl.c
Abstract:
Sets platform/SKU specific clock routing information.
--*/
#include "PlatformDxe.h"
#include
//
// Default clock routing informtion (All On)
//
EFI_CLOCK_PLATFORM_INFO mDefClockPolicy = {NULL, 0, NULL, 0, NULL, 0};
//
// Clock Settings
//
// Static clock table.
// This should be used to define any clock settings that are static
// (Always On or Always Off). Dynamic clocks should be set to enabled
// in this table.
//
EFI_STATIC_SIGNALS mAtxStaticClocks[] = {
{SrcClk8, Enabled, All},
{SrcClk7, Enabled, All},
{SrcClk6, Enabled, All},
{SrcClk5, Enabled, All},
{SrcClk4, Enabled, All},
{SrcClk3, Enabled, All},
{SrcClk2, Enabled, All},
{SrcClk1, Enabled, All},
{SrcClk0, Enabled, All},
{Ref0, Enabled, All},
{Dot96, Enabled, All},
{Usb48, Enabled, All},
{PciClkF5, Enabled, All},
{PciClk0, Enabled, All},
{PciClk2, Enabled, All},
{PciClk3, Enabled, All},
{PciClk4, Disabled, All},
{Cr_B, EnabledWithSwitch, All},
};
//
// ClockSxInfo Table
// This is a list of clocks that need to be set to a known state when the
// system enters S4 or S5.
//
EFI_STATIC_SIGNALS mAtxSxClocks[] = {
{SaveClockConfiguration, Disabled, All}
};
//
// ATX settings structure
//
EFI_CLOCK_PLATFORM_INFO mAtxClockSettings = {
mAtxStaticClocks,
sizeof(mAtxStaticClocks) / sizeof(mAtxStaticClocks[0]),
mAtxSxClocks,
sizeof(mAtxSxClocks) / sizeof(mAtxSxClocks[0])
};
VOID
InitializeClockRouting(
)
{
EFI_STATUS Status;
UINTN BoardIdVarSize;
EFI_BOARD_FEATURES BoardIdVar;
EFI_CLOCK_PLATFORM_INFO *ClockPolicy;
EFI_HANDLE Handle;
ClockPolicy = &mDefClockPolicy;
//
// Do modifications based on board type
//
BoardIdVarSize = sizeof (EFI_BOARD_FEATURES);
Status = gRT->GetVariable (
BOARD_FEATURES_NAME,
&gEfiBoardFeaturesGuid,
NULL,
&BoardIdVarSize,
&BoardIdVar
);
if (!EFI_ERROR (Status)) {
//
// Isolate board type information
//
BoardIdVar = BoardIdVar & (B_BOARD_FEATURES_FORM_FACTOR_ATX |
B_BOARD_FEATURES_FORM_FACTOR_BTX |
B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX |
B_BOARD_FEATURES_FORM_FACTOR_MICRO_BTX);
if (BoardIdVar == B_BOARD_FEATURES_FORM_FACTOR_ATX ||
BoardIdVar == B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX) {
ClockPolicy = &mAtxClockSettings;
}
}
Handle = NULL;
Status = gBS->InstallProtocolInterface (
&Handle,
&gEfiCk505ClockPlatformInfoGuid,
EFI_NATIVE_INTERFACE,
ClockPolicy
);
ASSERT_EFI_ERROR(Status);
}