[U-Boot] [PATCH 4/9] ARM: non-sec: reset CNTVOFF to zero

Andre Przywara
2013-11-26T14:41:54Z

On 11/21/2013 09:59 AM, Marc Zyngier wrote:
> Before switching to non-secure, make sure that CNTVOFF is set
> to zero on all CPUs. Otherwise, kernel running in non-secure
> without HYP enabled (hence using virtual timers) may observe
> timers that are not synchronized, effectively seeing time
> going backward...

Under what circumstances would native Linux use the virtual timers? When
VIRT_EXT is not defined?

Regards,
Andre.

>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
> ---
> arch/arm/cpu/armv7/nonsec_virt.S | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/arch/arm/cpu/armv7/nonsec_virt.S b/arch/arm/cpu/armv7/nonsec_virt.S
> index 648066f..bbacbce 100644
> --- a/arch/arm/cpu/armv7/nonsec_virt.S
> +++ b/arch/arm/cpu/armv7/nonsec_virt.S
> @@ -53,7 +53,14 @@ _secure_monitor:
> mrceq p15, 0, r0, c12, c0, 1 @ get MVBAR value
> mcreq p15, 4, r0, c12, c0, 0 @ write HVBAR
> #endif
> + bne 1f
>
> + @ Reset CNTVOFF to 0 before leaving monitor mode
> + mrc p15, 0, r0, c0, c1, 1 @ read ID_PFR1
> + ands r0, r0, #CPUID_ARM_GENTIMER_MASK @ test arch timer bits
> + movne r0, #0
> + mcrrne p15, 4, r0, r0, c14 @ Reset CNTVOFF to zero
> +1:
> movs pc, lr @ return to non-secure SVC
>
> _hyp_trap:
>