Revision: 18846
          http://sourceforge.net/p/edk2/code/18846
Author:   vanjeff
Date:     2015-11-17 05:10:45 +0000 (Tue, 17 Nov 2015)
Log Message:
-----------
UefiCpuPkg: SmmCpuFeaturesLib: Add MSR_SMM_FEATURE_CONTROL support

Add support for the reading and writing MSR_SMM_FEATURE_CONTROL
through the SmmCpuFeaturesIsSmmRegisterSupported(),
SmmCpuFeaturesGetSmmRegister(), and SmmCpuFeaturesSetSmmRegister()
functions.  This MSR is supported if the Family/Model is 06_3C,
06_45, or 06_46.

(Sync patch r18690 from main trunk.)

Cc: "Yao, Jiewen" <[email protected]>
Cc: Jeff Fan <[email protected]>

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <[email protected]>
Reviewed-by: "Yao, Jiewen" <[email protected]>

Revision Links:
--------------
    http://sourceforge.net/p/edk2/code/18690

Modified Paths:
--------------
    branches/UDK2015/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c

Modified: 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
===================================================================
--- branches/UDK2015/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c   
2015-11-17 05:10:07 UTC (rev 18845)
+++ branches/UDK2015/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c   
2015-11-17 05:10:45 UTC (rev 18846)
@@ -33,6 +33,7 @@
 #define  SMM_FEATURES_LIB_IA32_CORE_SMRR_PHYSMASK  0x0A1
 #define    EFI_MSR_SMRR_MASK                       0xFFFFF000
 #define    EFI_MSR_SMRR_PHYS_MASK_VALID            BIT11
+#define  SMM_FEATURES_LIB_SMM_FEATURE_CONTROL      0x4E0
 
 //
 // Set default value to assume SMRR is not supported
@@ -40,6 +41,11 @@
 BOOLEAN  mSmrrSupported = FALSE;
 
 //
+// Set default value to assume MSR_SMM_FEATURE_CONTROL is not supported
+//
+BOOLEAN  mSmmFeatureControlSupported = FALSE;
+
+//
 // Set default value to assume IA-32 Architectural MSRs are used
 //
 UINT32  mSmrrPhysBaseMsr = SMM_FEATURES_LIB_IA32_SMRR_PHYSBASE;
@@ -127,6 +133,20 @@
 
   //
   // Intel(R) 64 and IA-32 Architectures Software Developer's Manual
+  // Volume 3C, Section 35.10.1 MSRs in 4th Generation Intel(R) Core(TM)
+  // Processor Family
+  //
+  // If CPU Family/Model is 06_3C, 06_45, or 06_46 then use 4th Generation
+  // Intel(R) Core(TM) Processor Family MSRs
+  //
+  if (FamilyId == 0x06) {
+    if (ModelId == 0x3C || ModelId == 0x45 || ModelId == 0x46) {
+      mSmmFeatureControlSupported = TRUE;
+    }
+  }
+
+  //
+  // Intel(R) 64 and IA-32 Architectures Software Developer's Manual
   // Volume 3C, Section 34.4.2 SMRAM Caching
   //   An IA-32 processor does not automatically write back and invalidate its
   //   caches before entering SMM or before exiting SMM. Because of this 
behavior,
@@ -457,6 +477,9 @@
   IN SMM_REG_NAME  RegName
   )
 {
+  if (mSmmFeatureControlSupported && RegName == SmmRegFeatureControl) {
+    return TRUE;
+  }
   return FALSE;
 }
 
@@ -479,6 +502,9 @@
   IN SMM_REG_NAME  RegName
   )
 {
+  if (mSmmFeatureControlSupported && RegName == SmmRegFeatureControl) {
+    return AsmReadMsr64 (SMM_FEATURES_LIB_SMM_FEATURE_CONTROL);
+  }
   return 0;
 }
 
@@ -501,6 +527,9 @@
   IN UINT64        Value
   )
 {
+  if (mSmmFeatureControlSupported && RegName == SmmRegFeatureControl) {
+    AsmWriteMsr64 (SMM_FEATURES_LIB_SMM_FEATURE_CONTROL, Value);
+  }
 }
 
 /**


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to