diff mbox

[Trusty,SRU] clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

Message ID 1424972282-4822-1-git-send-email-kamal@canonical.com
State New
Headers show

Commit Message

Kamal Mostafa Feb. 26, 2015, 5:38 p.m. UTC
https://launchpad.net/bugs/1426043

This upstream cherry-pick fixes boot failure on arm64.  The patch has also
been applied to 3.13-stable.

 -Kamal

-----

From: Catalin Marinas <catalin.marinas@arm.com>
Date: Wed, 10 Dec 2014 11:02:09 +0000
Subject: clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

commit d6ad36913083d683aad4e02e53580c995f1a6ede upstream.

Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical
timers when requested) introduces the use of physical counters in the
ARM architected timer driver. However, he arm64 kernel uses CNTVCT in
VDSO. When booting in EL2, the kernel switches to the physical timers to
make things easier for KVM but it continues to use the virtual counter
both in user and kernel. While in such scenario CNTVCT == CNTPCT (since
CNTVOFF is initialised by the kernel to 0), we want to spot firmware
bugs corrupting CNTVOFF early (which would affect CNTVCT).

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Yingjoe Chen <yingjoe.chen@mediatek.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
BugLink: https://launchpad.net/bugs/1426043
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
 drivers/clocksource/arm_arch_timer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Brad Figg Feb. 26, 2015, 5:49 p.m. UTC | #1
On Thu, Feb 26, 2015 at 09:38:02AM -0800, Kamal Mostafa wrote:
> https://launchpad.net/bugs/1426043
> 
> This upstream cherry-pick fixes boot failure on arm64.  The patch has also
> been applied to 3.13-stable.
> 
>  -Kamal
> 
> -----
> 
> From: Catalin Marinas <catalin.marinas@arm.com>
> Date: Wed, 10 Dec 2014 11:02:09 +0000
> Subject: clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64
> 
> commit d6ad36913083d683aad4e02e53580c995f1a6ede upstream.
> 
> Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical
> timers when requested) introduces the use of physical counters in the
> ARM architected timer driver. However, he arm64 kernel uses CNTVCT in
> VDSO. When booting in EL2, the kernel switches to the physical timers to
> make things easier for KVM but it continues to use the virtual counter
> both in user and kernel. While in such scenario CNTVCT == CNTPCT (since
> CNTVOFF is initialised by the kernel to 0), we want to spot firmware
> bugs corrupting CNTVOFF early (which would affect CNTVCT).
> 
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> Tested-by: Yingjoe Chen <yingjoe.chen@mediatek.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> BugLink: https://launchpad.net/bugs/1426043
> Signed-off-by: Kamal Mostafa <kamal@canonical.com>
> ---
>  drivers/clocksource/arm_arch_timer.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index 46884f8..a40fc66 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -427,7 +427,7 @@ static void __init arch_counter_register(unsigned type)
>  
>  	/* Register the CP15 based counter if we have one */
>  	if (type & ARCH_CP15_TIMER) {
> -		if (arch_timer_use_virtual)
> +		if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
>  			arch_timer_read_counter = arch_counter_get_cntvct;
>  		else
>  			arch_timer_read_counter = arch_counter_get_cntpct;
> -- 
> 1.9.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team

Clean cherry-pick from upstream.
Kamal Mostafa Feb. 26, 2015, 5:59 p.m. UTC | #2
On Thu, 2015-02-26 at 09:38 -0800, Kamal Mostafa wrote:
> https://launchpad.net/bugs/1426043
> 
> This upstream cherry-pick fixes boot failure on arm64.  The patch has also
> been applied to 3.13-stable.
> 
>  -Kamal
> 
> -----
> 
> From: Catalin Marinas <catalin.marinas@arm.com>
> Date: Wed, 10 Dec 2014 11:02:09 +0000
> Subject: clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64
> 
> commit d6ad36913083d683aad4e02e53580c995f1a6ede upstream.
> 
> Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical
> timers when requested) introduces the use of physical counters in the
> ARM architected timer driver. However, he arm64 kernel uses CNTVCT in
> VDSO. When booting in EL2, the kernel switches to the physical timers to
> make things easier for KVM but it continues to use the virtual counter
> both in user and kernel. While in such scenario CNTVCT == CNTPCT (since
> CNTVOFF is initialised by the kernel to 0), we want to spot firmware
> bugs corrupting CNTVOFF early (which would affect CNTVCT).
> 
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> Tested-by: Yingjoe Chen <yingjoe.chen@mediatek.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> BugLink: https://launchpad.net/bugs/1426043
> Signed-off-by: Kamal Mostafa <kamal@canonical.com>
> ---
>  drivers/clocksource/arm_arch_timer.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index 46884f8..a40fc66 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -427,7 +427,7 @@ static void __init arch_counter_register(unsigned type)
>  
>  	/* Register the CP15 based counter if we have one */
>  	if (type & ARCH_CP15_TIMER) {
> -		if (arch_timer_use_virtual)
> +		if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
>  			arch_timer_read_counter = arch_counter_get_cntvct;
>  		else
>  			arch_timer_read_counter = arch_counter_get_cntpct;
> -- 
> 1.9.1
> 
>
diff mbox

Patch

diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 46884f8..a40fc66 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -427,7 +427,7 @@  static void __init arch_counter_register(unsigned type)
 
 	/* Register the CP15 based counter if we have one */
 	if (type & ARCH_CP15_TIMER) {
-		if (arch_timer_use_virtual)
+		if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
 			arch_timer_read_counter = arch_counter_get_cntvct;
 		else
 			arch_timer_read_counter = arch_counter_get_cntpct;