Skip to content

Commit

Permalink
omap2+: Reserve clocksource and timesource and initialize dmtimer later
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tony Lindgren committed Jun 27, 2011
1 parent 98e182a commit 11a0186
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 9 deletions.
4 changes: 0 additions & 4 deletions arch/arm/mach-omap1/timer32k.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 4 additions & 2 deletions arch/arm/mach-omap2/timer-gp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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(); \
}
Expand Down Expand Up @@ -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();
}
Expand Down
10 changes: 9 additions & 1 deletion arch/arm/plat-omap/dmtimer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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);
3 changes: 1 addition & 2 deletions arch/arm/plat-omap/include/plat/dmtimer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 11a0186

Please sign in to comment.