]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Library/ArmGenericTimerVirtCounterLib/ArmGenericTimerVirtCounterLib.c
ArmPkg/TimerDxe: remove workaround for KVM timer handling
[mirror_edk2.git] / ArmPkg / Library / ArmGenericTimerVirtCounterLib / ArmGenericTimerVirtCounterLib.c
index f99c8525b9009aa9631ba371b7d9156bce7b58e1..c941895a3574b0246a8718e3ee3ef02db664deda 100644 (file)
@@ -14,7 +14,7 @@
 **/\r
 \r
 #include <Library/ArmGenericTimerCounterLib.h>\r
-#include <Library/ArmArchTimer.h>\r
+#include <Library/ArmLib.h>\r
 \r
 VOID\r
 EFIAPI\r
@@ -24,19 +24,9 @@ ArmGenericTimerEnableTimer (
 {\r
   UINTN TimerCtrlReg;\r
 \r
-  ArmArchTimerReadReg (CntvCtl, (VOID *)&TimerCtrlReg);\r
+  TimerCtrlReg = ArmReadCntvCtl ();\r
   TimerCtrlReg |= ARM_ARCH_TIMER_ENABLE;\r
-\r
-  //\r
-  // When running under KVM, we need to unmask the interrupt on the timer side\r
-  // as KVM will mask it when servicing the interrupt at the hypervisor level\r
-  // and delivering the virtual timer interrupt to the guest. Otherwise, the\r
-  // interrupt will fire again, trapping into the hypervisor again, etc. etc.\r
-  // This is scheduled to be fixed on the KVM side, but there is no harm in\r
-  // leaving this in once KVM gets fixed.\r
-  //\r
-  TimerCtrlReg &= ~ARM_ARCH_TIMER_IMASK;\r
-  ArmArchTimerWriteReg (CntvCtl, (VOID *)&TimerCtrlReg);\r
+  ArmWriteCntvCtl (TimerCtrlReg);\r
 }\r
 \r
 VOID\r
@@ -47,9 +37,9 @@ ArmGenericTimerDisableTimer (
 {\r
   UINTN TimerCtrlReg;\r
 \r
-  ArmArchTimerReadReg (CntvCtl, (VOID *)&TimerCtrlReg);\r
+  TimerCtrlReg = ArmReadCntvCtl ();\r
   TimerCtrlReg &= ~ARM_ARCH_TIMER_ENABLE;\r
-  ArmArchTimerWriteReg (CntvCtl, (VOID *)&TimerCtrlReg);\r
+  ArmWriteCntvCtl (TimerCtrlReg);\r
 }\r
 \r
 VOID\r
@@ -58,7 +48,7 @@ ArmGenericTimerSetTimerFreq (
   IN   UINTN  FreqInHz\r
   )\r
 {\r
-  ArmArchTimerWriteReg (CntFrq, (VOID *)&FreqInHz);\r
+  ArmWriteCntFrq (FreqInHz);\r
 }\r
 \r
 UINTN\r
@@ -67,9 +57,7 @@ ArmGenericTimerGetTimerFreq (
   VOID\r
   )\r
 {\r
-  UINTN ArchTimerFreq = 0;\r
-  ArmArchTimerReadReg (CntFrq, (VOID *)&ArchTimerFreq);\r
-  return ArchTimerFreq;\r
+  return ArmReadCntFrq ();\r
 }\r
 \r
 UINTN\r
@@ -78,10 +66,7 @@ ArmGenericTimerGetTimerVal (
   VOID\r
   )\r
 {\r
-  UINTN ArchTimerValue;\r
-  ArmArchTimerReadReg (CntvTval, (VOID *)&ArchTimerValue);\r
-\r
-  return ArchTimerValue;\r
+  return ArmReadCntvTval ();\r
 }\r
 \r
 \r
@@ -91,7 +76,7 @@ ArmGenericTimerSetTimerVal (
   IN   UINTN   Value\r
   )\r
 {\r
-  ArmArchTimerWriteReg (CntvTval, (VOID *)&Value);\r
+  ArmWriteCntvTval (Value);\r
 }\r
 \r
 UINT64\r
@@ -100,10 +85,7 @@ ArmGenericTimerGetSystemCount (
   VOID\r
   )\r
 {\r
-  UINT64 SystemCount;\r
-  ArmArchTimerReadReg (CntvCt, (VOID *)&SystemCount);\r
-\r
-  return SystemCount;\r
+  return ArmReadCntvCt ();\r
 }\r
 \r
 UINTN\r
@@ -112,10 +94,7 @@ ArmGenericTimerGetTimerCtrlReg (
   VOID\r
   )\r
 {\r
-  UINTN  Value;\r
-  ArmArchTimerReadReg (CntvCtl, (VOID *)&Value);\r
-\r
-  return Value;\r
+  return ArmReadCntvCtl ();\r
 }\r
 \r
 VOID\r
@@ -124,7 +103,7 @@ ArmGenericTimerSetTimerCtrlReg (
   UINTN Value\r
   )\r
 {\r
-  ArmArchTimerWriteReg (CntvCtl, (VOID *)&Value);\r
+  ArmWriteCntvCtl (Value);\r
 }\r
 \r
 UINT64\r
@@ -133,10 +112,7 @@ ArmGenericTimerGetCompareVal (
   VOID\r
   )\r
 {\r
-  UINT64  Value;\r
-  ArmArchTimerReadReg (CntvCval, (VOID *)&Value);\r
-\r
-  return Value;\r
+  return ArmReadCntvCval ();\r
 }\r
 \r
 VOID\r
@@ -145,5 +121,5 @@ ArmGenericTimerSetCompareVal (
   IN   UINT64   Value\r
   )\r
 {\r
-  ArmArchTimerWriteReg (CntvCval, (VOID *)&Value);\r
+  ArmWriteCntvCval (Value);\r
 }\r