summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Drivers/TimerDxe
diff options
context:
space:
mode:
authorHeyi Guo <heyi.guo@linaro.org>2018-03-15 15:17:43 +0800
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2018-03-15 08:07:14 +0000
commitac9b530e6b47c0957345e421b618d8bdd2bf21cf (patch)
tree53a8feec5f18fc9773412f4dce8f639d8737f97a /ArmPkg/Drivers/TimerDxe
parentb3fa393f477a12fe0e1aedb36395ca9b345ae110 (diff)
downloadedk2-ac9b530e6b47c0957345e421b618d8bdd2bf21cf.tar.gz
edk2-ac9b530e6b47c0957345e421b618d8bdd2bf21cf.tar.bz2
edk2-ac9b530e6b47c0957345e421b618d8bdd2bf21cf.zip
ArmPkg/TimerDxe: Add ISB for timer compare value reload
If timer interrupt is level sensitive, reloading timer compare register has a side effect of clearing GIC pending status, so a "ISB" is needed to make sure this instruction is executed before enabling CPU IRQ, or else we may get spurious timer interrupts. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Heyi Guo <heyi.guo@linaro.org> Acked-by: Marc Zyngier <marc.zyngier@arm.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Diffstat (limited to 'ArmPkg/Drivers/TimerDxe')
-rw-r--r--ArmPkg/Drivers/TimerDxe/TimerDxe.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/ArmPkg/Drivers/TimerDxe/TimerDxe.c b/ArmPkg/Drivers/TimerDxe/TimerDxe.c
index 33d7c92222..a3202fa056 100644
--- a/ArmPkg/Drivers/TimerDxe/TimerDxe.c
+++ b/ArmPkg/Drivers/TimerDxe/TimerDxe.c
@@ -338,6 +338,7 @@ TimerInterruptHandler (
// Set next compare value
ArmGenericTimerSetCompareVal (CompareValue);
ArmGenericTimerEnableTimer ();
+ ArmInstructionSynchronizationBarrier ();
}
gBS->RestoreTPL (OriginalTPL);