]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.c
Add code to protect the whole BIOS region on SPI flash, except UEFI Variable region.
[mirror_edk2.git] / Vlv2TbltDevicePkg / PpmPolicy / PpmPolicy.c
CommitLineData
3cbfba02
DW
1/** \r
2 Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
3 This program and the accompanying materials\r
4 are licensed and made available under the terms and conditions of the BSD License\r
5 which accompanies this distribution. The full text of the license may be found at\r
6 http://opensource.org/licenses/bsd-license.php\r
7\r
8 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
9 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
10\r
11\r
12Module Name:\r
13\r
14\r
15 PpmPolicy.c\r
16\r
17Abstract:\r
18\r
19 This file is a wrapper for Intel PPM Platform Policy driver.\r
20 Get Setup Value to initilize Intel PPM DXE Platform Policy.\r
21\r
22--*/\r
23#include "PpmPolicy.h"\r
24#include <Protocol/MpService.h>\r
25#include <Library/BaseLib.h>\r
26#include <Library/DebugLib.h>\r
27#include <Library/CpuIA32.h>\r
28\r
29#include <PchRegs.h>\r
30#include <Library/PchPlatformLib.h>\r
31\r
32#define EFI_CPUID_FAMILY 0x0F00\r
33#define EFI_CPUID_MODEL 0x00F0\r
34#define EFI_CPUID_STEPPING 0x000F\r
35\r
36\r
37\r
38EFI_STATUS \r
39EFIAPI\r
40PpmPolicyEntry(\r
41 IN EFI_HANDLE ImageHandle,\r
42 IN EFI_SYSTEM_TABLE *SystemTable\r
43)\r
44{\r
45 EFI_MP_SERVICES_PROTOCOL *MpService;\r
46 EFI_CPUID_REGISTER Cpuid01 = { 0, 0, 0, 0};\r
47 EFI_HANDLE Handle;\r
48 EFI_STATUS Status;\r
49 UINTN CpuCount;\r
50 UINT64 MaxRatio;\r
51 UINT8 CPUMobileFeature;\r
52\r
53 PCH_STEPPING Stepping;\r
54\r
55\r
56 gBS = SystemTable->BootServices;\r
57 pBS = SystemTable->BootServices;\r
58 pRS = SystemTable->RuntimeServices;\r
59\r
60 //\r
61 // Set PPM policy structure to known value\r
62 //\r
63 gBS->SetMem (&mDxePlatformPpmPolicy, sizeof(PPM_PLATFORM_POLICY_PROTOCOL), 0);\r
64\r
65 //\r
66 // Find the MpService Protocol\r
67 //\r
68 Status = pBS->LocateProtocol (&gEfiMpServiceProtocolGuid,\r
69 NULL,\r
70 (void **)&MpService\r
71 );\r
72 ASSERT_EFI_ERROR (Status);\r
73\r
74 //\r
75 // Get processor count from MP service.\r
76 //\r
77 Status = MpService->GetNumberOfProcessors (MpService, &CpuCount, NULL);\r
78 ASSERT_EFI_ERROR (Status);\r
79\r
80 //\r
81 // Store the CPUID for use by SETUP items.\r
82 //\r
83 AsmCpuid (EFI_CPUID_VERSION_INFO, &Cpuid01.RegEax, &Cpuid01.RegEbx, &Cpuid01.RegEcx, &Cpuid01.RegEdx);\r
84 MaxRatio = ((RShiftU64 (AsmReadMsr64(EFI_MSR_IA32_PLATFORM_ID), 8)) & 0x1F);\r
85\r
86\r
87 mDxePlatformPpmPolicy.Revision = PPM_PLATFORM_POLICY_PROTOCOL_REVISION_4;\r
88\r
89 //Read CPU Mobile feature from PLATFORM_ID_MSR MSR(0x17) NOTFB_I_AM_NOT_MOBILE_FUSE_CLIAMC00H Bit 28\r
90 //Bit Description: { Disables Mobile features 0 = I am NOT a mobile part 1 = I am a mobile part (default)"}\r
91 CPUMobileFeature = ((RShiftU64 (AsmReadMsr64(EFI_MSR_IA32_PLATFORM_ID), 28)) & 0x1);\r
92\r
93 if (!EFI_ERROR(Status)) {\r
94 if (CPUMobileFeature == 1){//CPU mobile feature\r
95 mDxePlatformPpmPolicy.FunctionEnables.EnableGv = ICH_DEVICE_ENABLE;\r
96 mDxePlatformPpmPolicy.FunctionEnables.EnableCx = ICH_DEVICE_ENABLE;\r
97 mDxePlatformPpmPolicy.FunctionEnables.EnableCxe = ICH_DEVICE_DISABLE;\r
98 mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_ENABLE;\r
99 //MaxC7\r
100 mDxePlatformPpmPolicy.FunctionEnables.EnableC7 = ICH_DEVICE_ENABLE;\r
101 mDxePlatformPpmPolicy.FunctionEnables.EnableC6 = ICH_DEVICE_ENABLE;\r
102 mDxePlatformPpmPolicy.FunctionEnables.EnableC4 = ICH_DEVICE_ENABLE;\r
103 \r
104 \r
105 }else{//CPU desktop feature\r
106 mDxePlatformPpmPolicy.FunctionEnables.EnableGv = ICH_DEVICE_DISABLE;\r
107 mDxePlatformPpmPolicy.FunctionEnables.EnableCx = ICH_DEVICE_DISABLE;\r
108 mDxePlatformPpmPolicy.FunctionEnables.EnableCxe = ICH_DEVICE_DISABLE;\r
109 mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_DISABLE;\r
110 mDxePlatformPpmPolicy.FunctionEnables.EnableC4 = ICH_DEVICE_DISABLE;\r
111 mDxePlatformPpmPolicy.FunctionEnables.EnableC6 = ICH_DEVICE_DISABLE;\r
112 mDxePlatformPpmPolicy.FunctionEnables.EnableC7 = ICH_DEVICE_DISABLE;\r
113 }\r
114\r
115\r
116 mDxePlatformPpmPolicy.FunctionEnables.EnableProcHot = ICH_DEVICE_ENABLE;\r
117 mDxePlatformPpmPolicy.FunctionEnables.TStatesEnable = ICH_DEVICE_ENABLE;\r
118\r
119 \r
120 Stepping = PchStepping();\r
121 if (Stepping < PchB3) {\r
122 // If SoC is B0~B2 Stepping, disable the Turbo\r
123 mDxePlatformPpmPolicy.FunctionEnables.EnableTurboMode= ICH_DEVICE_DISABLE;\r
124 } else {\r
125 mDxePlatformPpmPolicy.FunctionEnables.EnableTurboMode= ICH_DEVICE_ENABLE;\r
126 }\r
127 \r
128 mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_ENABLE;\r
129\r
130 mDxePlatformPpmPolicy.FunctionEnables.EnableCMP = ICH_DEVICE_ENABLE;\r
131\r
132 } else {\r
133 mDxePlatformPpmPolicy.FunctionEnables.EnableGv = ICH_DEVICE_ENABLE;\r
134 mDxePlatformPpmPolicy.FunctionEnables.EnableCx = ICH_DEVICE_ENABLE;\r
135 mDxePlatformPpmPolicy.FunctionEnables.EnableCxe = ICH_DEVICE_ENABLE;\r
136 mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_ENABLE;\r
137 mDxePlatformPpmPolicy.FunctionEnables.EnableProcHot = ICH_DEVICE_ENABLE;\r
138 mDxePlatformPpmPolicy.FunctionEnables.EnableCMP = ICH_DEVICE_DISABLE;\r
139 mDxePlatformPpmPolicy.FunctionEnables.TStatesEnable = ICH_DEVICE_ENABLE;\r
140 mDxePlatformPpmPolicy.FunctionEnables.EnableTurboMode= ICH_DEVICE_ENABLE;\r
141 mDxePlatformPpmPolicy.FunctionEnables.EnableC4 = ICH_DEVICE_ENABLE;\r
142 mDxePlatformPpmPolicy.FunctionEnables.EnableC6 = ICH_DEVICE_ENABLE;\r
143 }\r
144\r
145\r
146\r
147 mDxePlatformPpmPolicy.S3RestoreMsrSwSmiNumber = S3_RESTORE_MSR_SW_SMI;\r
148\r
149 Handle = NULL;\r
150 Status = gBS->InstallMultipleProtocolInterfaces (\r
151 &Handle,\r
152 &gPpmPlatformPolicyProtocolGuid,\r
153 &mDxePlatformPpmPolicy,\r
154 NULL\r
155 );\r
156\r
157 ASSERT_EFI_ERROR (Status);\r
158\r
159 return EFI_SUCCESS;\r
160}\r