]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Drivers/TimerDxe/TimerDxe.c
ArmPkg/TimerDxe: Changed calculation to allow 1KHz granularity frequency
[mirror_edk2.git] / ArmPkg / Drivers / TimerDxe / TimerDxe.c
index 633876bea6bdced36ef7268ce3b1f2eaea465d7e..ccdb38c79b641c71b46728d558f177cc400a5a6e 100644 (file)
@@ -141,12 +141,13 @@ TimerDriverSetTimerPeriod (
   ArmArchTimerDisableTimer ();\r
 \r
   if (TimerPeriod != 0) {\r
-    // Convert TimerPeriod to micro sec units\r
-    TimerTicks = DivU64x32 (TimerPeriod, 10);\r
+    // TimerTicks = TimerPeriod in 1ms unit x Frequency.10^-3\r
+    //            = TimerPeriod.10^-4 x Frequency.10^-3\r
+    //            = (TimerPeriod x Frequency) x 10^-7\r
+    TimerTicks = MultU64x32 (TimerPeriod, FixedPcdGet32 (PcdArmArchTimerFreqInHz));\r
+    TimerTicks = DivU64x32 (TimerTicks, 10000000U);\r
 \r
-    TimerTicks = MultU64x32 (TimerTicks, (PcdGet32(PcdArmArchTimerFreqInHz)/1000000));\r
-\r
-    ArmArchTimerSetTimerVal((UINTN)TimerTicks);\r
+    ArmArchTimerSetTimerVal ((UINTN)TimerTicks);\r
 \r
     // Enable the timer\r
     ArmArchTimerEnableTimer ();\r