]>
Commit | Line | Data |
---|---|---|
3cbfba02 | 1 | /** \r |
e5a0cf91 | 2 | Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>\r |
9dc8036d | 3 | SPDX-License-Identifier: BSD-2-Clause-Patent\r |
3cbfba02 DW |
4 | \r |
5 | \r | |
6 | Module Name:\r | |
7 | \r | |
8 | \r | |
9 | PpmPolicy.c\r | |
10 | \r | |
11 | Abstract:\r | |
12 | \r | |
13 | This file is a wrapper for Intel PPM Platform Policy driver.\r | |
14 | Get Setup Value to initilize Intel PPM DXE Platform Policy.\r | |
15 | \r | |
16 | --*/\r | |
17 | #include "PpmPolicy.h"\r | |
18 | #include <Protocol/MpService.h>\r | |
19 | #include <Library/BaseLib.h>\r | |
20 | #include <Library/DebugLib.h>\r | |
21 | #include <Library/CpuIA32.h>\r | |
22 | \r | |
23 | #include <PchRegs.h>\r | |
24 | #include <Library/PchPlatformLib.h>\r | |
25 | \r | |
26 | #define EFI_CPUID_FAMILY 0x0F00\r | |
27 | #define EFI_CPUID_MODEL 0x00F0\r | |
28 | #define EFI_CPUID_STEPPING 0x000F\r | |
29 | \r | |
3cbfba02 DW |
30 | EFI_STATUS \r |
31 | EFIAPI\r | |
32 | PpmPolicyEntry(\r | |
33 | IN EFI_HANDLE ImageHandle,\r | |
34 | IN EFI_SYSTEM_TABLE *SystemTable\r | |
35 | )\r | |
36 | {\r | |
55ef35d2 | 37 | EFI_BOOT_SERVICES *pBS;\r |
3cbfba02 DW |
38 | EFI_MP_SERVICES_PROTOCOL *MpService;\r |
39 | EFI_CPUID_REGISTER Cpuid01 = { 0, 0, 0, 0};\r | |
40 | EFI_HANDLE Handle;\r | |
41 | EFI_STATUS Status;\r | |
42 | UINTN CpuCount;\r | |
e5a0cf91 | 43 | UINTN CpuEnabledCount;\r |
3cbfba02 DW |
44 | UINT8 CPUMobileFeature;\r |
45 | \r | |
46 | PCH_STEPPING Stepping;\r | |
47 | \r | |
3cbfba02 | 48 | pBS = SystemTable->BootServices;\r |
3cbfba02 DW |
49 | \r |
50 | //\r | |
51 | // Set PPM policy structure to known value\r | |
52 | //\r | |
55ef35d2 | 53 | pBS->SetMem (&mDxePlatformPpmPolicy, sizeof(PPM_PLATFORM_POLICY_PROTOCOL), 0);\r |
3cbfba02 DW |
54 | \r |
55 | //\r | |
56 | // Find the MpService Protocol\r | |
57 | //\r | |
58 | Status = pBS->LocateProtocol (&gEfiMpServiceProtocolGuid,\r | |
59 | NULL,\r | |
60 | (void **)&MpService\r | |
61 | );\r | |
62 | ASSERT_EFI_ERROR (Status);\r | |
63 | \r | |
64 | //\r | |
65 | // Get processor count from MP service.\r | |
66 | //\r | |
e5a0cf91 | 67 | Status = MpService->GetNumberOfProcessors (MpService, &CpuCount, &CpuEnabledCount);\r |
3cbfba02 DW |
68 | ASSERT_EFI_ERROR (Status);\r |
69 | \r | |
70 | //\r | |
71 | // Store the CPUID for use by SETUP items.\r | |
72 | //\r | |
73 | AsmCpuid (EFI_CPUID_VERSION_INFO, &Cpuid01.RegEax, &Cpuid01.RegEbx, &Cpuid01.RegEcx, &Cpuid01.RegEdx);\r | |
3cbfba02 DW |
74 | \r |
75 | mDxePlatformPpmPolicy.Revision = PPM_PLATFORM_POLICY_PROTOCOL_REVISION_4;\r | |
76 | \r | |
77 | //Read CPU Mobile feature from PLATFORM_ID_MSR MSR(0x17) NOTFB_I_AM_NOT_MOBILE_FUSE_CLIAMC00H Bit 28\r | |
78 | //Bit Description: { Disables Mobile features 0 = I am NOT a mobile part 1 = I am a mobile part (default)"}\r | |
79 | CPUMobileFeature = ((RShiftU64 (AsmReadMsr64(EFI_MSR_IA32_PLATFORM_ID), 28)) & 0x1);\r | |
80 | \r | |
81 | if (!EFI_ERROR(Status)) {\r | |
82 | if (CPUMobileFeature == 1){//CPU mobile feature\r | |
83 | mDxePlatformPpmPolicy.FunctionEnables.EnableGv = ICH_DEVICE_ENABLE;\r | |
84 | mDxePlatformPpmPolicy.FunctionEnables.EnableCx = ICH_DEVICE_ENABLE;\r | |
85 | mDxePlatformPpmPolicy.FunctionEnables.EnableCxe = ICH_DEVICE_DISABLE;\r | |
86 | mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_ENABLE;\r | |
87 | //MaxC7\r | |
88 | mDxePlatformPpmPolicy.FunctionEnables.EnableC7 = ICH_DEVICE_ENABLE;\r | |
89 | mDxePlatformPpmPolicy.FunctionEnables.EnableC6 = ICH_DEVICE_ENABLE;\r | |
90 | mDxePlatformPpmPolicy.FunctionEnables.EnableC4 = ICH_DEVICE_ENABLE;\r | |
91 | \r | |
92 | \r | |
93 | }else{//CPU desktop feature\r | |
94 | mDxePlatformPpmPolicy.FunctionEnables.EnableGv = ICH_DEVICE_DISABLE;\r | |
95 | mDxePlatformPpmPolicy.FunctionEnables.EnableCx = ICH_DEVICE_DISABLE;\r | |
96 | mDxePlatformPpmPolicy.FunctionEnables.EnableCxe = ICH_DEVICE_DISABLE;\r | |
97 | mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_DISABLE;\r | |
98 | mDxePlatformPpmPolicy.FunctionEnables.EnableC4 = ICH_DEVICE_DISABLE;\r | |
99 | mDxePlatformPpmPolicy.FunctionEnables.EnableC6 = ICH_DEVICE_DISABLE;\r | |
100 | mDxePlatformPpmPolicy.FunctionEnables.EnableC7 = ICH_DEVICE_DISABLE;\r | |
101 | }\r | |
102 | \r | |
103 | \r | |
104 | mDxePlatformPpmPolicy.FunctionEnables.EnableProcHot = ICH_DEVICE_ENABLE;\r | |
105 | mDxePlatformPpmPolicy.FunctionEnables.TStatesEnable = ICH_DEVICE_ENABLE;\r | |
106 | \r | |
107 | \r | |
108 | Stepping = PchStepping();\r | |
109 | if (Stepping < PchB3) {\r | |
110 | // If SoC is B0~B2 Stepping, disable the Turbo\r | |
111 | mDxePlatformPpmPolicy.FunctionEnables.EnableTurboMode= ICH_DEVICE_DISABLE;\r | |
112 | } else {\r | |
113 | mDxePlatformPpmPolicy.FunctionEnables.EnableTurboMode= ICH_DEVICE_ENABLE;\r | |
114 | }\r | |
115 | \r | |
116 | mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_ENABLE;\r | |
117 | \r | |
118 | mDxePlatformPpmPolicy.FunctionEnables.EnableCMP = ICH_DEVICE_ENABLE;\r | |
119 | \r | |
120 | } else {\r | |
121 | mDxePlatformPpmPolicy.FunctionEnables.EnableGv = ICH_DEVICE_ENABLE;\r | |
122 | mDxePlatformPpmPolicy.FunctionEnables.EnableCx = ICH_DEVICE_ENABLE;\r | |
123 | mDxePlatformPpmPolicy.FunctionEnables.EnableCxe = ICH_DEVICE_ENABLE;\r | |
124 | mDxePlatformPpmPolicy.FunctionEnables.EnableTm = ICH_DEVICE_ENABLE;\r | |
125 | mDxePlatformPpmPolicy.FunctionEnables.EnableProcHot = ICH_DEVICE_ENABLE;\r | |
126 | mDxePlatformPpmPolicy.FunctionEnables.EnableCMP = ICH_DEVICE_DISABLE;\r | |
127 | mDxePlatformPpmPolicy.FunctionEnables.TStatesEnable = ICH_DEVICE_ENABLE;\r | |
128 | mDxePlatformPpmPolicy.FunctionEnables.EnableTurboMode= ICH_DEVICE_ENABLE;\r | |
129 | mDxePlatformPpmPolicy.FunctionEnables.EnableC4 = ICH_DEVICE_ENABLE;\r | |
130 | mDxePlatformPpmPolicy.FunctionEnables.EnableC6 = ICH_DEVICE_ENABLE;\r | |
131 | }\r | |
132 | \r | |
133 | \r | |
134 | \r | |
135 | mDxePlatformPpmPolicy.S3RestoreMsrSwSmiNumber = S3_RESTORE_MSR_SW_SMI;\r | |
136 | \r | |
137 | Handle = NULL;\r | |
55ef35d2 | 138 | Status = pBS->InstallMultipleProtocolInterfaces (\r |
3cbfba02 DW |
139 | &Handle,\r |
140 | &gPpmPlatformPolicyProtocolGuid,\r | |
141 | &mDxePlatformPpmPolicy,\r | |
142 | NULL\r | |
143 | );\r | |
144 | \r | |
145 | ASSERT_EFI_ERROR (Status);\r | |
146 | \r | |
147 | return EFI_SUCCESS;\r | |
148 | }\r |