ARM: arch_timers: switch to physical timers if HYP mode is available
authorMarc Zyngier <Marc.Zyngier@arm.com>
Thu, 10 Jan 2013 11:13:07 +0000 (11:13 +0000)
committerMark Rutland <mark.rutland@arm.com>
Thu, 31 Jan 2013 15:52:00 +0000 (15:52 +0000)
If we're booted in HYP mode, it is possible that we'll run some
kind of virtualized environment. In this case, it is a better to
switch to the physical timers, and leave the virtual timers to
guests.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
drivers/clocksource/arm_arch_timer.c

index ec30a73..d7ad425 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/io.h>
 
 #include <asm/arch_timer.h>
+#include <asm/virt.h>
 
 #include <clocksource/arm_arch_timer.h>
 
@@ -364,10 +365,14 @@ int __init arch_timer_init(void)
        of_node_put(np);
 
        /*
+        * If HYP mode is available, we know that the physical timer
+        * has been configured to be accessible from PL1. Use it, so
+        * that a guest can use the virtual timer instead.
+        *
         * If no interrupt provided for virtual timer, we'll have to
         * stick to the physical timer. It'd better be accessible...
         */
-       if (!arch_timer_ppi[VIRT_PPI]) {
+       if (is_hyp_mode_available() || !arch_timer_ppi[VIRT_PPI]) {
                arch_timer_use_virtual = false;
 
                if (!arch_timer_ppi[PHYS_SECURE_PPI] ||