Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 264640
b: refs/heads/master
c: bb76079
h: refs/heads/master
v: v3
  • Loading branch information
Linus Walleij authored and Russell King committed Oct 17, 2011
1 parent 6e1a253 commit 95fc9a6
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6d8ce7129f6c4c2f8716d6a771d59f263deab898
refs/heads/master: bb76079a7859fb33a23bef405517b6b653d9f649
4 changes: 4 additions & 0 deletions trunk/arch/arm/mach-integrator/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,10 @@ static struct clk_lookup lookups[] = {
{ /* Bus clock */
.con_id = "apb_pclk",
.clk = &dummy_apb_pclk,
}, {
/* Integrator/AP timer frequency */
.dev_id = "ap_timer",
.clk = &clk24mhz,
}, { /* UART0 */
.dev_id = "mb:16",
.clk = &uartclk,
Expand Down
12 changes: 0 additions & 12 deletions trunk/arch/arm/mach-integrator/include/mach/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* DO NOT EDIT!! - this file automatically generated
* from .s file by awk -f s2h.awk
*/
/**************************************************************************
* * Copyright © ARM Limited 1998. All rights reserved.
* ***********************************************************************/
Expand Down Expand Up @@ -399,15 +396,6 @@
#define INTEGRATOR_TIMER1_BASE (INTEGRATOR_CT_BASE + 0x100)
#define INTEGRATOR_TIMER2_BASE (INTEGRATOR_CT_BASE + 0x200)

#define TICKS_PER_uSEC 24

/*
* These are useconds NOT ticks.
*
*/
#define mSEC_1 1000
#define mSEC_10 (mSEC_1 * 10)

#define INTEGRATOR_CSR_BASE 0x10000000
#define INTEGRATOR_CSR_SIZE 0x10000000

Expand Down
37 changes: 23 additions & 14 deletions trunk/arch/arm/mach-integrator/integrator_ap.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/mtd/physmap.h>
#include <linux/clk.h>

#include <mach/hardware.h>
#include <mach/platform.h>
Expand Down Expand Up @@ -322,21 +323,22 @@ static void __init ap_init(void)

static unsigned long timer_reload;

static void integrator_clocksource_init(u32 khz)
static void integrator_clocksource_init(unsigned long inrate)
{
void __iomem *base = (void __iomem *)TIMER2_VA_BASE;
u32 ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC;
unsigned long rate = inrate;

if (khz >= 1500) {
khz /= 16;
if (rate >= 1500000) {
rate /= 16;
ctrl |= TIMER_CTRL_DIV16;
}

writel(0xffff, base + TIMER_LOAD);
writel(ctrl, base + TIMER_CTRL);

clocksource_mmio_init(base + TIMER_VALUE, "timer2",
khz * 1000, 200, 16, clocksource_mmio_readl_down);
rate, 200, 16, clocksource_mmio_readl_down);
}

static void __iomem * const clkevt_base = (void __iomem *)TIMER1_VA_BASE;
Expand Down Expand Up @@ -411,24 +413,25 @@ static struct irqaction integrator_timer_irq = {
.dev_id = &integrator_clockevent,
};

static void integrator_clockevent_init(u32 khz)
static void integrator_clockevent_init(unsigned long inrate)
{
unsigned long rate = inrate;
unsigned int ctrl = 0;

/* Calculate and program a divisor */
if (khz * 1000 > 0x100000 * HZ) {
khz /= 256;
if (rate > 0x100000 * HZ) {
rate /= 256;
ctrl |= TIMER_CTRL_DIV256;
} else if (khz * 1000 > 0x10000 * HZ) {
khz /= 16;
} else if (rate > 0x10000 * HZ) {
rate /= 16;
ctrl |= TIMER_CTRL_DIV16;
}
timer_reload = khz * 1000 / HZ;
timer_reload = rate / HZ;
writel(ctrl, clkevt_base + TIMER_CTRL);

setup_irq(IRQ_TIMERINT1, &integrator_timer_irq);
clockevents_config_and_register(&integrator_clockevent,
khz * 1000,
rate,
1,
0xffffU);
}
Expand All @@ -438,14 +441,20 @@ static void integrator_clockevent_init(u32 khz)
*/
static void __init ap_init_timer(void)
{
u32 khz = TICKS_PER_uSEC * 1000;
struct clk *clk;
unsigned long rate;

clk = clk_get_sys("ap_timer", NULL);
BUG_ON(IS_ERR(clk));
clk_enable(clk);
rate = clk_get_rate(clk);

writel(0, TIMER0_VA_BASE + TIMER_CTRL);
writel(0, TIMER1_VA_BASE + TIMER_CTRL);
writel(0, TIMER2_VA_BASE + TIMER_CTRL);

integrator_clocksource_init(khz);
integrator_clockevent_init(khz);
integrator_clocksource_init(rate);
integrator_clockevent_init(rate);
}

static struct sys_timer ap_timer = {
Expand Down

0 comments on commit 95fc9a6

Please sign in to comment.