mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-21 03:17:18 +00:00
18ff66cb77
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
126 lines
3.8 KiB
Diff
126 lines
3.8 KiB
Diff
From 8009544b2ea8ceba920455bb7e5e267cc78d3827 Mon Sep 17 00:00:00 2001
|
|
From: Tony Lindgren <tony@atomide.com>
|
|
Date: Tue, 29 Mar 2011 15:54:49 -0700
|
|
Subject: [PATCH 013/149] omap2+: Reserve clocksource and timesource and initialize dmtimer later
|
|
|
|
There's no need to initialize the dmtimer framework early.
|
|
Just mark the clocksource and timesource as reserved, and
|
|
initialize dmtimer with an arch_initcall.
|
|
|
|
Signed-off-by: Tony Lindgren <tony@atomide.com>
|
|
Reviewed-by: Kevin Hilman <khilman@ti.com>
|
|
---
|
|
arch/arm/mach-omap1/timer32k.c | 4 ----
|
|
arch/arm/mach-omap2/timer-gp.c | 6 ++++--
|
|
arch/arm/plat-omap/dmtimer.c | 10 +++++++++-
|
|
arch/arm/plat-omap/include/plat/dmtimer.h | 3 +--
|
|
4 files changed, 14 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/arch/arm/mach-omap1/timer32k.c b/arch/arm/mach-omap1/timer32k.c
|
|
index 13d7b8f..96604a5 100644
|
|
--- a/arch/arm/mach-omap1/timer32k.c
|
|
+++ b/arch/arm/mach-omap1/timer32k.c
|
|
@@ -183,10 +183,6 @@ static __init void omap_init_32k_timer(void)
|
|
bool __init omap_32k_timer_init(void)
|
|
{
|
|
omap_init_clocksource_32k();
|
|
-
|
|
-#ifdef CONFIG_OMAP_DM_TIMER
|
|
- omap_dm_timer_init();
|
|
-#endif
|
|
omap_init_32k_timer();
|
|
|
|
return true;
|
|
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
|
|
index 578e9df..cf2ec85 100644
|
|
--- a/arch/arm/mach-omap2/timer-gp.c
|
|
+++ b/arch/arm/mach-omap2/timer-gp.c
|
|
@@ -69,6 +69,8 @@
|
|
/* MAX_GPTIMER_ID: number of GPTIMERs on the chip */
|
|
#define MAX_GPTIMER_ID 12
|
|
|
|
+u32 sys_timer_reserved;
|
|
+
|
|
/* Clockevent code */
|
|
|
|
static struct omap_dm_timer clkev;
|
|
@@ -195,6 +197,8 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
|
|
|
|
omap_hwmod_enable(oh);
|
|
|
|
+ sys_timer_reserved |= (1 << (gptimer_id - 1));
|
|
+
|
|
if (gptimer_id != 12) {
|
|
struct clk *src;
|
|
|
|
@@ -321,7 +325,6 @@ static void __init omap2_gp_clocksource_init(void)
|
|
#define OMAP_SYS_TIMER_INIT(name, clkev_nr, clkev_src) \
|
|
static void __init omap##name##_timer_init(void) \
|
|
{ \
|
|
- omap_dm_timer_init(); \
|
|
omap2_gp_clockevent_init((clkev_nr), clkev_src); \
|
|
omap2_gp_clocksource_init(); \
|
|
}
|
|
@@ -350,7 +353,6 @@ static void __init omap4_timer_init(void)
|
|
twd_base = ioremap(OMAP44XX_LOCAL_TWD_BASE, SZ_256);
|
|
BUG_ON(!twd_base);
|
|
#endif
|
|
- omap_dm_timer_init();
|
|
omap2_gp_clockevent_init(1, OMAP4_CLKEV_SOURCE);
|
|
omap2_gp_clocksource_init();
|
|
}
|
|
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
|
|
index 7c5cb4e..8dfb818 100644
|
|
--- a/arch/arm/plat-omap/dmtimer.c
|
|
+++ b/arch/arm/plat-omap/dmtimer.c
|
|
@@ -572,7 +572,7 @@ int omap_dm_timers_active(void)
|
|
}
|
|
EXPORT_SYMBOL_GPL(omap_dm_timers_active);
|
|
|
|
-int __init omap_dm_timer_init(void)
|
|
+static int __init omap_dm_timer_init(void)
|
|
{
|
|
struct omap_dm_timer *timer;
|
|
int i, map_size = SZ_8K; /* Module 4KB + L4 4KB except on omap1 */
|
|
@@ -625,8 +625,16 @@ int __init omap_dm_timer_init(void)
|
|
sprintf(clk_name, "gpt%d_fck", i + 1);
|
|
timer->fclk = clk_get(NULL, clk_name);
|
|
}
|
|
+
|
|
+ /* One or two timers may be set up early for sys_timer */
|
|
+ if (sys_timer_reserved & (1 << i)) {
|
|
+ timer->reserved = 1;
|
|
+ timer->posted = 1;
|
|
+ }
|
|
#endif
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
+
|
|
+arch_initcall(omap_dm_timer_init);
|
|
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h
|
|
index 8adcb18..d0f3a2d 100644
|
|
--- a/arch/arm/plat-omap/include/plat/dmtimer.h
|
|
+++ b/arch/arm/plat-omap/include/plat/dmtimer.h
|
|
@@ -61,8 +61,6 @@
|
|
struct omap_dm_timer;
|
|
struct clk;
|
|
|
|
-int omap_dm_timer_init(void);
|
|
-
|
|
struct omap_dm_timer *omap_dm_timer_request(void);
|
|
struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id);
|
|
void omap_dm_timer_free(struct omap_dm_timer *timer);
|
|
@@ -221,6 +219,7 @@ struct omap_dm_timer {
|
|
unsigned posted:1;
|
|
};
|
|
|
|
+extern u32 sys_timer_reserved;
|
|
void omap_dm_timer_prepare(struct omap_dm_timer *timer);
|
|
|
|
static inline u32 __omap_dm_timer_read(void __iomem *base, u32 reg,
|
|
--
|
|
1.7.2.5
|
|
|