mirror of
https://github.com/armbian/build.git
synced 2025-12-18 15:51:24 +01:00
62 lines
1.8 KiB
Diff
62 lines
1.8 KiB
Diff
From: Russell King <rmk+kernel@arm.linux.org.uk>
|
|
Subject: [PATCH 84/84] clocksource: armada-370-xp: implement ARM delay timer
|
|
MIME-Version: 1.0
|
|
Content-Disposition: inline
|
|
Content-Transfer-Encoding: 8bit
|
|
Content-Type: text/plain; charset="utf-8"
|
|
|
|
Implement an ARM delay timer to be used for udelay() on Armada 37x
|
|
platforms. This allows us to skip the delay loop calibration at boot,
|
|
saving 180ms on the boot time of the kernel (which is around 10%).
|
|
|
|
It also means that udelay() will be unaffected by CPU frequency changes
|
|
when cpufreq is enabled on these platforms.
|
|
|
|
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
|
---
|
|
drivers/clocksource/time-armada-370-xp.c | 14 ++++++++++++++
|
|
1 file changed, 14 insertions(+)
|
|
|
|
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
|
|
index 2162796fd504..d93ec3c4f139 100644
|
|
--- a/drivers/clocksource/time-armada-370-xp.c
|
|
+++ b/drivers/clocksource/time-armada-370-xp.c
|
|
@@ -45,6 +45,8 @@
|
|
#include <linux/percpu.h>
|
|
#include <linux/syscore_ops.h>
|
|
|
|
+#include <asm/delay.h>
|
|
+
|
|
/*
|
|
* Timer block registers.
|
|
*/
|
|
@@ -249,6 +251,15 @@ struct syscore_ops armada_370_xp_timer_syscore_ops = {
|
|
.resume = armada_370_xp_timer_resume,
|
|
};
|
|
|
|
+static unsigned long armada_370_delay_timer_read(void)
|
|
+{
|
|
+ return ~readl(timer_base + TIMER0_VAL_OFF);
|
|
+}
|
|
+
|
|
+static struct delay_timer armada_370_delay_timer = {
|
|
+ .read_current_timer = armada_370_delay_timer_read,
|
|
+};
|
|
+
|
|
static void __init armada_370_xp_timer_common_init(struct device_node *np)
|
|
{
|
|
u32 clr = 0, set = 0;
|
|
@@ -287,6 +298,9 @@ static void __init armada_370_xp_timer_common_init(struct device_node *np)
|
|
TIMER0_RELOAD_EN | enable_mask,
|
|
TIMER0_RELOAD_EN | enable_mask);
|
|
|
|
+ armada_370_delay_timer.freq = timer_clk;
|
|
+ register_current_timer_delay(&armada_370_delay_timer);
|
|
+
|
|
/*
|
|
* Set scale and timer for sched_clock.
|
|
*/
|
|
--
|
|
2.1.0
|
|
|