blob: 3b83af24fe5af5d34d5dcca84cbdf097ccb4528b [file] [log] [blame]
From 0d710173dcca9b9e7c5ec0ddf109e9bbaa6d4a79 Mon Sep 17 00:00:00 2001
From: Magnus Damm <damm@opensource.se>
Date: Thu, 10 May 2012 00:37:48 +0200
Subject: ARM / mach-shmobile: Use preset_lpj with calibrate_delay()
Update the mach-shmobile shared delay calibration code for late
timers. All existing in-tree non-DT socs are however using early
timers today and they are unaffected by this change.
The patch modifies shmobile_setup_delay() from using lpj_fine
to preset_lpj. This change allows us to preset the worst case
loops-per-jiffy value to all CPU cores on the system.
The old code which made use of lpj_fine did not affect the
secondary CPU cores which made it impossible to boot on SMP
without early timers.
Needed for SMP SoCs using late timers like EMEV2 or any other
mach-shmobile SMP SoC that makes use of late timers via DT.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
(cherry picked from commit 173bf69a7af142e0325fa514954f6eeb2d20cc1d)
Signed-off-by: Simon Horman <horms@verge.net.au>
---
arch/arm/mach-shmobile/timer.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-shmobile/timer.c b/arch/arm/mach-shmobile/timer.c
index b323e3c..a169cea 100644
--- a/arch/arm/mach-shmobile/timer.c
+++ b/arch/arm/mach-shmobile/timer.c
@@ -35,7 +35,8 @@ void __init shmobile_setup_delay(unsigned int max_cpu_core_mhz,
unsigned int value = (1000000 * mult) / (HZ * div);
- lpj_fine = max_cpu_core_mhz * value;
+ if (!preset_lpj)
+ preset_lpj = max_cpu_core_mhz * value;
}
static void __init shmobile_late_time_init(void)
--
1.7.10.1.362.g242cab3