From 95a80e5d71825e27d466ea541065ca9f26a8c9d3 Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 12 May 2011 15:45:16 +0100 Subject: [PATCH] --- yaml --- r: 249922 b: refs/heads/master c: 23828a7a976eb8dbe3b5f4e83584c3fe814b295b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/arm/common/timer-sp.c | 16 ++++++++-------- trunk/arch/arm/mach-vexpress/ct-ca9x4.c | 4 ++++ trunk/arch/arm/mach-vexpress/v2m.c | 4 ++++ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 6f39b5ddc441..251b3bb29866 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 57cc4f7de2b896ca79185e337eaf7ff9906c4656 +refs/heads/master: 23828a7a976eb8dbe3b5f4e83584c3fe814b295b diff --git a/trunk/arch/arm/common/timer-sp.c b/trunk/arch/arm/common/timer-sp.c index 5b7e8c9046be..41df47875122 100644 --- a/trunk/arch/arm/common/timer-sp.c +++ b/trunk/arch/arm/common/timer-sp.c @@ -28,12 +28,6 @@ #include -/* - * These timers are currently always setup to be clocked at 1MHz. - */ -#define TIMER_FREQ_KHZ (1000) -#define TIMER_RELOAD (TIMER_FREQ_KHZ * 1000 / HZ) - static long __init sp804_get_clock_rate(const char *name) { struct clk *clk; @@ -84,6 +78,7 @@ void __init sp804_clocksource_init(void __iomem *base, const char *name) static void __iomem *clkevt_base; +static unsigned long clkevt_reload; /* * IRQ handler for the timer @@ -109,7 +104,7 @@ static void sp804_set_mode(enum clock_event_mode mode, switch (mode) { case CLOCK_EVT_MODE_PERIODIC: - writel(TIMER_RELOAD, clkevt_base + TIMER_LOAD); + writel(clkevt_reload, clkevt_base + TIMER_LOAD); ctrl |= TIMER_CTRL_PERIODIC | TIMER_CTRL_ENABLE; break; @@ -158,12 +153,17 @@ void __init sp804_clockevents_init(void __iomem *base, unsigned int irq, const char *name) { struct clock_event_device *evt = &sp804_clockevent; + long rate = sp804_get_clock_rate(name); + + if (rate < 0) + return; clkevt_base = base; + clkevt_reload = DIV_ROUND_CLOSEST(rate, HZ); evt->name = name; evt->irq = irq; - evt->mult = div_sc(TIMER_FREQ_KHZ, NSEC_PER_MSEC, evt->shift); + evt->mult = div_sc(rate, NSEC_PER_SEC, evt->shift); evt->max_delta_ns = clockevent_delta2ns(0xffffffff, evt); evt->min_delta_ns = clockevent_delta2ns(0xf, evt); diff --git a/trunk/arch/arm/mach-vexpress/ct-ca9x4.c b/trunk/arch/arm/mach-vexpress/ct-ca9x4.c index 271213384203..2023a9e5211c 100644 --- a/trunk/arch/arm/mach-vexpress/ct-ca9x4.c +++ b/trunk/arch/arm/mach-vexpress/ct-ca9x4.c @@ -150,6 +150,10 @@ static struct clk_lookup lookups[] = { { /* CLCD */ .dev_id = "ct:clcd", .clk = &osc1_clk, + }, { /* SP804 timers */ + .dev_id = "sp804", + .con_id = "ct-timer0", + .clk = &ct_sp804_clk, }, { /* SP804 timers */ .dev_id = "sp804", .con_id = "ct-timer1", diff --git a/trunk/arch/arm/mach-vexpress/v2m.c b/trunk/arch/arm/mach-vexpress/v2m.c index f6fecdd0fbe8..9d9d4af384e2 100644 --- a/trunk/arch/arm/mach-vexpress/v2m.c +++ b/trunk/arch/arm/mach-vexpress/v2m.c @@ -368,6 +368,10 @@ static struct clk_lookup v2m_lookups[] = { }, { /* CLCD */ .dev_id = "mb:clcd", .clk = &osc1_clk, + }, { /* SP804 timers */ + .dev_id = "sp804", + .con_id = "v2m-timer0", + .clk = &v2m_sp804_clk, }, { /* SP804 timers */ .dev_id = "sp804", .con_id = "v2m-timer1",