diff --git a/EdkModulePkg/EdkModulePkg.fpd b/EdkModulePkg/EdkModulePkg.fpd
index a2da834923..6a7d0bb46e 100644
--- a/EdkModulePkg/EdkModulePkg.fpd
+++ b/EdkModulePkg/EdkModulePkg.fpd
@@ -858,6 +858,14 @@
1
0
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
NULL
@@ -4863,6 +4871,14 @@
1
0x06
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
NULL
@@ -5032,6 +5048,14 @@
1
0x06
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
NULL
@@ -5201,6 +5225,14 @@
1
0x06
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
NULL
@@ -6036,6 +6068,14 @@
1
0
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
NULL
@@ -10075,6 +10115,14 @@
1
0
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
NULL
@@ -14118,6 +14166,14 @@
1
0
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
NULL
diff --git a/EdkNt32Pkg/Nt32.fpd b/EdkNt32Pkg/Nt32.fpd
index 42e33a691f..0d95efdd2d 100644
--- a/EdkNt32Pkg/Nt32.fpd
+++ b/EdkNt32Pkg/Nt32.fpd
@@ -578,6 +578,14 @@
1
TRUE
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
FV_RECOVERY
@@ -2529,6 +2537,14 @@
1
FALSE
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
FV_RECOVERY
diff --git a/MdePkg/Library/BaseTimerLibLocalApic/BaseTimerLibLocalApic.msa b/MdePkg/Library/BaseTimerLibLocalApic/BaseTimerLibLocalApic.msa
index f24d6daabe..f1d22f2603 100644
--- a/MdePkg/Library/BaseTimerLibLocalApic/BaseTimerLibLocalApic.msa
+++ b/MdePkg/Library/BaseTimerLibLocalApic/BaseTimerLibLocalApic.msa
@@ -35,6 +35,9 @@
DebugLib
+
+ PcdLib
+
x86TimerLib.c
@@ -49,4 +52,11 @@
EFI_SPECIFICATION_VERSION 0x00020000
EDK_RELEASE_VERSION 0x00020000
+
+
+ PcdPlatformBusSpeed
+ gEfiMdePkgTokenSpaceGuid
+ This value is the Bus Speed on platform
+
+
\ No newline at end of file
diff --git a/MdePkg/Library/BaseTimerLibLocalApic/x86TimerLib.c b/MdePkg/Library/BaseTimerLibLocalApic/x86TimerLib.c
index 87c33a7c5d..d2935cf83a 100644
--- a/MdePkg/Library/BaseTimerLibLocalApic/x86TimerLib.c
+++ b/MdePkg/Library/BaseTimerLibLocalApic/x86TimerLib.c
@@ -19,18 +19,9 @@
**/
//
-// The following 2 arrays are used in calculating the frequency of local APIC
+// The following array is used in calculating the frequency of local APIC
// timer. Refer to IA-32 developers' manual for more details.
//
-
-GLOBAL_REMOVE_IF_UNREFERENCED
-CONST UINT32 mTimerLibLocalApicFrequencies[] = {
- 100000000,
- 133000000,
- 200000000,
- 166000000
-};
-
GLOBAL_REMOVE_IF_UNREFERENCED
CONST UINT8 mTimerLibLocalApicDivisor[] = {
0x02, 0x04, 0x08, 0x10,
@@ -73,7 +64,7 @@ InternalX86GetTimerFrequency (
)
{
return
- mTimerLibLocalApicFrequencies[AsmMsrBitFieldRead32 (44, 16, 18)] /
+ PcdGet32(PcdPlatformBusSpeed) /
mTimerLibLocalApicDivisor[MmioBitFieldRead32 (ApicBase + 0x3e0, 0, 3)];
}
@@ -255,5 +246,5 @@ GetPerformanceCounterProperties (
*EndValue = 0;
}
- return (UINT64)InternalX86GetTimerFrequency (ApicBase);
+ return PcdGet32(PcdPlatformBusSpeed);
}
diff --git a/MdePkg/MdePkg.fpd b/MdePkg/MdePkg.fpd
index e0213a5d87..e4a3fa3f12 100644
--- a/MdePkg/MdePkg.fpd
+++ b/MdePkg/MdePkg.fpd
@@ -1,15 +1,5 @@
-
-
+
MdePkgAll
0fe7dd3e-0969-48c3-8cd2-de9a190088e2
@@ -31,6 +21,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
DEBUG RELEASE
UNIFIED
Build/Mde
+
+ DEFAULT
+
dummy.fdf
@@ -113,6 +106,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
+
NULL
LIBRARY
@@ -661,6 +664,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
+
NULL
LIBRARY
@@ -1221,6 +1234,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
+
NULL
LIBRARY
@@ -1769,6 +1792,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ 4
+ 200000000
+
+
NULL
LIBRARY
@@ -2254,153 +2287,135 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MdePkg/MdePkg.spd b/MdePkg/MdePkg.spd
index cac04220c9..5abbddaa61 100644
--- a/MdePkg/MdePkg.spd
+++ b/MdePkg/MdePkg.spd
@@ -1,15 +1,5 @@
-
-
+
MdePkg
5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec
@@ -28,7 +18,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052
- true
+ false
false
@@ -2334,5 +2324,14 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
0xE0000000
The base address of PCI Express MMIO window.
+
+ PcdPlatformBusSpeed
+ 0x0000000c
+ gEfiMdePkgTokenSpaceGuid
+ UINT32
+ FIXED_AT_BUILD PATCHABLE_IN_MODULE
+ 200000000
+ This value is the Bus Speed on platform
+
\ No newline at end of file