]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.c
Vlv2TbltDevicePkg/PpmPolicy: Fix call to MP Services Protocol
[mirror_edk2.git] / Vlv2TbltDevicePkg / PpmPolicy / PpmPolicy.c
CommitLineData
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
6Module Name:\r
7\r
8\r
9 PpmPolicy.c\r
10\r
11Abstract:\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
30EFI_STATUS \r
31EFIAPI\r
32PpmPolicyEntry(\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