497 lines
22 KiB
C
497 lines
22 KiB
C
/** @file
|
|
|
|
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
|
|
|
|
|
This program and the accompanying materials are licensed and made available under
|
|
|
|
the terms and conditions of the BSD License that accompanies this distribution.
|
|
|
|
The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.php.
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
|
|
PchPlatformPolicy.c
|
|
|
|
Abstract:
|
|
|
|
|
|
--*/
|
|
|
|
#include "PlatformDxe.h"
|
|
#include <Protocol/PchPlatformPolicy.h>
|
|
#include <Protocol/VlvPlatformPolicy.h>
|
|
#include <Library/PchPlatformLib.h>
|
|
|
|
#include "AzaliaVerbTable.h"
|
|
#include "Protocol/GlobalNvsArea.h"
|
|
#include "Protocol/DxePchPolicyUpdateProtocol.h"
|
|
|
|
#define MOBILE_PLATFORM 1
|
|
#define DESKTOP_PLATFORM 2
|
|
|
|
EFI_GUID gDxePchPolicyUpdateProtocolGuid = DXE_PCH_POLICY_UPDATE_PROTOCOL_GUID;
|
|
DXE_PCH_POLICY_UPDATE_PROTOCOL mDxePchPolicyUpdate = { 0 };
|
|
|
|
/**
|
|
|
|
Updates the feature policies according to the setup variable.
|
|
|
|
@retval VOID
|
|
|
|
**/
|
|
VOID
|
|
InitPchPlatformPolicy (
|
|
IN EFI_PLATFORM_INFO_HOB *PlatformInfo
|
|
)
|
|
{
|
|
DXE_PCH_PLATFORM_POLICY_PROTOCOL *DxePlatformPchPolicy;
|
|
EFI_STATUS Status;
|
|
EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
|
|
UINT8 PortIndex;
|
|
EFI_HANDLE Handle;
|
|
PCH_STEPPING SocStepping = PchA0;
|
|
BOOLEAN ModifyVariable;
|
|
|
|
ModifyVariable = FALSE;
|
|
DEBUG ((EFI_D_INFO, "InitPchPlatformPolicy() - Start\n"));
|
|
|
|
Status = gBS->LocateProtocol (&gDxePchPlatformPolicyProtocolGuid, NULL, (VOID **) &DxePlatformPchPolicy);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
//
|
|
// Locate the Global NVS Protocol.
|
|
//
|
|
Status = gBS->LocateProtocol (
|
|
&gEfiGlobalNvsAreaProtocolGuid,
|
|
NULL,
|
|
(VOID **) &GlobalNvsArea
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
//
|
|
// Update system information
|
|
//
|
|
DxePlatformPchPolicy->Revision = DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_12;
|
|
|
|
//
|
|
// General initialization
|
|
//
|
|
DxePlatformPchPolicy->BusNumber = 0;
|
|
|
|
//
|
|
// VLV BIOS Spec Section 3.6 Flash Security Recommendation,
|
|
// Intel strongly recommends that BIOS sets the BIOS Interface Lock Down bit. Enabling this bit
|
|
// will mitigate malicious software attempts to replace the system BIOS option ROM with its own code.
|
|
// We always enable this as a platform policy.
|
|
//
|
|
DxePlatformPchPolicy->LockDownConfig->BiosInterface = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->LockDownConfig->BiosLock = mSystemConfiguration.SpiRwProtect;
|
|
|
|
//
|
|
// DeviceEnables
|
|
//
|
|
DxePlatformPchPolicy->DeviceEnabling->Lan = mSystemConfiguration.Lan;
|
|
DxePlatformPchPolicy->DeviceEnabling->Azalia = mSystemConfiguration.PchAzalia;
|
|
DxePlatformPchPolicy->DeviceEnabling->Sata = mSystemConfiguration.Sata;
|
|
DxePlatformPchPolicy->DeviceEnabling->Smbus = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->DeviceEnabling->LpeEnabled = mSystemConfiguration.Lpe;
|
|
|
|
DxePlatformPchPolicy->UsbConfig->Ehci1Usbr = PCH_DEVICE_DISABLE;
|
|
|
|
DxePlatformPchPolicy->UsbConfig->UsbXhciLpmSupport =mSystemConfiguration.UsbXhciLpmSupport;
|
|
|
|
//
|
|
// Disable FFRD PR0 USB port2 for power saving since PR0 uses non-POR WWAN (but enable on PR0.3/PR0.5/PR1)
|
|
//
|
|
if ((PlatformInfo->BoardId == BOARD_ID_BL_FFRD) && (PlatformInfo->BoardRev == PR0))
|
|
if (mSystemConfiguration.PchUsbPort[2] !=0) {
|
|
mSystemConfiguration.PchUsbPort[2]=0;
|
|
ModifyVariable = TRUE;
|
|
}
|
|
|
|
|
|
if (ModifyVariable) {
|
|
Status = gRT->SetVariable (
|
|
NORMAL_SETUP_NAME,
|
|
&gEfiNormalSetupGuid,
|
|
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
|
sizeof(SYSTEM_CONFIGURATION),
|
|
&mSystemConfiguration
|
|
);
|
|
}
|
|
|
|
SocStepping = PchStepping();
|
|
if (mSystemConfiguration.UsbAutoMode == 1) { // auto mode is enabled
|
|
if (PchA0 == SocStepping) {
|
|
//
|
|
// For A0, EHCI is enabled as default.
|
|
//
|
|
mSystemConfiguration.PchUsb20 = 1;
|
|
mSystemConfiguration.PchUsb30Mode = 0;
|
|
mSystemConfiguration.UsbXhciSupport = 0;
|
|
DEBUG ((EFI_D_INFO, "EHCI is enabled as default. SOC 0x%x\n", SocStepping));
|
|
} else {
|
|
//
|
|
// For A1 and later, XHCI is enabled as default.
|
|
//
|
|
mSystemConfiguration.PchUsb20 = 0;
|
|
mSystemConfiguration.PchUsb30Mode = 1;
|
|
mSystemConfiguration.UsbXhciSupport = 1;
|
|
DEBUG ((EFI_D_INFO, "XHCI is enabled as default. SOC 0x%x\n", SocStepping));
|
|
}
|
|
//
|
|
//overwrite the setting
|
|
//
|
|
Status = gRT->SetVariable(
|
|
NORMAL_SETUP_NAME,
|
|
&gEfiNormalSetupGuid,
|
|
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
|
sizeof(SYSTEM_CONFIGURATION),
|
|
&mSystemConfiguration
|
|
);
|
|
}
|
|
|
|
//
|
|
// USB Device 29 configuration
|
|
//
|
|
DxePlatformPchPolicy->UsbConfig->Usb20Settings[0].Enable = mSystemConfiguration.PchUsb20;
|
|
DxePlatformPchPolicy->UsbConfig->UsbPerPortCtl = mSystemConfiguration.PchUsbPerPortCtl;
|
|
if (mSystemConfiguration.PchUsbPerPortCtl != PCH_DEVICE_DISABLE) {
|
|
for (PortIndex = 0; PortIndex < PCH_USB_MAX_PHYSICAL_PORTS; PortIndex++) {
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[PortIndex].Enable = mSystemConfiguration.PchUsbPort[PortIndex];
|
|
}
|
|
}
|
|
|
|
DxePlatformPchPolicy->UsbConfig->EhciDebug = mSystemConfiguration.PchEhciDebug;
|
|
|
|
//
|
|
// xHCI (USB 3.0) related settings from setup variable
|
|
//
|
|
DxePlatformPchPolicy->UsbConfig->Usb30Settings.XhciStreams = mSystemConfiguration.PchUsb30Streams;
|
|
|
|
DxePlatformPchPolicy->UsbConfig->Usb30Settings.Mode = mSystemConfiguration.PchUsb30Mode;
|
|
|
|
//
|
|
// Remove XHCI Pre-Boot Driver setup option selection from end-user view and automate loading of USB 3.0 BIOS driver based on XhciMode selection
|
|
//
|
|
switch (mSystemConfiguration.PchUsb30Mode) {
|
|
case 0: // Disabled
|
|
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 0;
|
|
break;
|
|
case 1: // Enabled
|
|
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 1;
|
|
break;
|
|
case 2: // Auto
|
|
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 0;
|
|
break;
|
|
case 3: // Smart Auto
|
|
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 1;
|
|
break;
|
|
default:
|
|
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = mSystemConfiguration.UsbXhciSupport;
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
DxePlatformPchPolicy->UsbConfig->UsbOtgSettings.Enable = mSystemConfiguration.PchUsbOtg;
|
|
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[0].Dock = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[1].Dock = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[2].Dock = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[3].Dock = PCH_DEVICE_DISABLE;
|
|
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[0].Panel = PCH_USB_FRONT_PANEL;
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[1].Panel = PCH_USB_FRONT_PANEL;
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[2].Panel = PCH_USB_BACK_PANEL;
|
|
DxePlatformPchPolicy->UsbConfig->PortSettings[3].Panel = PCH_USB_BACK_PANEL;
|
|
|
|
//
|
|
//
|
|
// Enable USB Topology control and program the topology setting for every USB port
|
|
// See Platform Design Guide for description of topologies
|
|
//
|
|
//
|
|
// Port 0: ~5.3", Port 1: ~4.9", Port 2: ~4.7", Port 3: ~8.0"
|
|
//
|
|
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[0] = 0x53;
|
|
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[1] = 0x49;
|
|
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[2] = 0x47;
|
|
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[3] = 0x80;
|
|
|
|
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[0] = PchUsbOverCurrentPin0;
|
|
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[1] = PchUsbOverCurrentPin0;
|
|
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[2] = PchUsbOverCurrentPin1;
|
|
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[3] = PchUsbOverCurrentPin1;
|
|
|
|
DxePlatformPchPolicy->UsbConfig->Usb30OverCurrentPins[0] = PchUsbOverCurrentPinSkip;//PchUsbOverCurrentPin0;
|
|
|
|
DxePlatformPchPolicy->EhciPllCfgEnable = mSystemConfiguration.EhciPllCfgEnable;
|
|
DEBUG ((EFI_D_INFO, "InitPchPlatformPolicy() DxePlatformPchPolicy->EhciPllCfgEnable = 0x%x \n",DxePlatformPchPolicy->EhciPllCfgEnable));
|
|
DxePlatformPchPolicy->PciExpressConfig->PcieDynamicGating = mSystemConfiguration.PcieDynamicGating;
|
|
for (PortIndex = 0; PortIndex < PCH_PCIE_MAX_ROOT_PORTS; PortIndex++) {
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].Enable = mSystemConfiguration.IchPciExp[PortIndex];
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SlotImplemented = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].FunctionNumber = PortIndex;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].PhysicalSlotNumber = PortIndex;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].Aspm = 4;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].PmSci = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].ExtSync = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].HotPlug = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].AdvancedErrorReporting = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].UnsupportedRequestReport = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].FatalErrorReport = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].NoFatalErrorReport = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].CorrectableErrorReport = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].PmeInterrupt = 0;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SystemErrorOnFatalError = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SystemErrorOnNonFatalError = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SystemErrorOnCorrectableError = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].CompletionTimeout = PchPciECompletionTO_Default;
|
|
}
|
|
|
|
//
|
|
// SATA configuration
|
|
//
|
|
for (PortIndex = 0; PortIndex < PCH_AHCI_MAX_PORTS; PortIndex++) {
|
|
if (mSystemConfiguration.SataType == 0) {
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->LegacyMode = PCH_DEVICE_ENABLE;
|
|
} else {
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->LegacyMode = PCH_DEVICE_DISABLE;
|
|
}
|
|
if(mSystemConfiguration.Sata == 1){
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_ENABLE;
|
|
} else {
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_DISABLE;
|
|
}
|
|
if(0 == PortIndex){
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].HotPlug = PCH_DEVICE_DISABLE;
|
|
} else if(1 == PortIndex){
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].HotPlug = PCH_DEVICE_DISABLE;
|
|
}
|
|
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].SpinUp = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].MechSw = PCH_DEVICE_DISABLE;
|
|
}
|
|
DxePlatformPchPolicy->SataConfig->RaidAlternateId = PCH_DEVICE_DISABLE;
|
|
DxePlatformPchPolicy->SataConfig->Raid0 = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->Raid1 = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->Raid10 = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->Raid5 = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->Irrt = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->OromUiBanner = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->HddUnlock = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->LedLocate = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->IrrtOnly = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->SalpSupport = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->SataConfig->TestMode = mSystemConfiguration.SataTestMode;
|
|
|
|
//
|
|
// AzaliaConfig
|
|
//
|
|
DxePlatformPchPolicy->AzaliaConfig->Pme = mSystemConfiguration.AzaliaPme;
|
|
DxePlatformPchPolicy->AzaliaConfig->HdmiCodec = mSystemConfiguration.HdmiCodec;
|
|
DxePlatformPchPolicy->AzaliaConfig->DS = mSystemConfiguration.AzaliaDs;
|
|
DxePlatformPchPolicy->AzaliaConfig->AzaliaVCi = mSystemConfiguration.AzaliaVCiEnable;
|
|
|
|
//
|
|
// Set LPSS configuration according to setup value.
|
|
//
|
|
DxePlatformPchPolicy->LpssConfig->LpssPciModeEnabled = mSystemConfiguration.LpssPciModeEnabled;
|
|
|
|
DxePlatformPchPolicy->LpssConfig->Dma1Enabled = mSystemConfiguration.LpssDma1Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->I2C0Enabled = mSystemConfiguration.LpssI2C0Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->I2C1Enabled = mSystemConfiguration.LpssI2C1Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->I2C2Enabled = mSystemConfiguration.LpssI2C2Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->I2C3Enabled = mSystemConfiguration.LpssI2C3Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->I2C4Enabled = mSystemConfiguration.LpssI2C4Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->I2C5Enabled = mSystemConfiguration.LpssI2C5Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->I2C6Enabled = mSystemConfiguration.LpssI2C6Enabled;
|
|
|
|
DxePlatformPchPolicy->LpssConfig->Dma0Enabled = mSystemConfiguration.LpssDma0Enabled;;
|
|
DxePlatformPchPolicy->LpssConfig->Pwm0Enabled = mSystemConfiguration.LpssPwm0Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->Pwm1Enabled = mSystemConfiguration.LpssPwm1Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->Hsuart0Enabled = mSystemConfiguration.LpssHsuart0Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->Hsuart1Enabled = mSystemConfiguration.LpssHsuart1Enabled;
|
|
DxePlatformPchPolicy->LpssConfig->SpiEnabled = mSystemConfiguration.LpssSpiEnabled;
|
|
|
|
//
|
|
// Set SCC configuration according to setup value.
|
|
//
|
|
DxePlatformPchPolicy->SccConfig->SdioEnabled = mSystemConfiguration.LpssSdioEnabled;
|
|
DxePlatformPchPolicy->SccConfig->SdcardEnabled = TRUE;
|
|
DxePlatformPchPolicy->SccConfig->SdCardSDR25Enabled = mSystemConfiguration.LpssSdCardSDR25Enabled;
|
|
DxePlatformPchPolicy->SccConfig->SdCardDDR50Enabled = mSystemConfiguration.LpssSdCardDDR50Enabled;
|
|
DxePlatformPchPolicy->SccConfig->HsiEnabled = mSystemConfiguration.LpssMipiHsi;
|
|
|
|
if (mSystemConfiguration.eMMCBootMode== 1) {// Auto detection mode
|
|
//
|
|
// Silicon Stepping
|
|
//
|
|
switch (PchStepping()) {
|
|
case PchA0: // A0 and A1
|
|
case PchA1:
|
|
DEBUG ((EFI_D_ERROR, "Auto Detect: SOC A0/A1: SCC eMMC 4.41 Configuration\n"));
|
|
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 1;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = 0;
|
|
break;
|
|
case PchB0: // B0 and later
|
|
default:
|
|
DEBUG ((EFI_D_ERROR, "Auto Detect: SOC B0 and later: SCC eMMC 4.5 Configuration\n"));
|
|
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = mSystemConfiguration.LpsseMMC45Enabled;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = mSystemConfiguration.LpsseMMC45DDR50Enabled;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = mSystemConfiguration.LpsseMMC45HS200Enabled;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = mSystemConfiguration.LpsseMMC45RetuneTimerValue;
|
|
break;
|
|
}
|
|
} else if (mSystemConfiguration.eMMCBootMode == 2) { // eMMC 4.41
|
|
DEBUG ((EFI_D_ERROR, "Force to SCC eMMC 4.41 Configuration\n"));
|
|
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 1;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = 0;
|
|
|
|
} else if (mSystemConfiguration.eMMCBootMode == 3) { // eMMC 4.5
|
|
DEBUG ((EFI_D_ERROR, "Force to eMMC 4.5 Configuration\n"));
|
|
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = mSystemConfiguration.LpsseMMC45Enabled;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = mSystemConfiguration.LpsseMMC45DDR50Enabled;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = mSystemConfiguration.LpsseMMC45HS200Enabled;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = mSystemConfiguration.LpsseMMC45RetuneTimerValue;
|
|
|
|
} else { // Disable eMMC controllers
|
|
DEBUG ((EFI_D_ERROR, "Disable eMMC controllers\n"));
|
|
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = 0;
|
|
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = 0;
|
|
}
|
|
|
|
//
|
|
// Reserved SMBus Address
|
|
//
|
|
DxePlatformPchPolicy->SmbusConfig->NumRsvdSmbusAddresses = 4;
|
|
DxePlatformPchPolicy->SmbusConfig->RsvdSmbusAddressTable = mSmbusRsvdAddresses;
|
|
|
|
//
|
|
// MiscPm Configuration
|
|
//
|
|
DxePlatformPchPolicy->MiscPmConfig->WakeConfig.WolEnableOverride = mSystemConfiguration.WakeOnLanS5;
|
|
DxePlatformPchPolicy->MiscPmConfig->SlpLanLowDc = mSystemConfiguration.SlpLanLowDc;
|
|
DxePlatformPchPolicy->MiscPmConfig->PowerResetStatusClear.MeWakeSts = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->MiscPmConfig->PowerResetStatusClear.MeHrstColdSts = PCH_DEVICE_ENABLE;
|
|
DxePlatformPchPolicy->MiscPmConfig->PowerResetStatusClear.MeHrstWarmSts = PCH_DEVICE_ENABLE;
|
|
|
|
//
|
|
// Enable / disable serial IRQ according to setup value.
|
|
//
|
|
DxePlatformPchPolicy->SerialIrqConfig->SirqEnable = PCH_DEVICE_ENABLE;
|
|
|
|
//
|
|
// Set Serial IRQ Mode Select according to setup value.
|
|
//
|
|
DxePlatformPchPolicy->SerialIrqConfig->SirqMode = PchQuietMode;
|
|
|
|
//
|
|
// Program the default Sub System Vendor Device Id
|
|
//
|
|
DxePlatformPchPolicy->DefaultSvidSid->SubSystemVendorId = V_PCH_INTEL_VENDOR_ID;
|
|
DxePlatformPchPolicy->DefaultSvidSid->SubSystemId = V_PCH_DEFAULT_SID;
|
|
|
|
mAzaliaVerbTable[9].VerbTableData = mAzaliaVerbTableData12;
|
|
|
|
DxePlatformPchPolicy->AzaliaConfig->AzaliaVerbTableNum = sizeof (mAzaliaVerbTable) / sizeof (PCH_AZALIA_VERB_TABLE);
|
|
DxePlatformPchPolicy->AzaliaConfig->AzaliaVerbTable = mAzaliaVerbTable;
|
|
DxePlatformPchPolicy->AzaliaConfig->ResetWaitTimer = 300;
|
|
|
|
DxePlatformPchPolicy->IdleReserve = mSystemConfiguration.IdleReserve;
|
|
DxePlatformPchPolicy->AcpiHWRed = PCH_DEVICE_DISABLE;
|
|
|
|
//
|
|
// Install DxePchPolicyUpdateProtocol
|
|
//
|
|
Handle = NULL;
|
|
|
|
mDxePchPolicyUpdate.Revision = DXE_PCH_POLICY_UPDATE_PROTOCOL_REVISION_1;
|
|
|
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
|
&Handle,
|
|
&gDxePchPolicyUpdateProtocolGuid,
|
|
&mDxePchPolicyUpdate,
|
|
NULL
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
DEBUG ((EFI_D_INFO, "InitPchPlatformPolicy() - End\n"));
|
|
}
|
|
|
|
|
|
DXE_VLV_PLATFORM_POLICY_PROTOCOL mDxePlatformVlvPolicy;
|
|
|
|
VOID
|
|
InitVlvPlatformPolicy (
|
|
)
|
|
{
|
|
DXE_VLV_PLATFORM_POLICY_PROTOCOL *DxePlatformVlvPolicy;
|
|
EFI_STATUS Status;
|
|
EFI_HANDLE Handle;
|
|
|
|
ZeroMem (&mDxePlatformVlvPolicy, sizeof(DXE_VLV_PLATFORM_POLICY_PROTOCOL));
|
|
|
|
DxePlatformVlvPolicy = &mDxePlatformVlvPolicy;
|
|
|
|
|
|
DxePlatformVlvPolicy->GraphicReserve00 = mSystemConfiguration.GraphicReserve00;
|
|
DxePlatformVlvPolicy->PavpMode = mSystemConfiguration.PavpMode;
|
|
DxePlatformVlvPolicy->GraphicReserve01 = 1;
|
|
DxePlatformVlvPolicy->GraphicReserve02 = mSystemConfiguration.GraphicReserve02;
|
|
DxePlatformVlvPolicy->GraphicReserve03 = 1;
|
|
DxePlatformVlvPolicy->GraphicReserve04 = 0;
|
|
DxePlatformVlvPolicy->GraphicReserve05 = mSystemConfiguration.GraphicReserve05;
|
|
DxePlatformVlvPolicy->IgdPanelFeatures.PFITStatus = mSystemConfiguration.PanelScaling;
|
|
|
|
DxePlatformVlvPolicy->IgdPanelFeatures.LidStatus = 1;
|
|
DxePlatformVlvPolicy->IdleReserve = mSystemConfiguration.IdleReserve;
|
|
|
|
DxePlatformVlvPolicy->GraphicReserve06 = 1;
|
|
|
|
if ( (mSystemConfiguration.Lpe == 1) || mSystemConfiguration.Lpe == 2) {
|
|
DxePlatformVlvPolicy ->AudioTypeSupport = LPE_AUDIO ;
|
|
} else if ( mSystemConfiguration.PchAzalia == 1 ) {
|
|
DxePlatformVlvPolicy ->AudioTypeSupport = HD_AUDIO;
|
|
} else {
|
|
DxePlatformVlvPolicy ->AudioTypeSupport = NO_AUDIO;
|
|
}
|
|
|
|
Handle = NULL;
|
|
Status = gBS->InstallProtocolInterface (
|
|
&Handle,
|
|
&gDxeVlvPlatformPolicyGuid,
|
|
EFI_NATIVE_INTERFACE,
|
|
DxePlatformVlvPolicy
|
|
);
|
|
ASSERT_EFI_ERROR(Status);
|
|
|
|
}
|