Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 355171
b: refs/heads/master
c: 23c197b
h: refs/heads/master
i:
  355169: 0e25d28
  355167: 87fab31
v: v3
  • Loading branch information
Stephen Warren committed Dec 24, 2012
1 parent ab8442c commit 453f860
Show file tree
Hide file tree
Showing 12 changed files with 43 additions and 47 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: c8d5ba1891eda2aa63800f052cb5af128283d130
refs/heads/master: 23c197b77f9553c30f9c8a5ab41279a35f135f37
3 changes: 0 additions & 3 deletions trunk/arch/arm/include/asm/mach/time.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@ struct sys_timer {
void (*init)(void);
void (*suspend)(void);
void (*resume)(void);
#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
unsigned long (*offset)(void);
#endif
};

extern void timer_tick(void);
Expand Down
14 changes: 0 additions & 14 deletions trunk/arch/arm/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,6 @@ unsigned long profile_pc(struct pt_regs *regs)
EXPORT_SYMBOL(profile_pc);
#endif

#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
static u32 arm_gettimeoffset(void)
{
if (system_timer->offset != NULL)
return system_timer->offset() * 1000;

return 0;
}
#endif /* CONFIG_ARCH_USES_GETTIMEOFFSET */

#ifndef CONFIG_GENERIC_CLOCKEVENTS
/*
* Kernel system timer support.
Expand Down Expand Up @@ -164,10 +154,6 @@ device_initcall(timer_init_syscore_ops);

void __init time_init(void)
{
#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
arch_gettimeoffset = arm_gettimeoffset;
#endif

system_timer = machine_desc->timer;
system_timer->init();
sched_clock_postinit();
Expand Down
8 changes: 5 additions & 3 deletions trunk/arch/arm/mach-at91/at91x40_time.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@
#define AT91_TC_CLK1BASE 0x40
#define AT91_TC_CLK2BASE 0x80

static unsigned long at91x40_gettimeoffset(void)
static u32 at91x40_gettimeoffset(void)
{
return (at91_tc_read(AT91_TC_CLK1BASE + AT91_TC_CV) * 1000000 / (AT91X40_MASTER_CLOCK / 128));
return (at91_tc_read(AT91_TC_CLK1BASE + AT91_TC_CV) * 1000000 /
(AT91X40_MASTER_CLOCK / 128)) * 1000;
}

static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id)
Expand All @@ -64,6 +65,8 @@ void __init at91x40_timer_init(void)
{
unsigned int v;

arch_gettimeoffset = at91x40_gettimeoffset;

at91_tc_write(AT91_TC_BCR, 0);
v = at91_tc_read(AT91_TC_BMR);
v = (v & ~AT91_TC_TC1XC1S) | AT91_TC_TC1XC1S_NONE;
Expand All @@ -82,6 +85,5 @@ void __init at91x40_timer_init(void)

struct sys_timer at91x40_timer = {
.init = at91x40_timer_init,
.offset = at91x40_gettimeoffset,
};

7 changes: 4 additions & 3 deletions trunk/arch/arm/mach-ebsa110/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ static void __init ebsa110_init_early(void)
* interrupt, then the PIT counter will roll over (ie, be negative).
* This actually works out to be convenient.
*/
static unsigned long ebsa110_gettimeoffset(void)
static u32 ebsa110_gettimeoffset(void)
{
unsigned long offset, count;

Expand All @@ -181,7 +181,7 @@ static unsigned long ebsa110_gettimeoffset(void)
*/
offset = offset * (1000000 / HZ) / COUNT;

return offset;
return offset * 1000;
}

static irqreturn_t
Expand Down Expand Up @@ -215,6 +215,8 @@ static struct irqaction ebsa110_timer_irq = {
*/
static void __init ebsa110_timer_init(void)
{
arch_gettimeoffset = ebsa110_gettimeoffset;

/*
* Timer 1, mode 2, LSB/MSB
*/
Expand All @@ -227,7 +229,6 @@ static void __init ebsa110_timer_init(void)

static struct sys_timer ebsa110_timer = {
.init = ebsa110_timer_init,
.offset = ebsa110_gettimeoffset,
};

static struct plat_serial8250_port serial_platform_data[] = {
Expand Down
29 changes: 18 additions & 11 deletions trunk/arch/arm/mach-ep93xx/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -140,11 +140,29 @@ static struct irqaction ep93xx_timer_irq = {
.handler = ep93xx_timer_interrupt,
};

static u32 ep93xx_gettimeoffset(void)
{
int offset;

offset = __raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time;

/*
* Timer 4 is based on a 983.04 kHz reference clock,
* so dividing by 983040 gives the fraction of a second,
* so dividing by 0.983040 converts to uS.
* Refactor the calculation to avoid overflow.
* Finally, multiply by 1000 to give nS.
*/
return (offset + (53 * offset / 3072)) * 1000;
}

static void __init ep93xx_timer_init(void)
{
u32 tmode = EP93XX_TIMER123_CONTROL_MODE |
EP93XX_TIMER123_CONTROL_CLKSEL;

arch_gettimeoffset = ep93xx_gettimeoffset;

/* Enable periodic HZ timer. */
__raw_writel(tmode, EP93XX_TIMER1_CONTROL);
__raw_writel(TIMER1_RELOAD, EP93XX_TIMER1_LOAD);
Expand All @@ -158,19 +176,8 @@ static void __init ep93xx_timer_init(void)
setup_irq(IRQ_EP93XX_TIMER1, &ep93xx_timer_irq);
}

static unsigned long ep93xx_gettimeoffset(void)
{
int offset;

offset = __raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time;

/* Calculate (1000000 / 983040) * offset. */
return offset + (53 * offset / 3072);
}

struct sys_timer ep93xx_timer = {
.init = ep93xx_timer_init,
.offset = ep93xx_gettimeoffset,
};


Expand Down
6 changes: 3 additions & 3 deletions trunk/arch/arm/mach-h720x/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ void __init arch_dma_init(dma_t *dma)
}

/*
* Return usecs since last timer reload
* Return nsecs since last timer reload
* (timercount * (usecs perjiffie)) / (ticks per jiffie)
*/
unsigned long h720x_gettimeoffset(void)
u32 h720x_gettimeoffset(void)
{
return (CPU_REG (TIMER_VIRT, TM0_COUNT) * tick_usec) / LATCH;
return ((CPU_REG(TIMER_VIRT, TM0_COUNT) * tick_usec) / LATCH) * 1000;
}

/*
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/arm/mach-h720x/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
*
*/

extern unsigned long h720x_gettimeoffset(void);
extern u32 h720x_gettimeoffset(void);
extern void __init h720x_init_irq(void);
extern void __init h720x_map_io(void);
extern void h720x_restart(char, const char *);
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/arm/mach-h720x/cpu-h7201.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ static struct irqaction h7201_timer_irq = {
*/
void __init h7201_init_time(void)
{
arch_gettimeoffset = h720x_gettimeoffset;

CPU_REG (TIMER_VIRT, TM0_PERIOD) = LATCH;
CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_RESET;
CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_REPEAT | TM_START;
Expand All @@ -56,5 +58,4 @@ void __init h7201_init_time(void)

struct sys_timer h7201_timer = {
.init = h7201_init_time,
.offset = h720x_gettimeoffset,
};
3 changes: 2 additions & 1 deletion trunk/arch/arm/mach-h720x/cpu-h7202.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ static struct irqaction h7202_timer_irq = {
*/
void __init h7202_init_time(void)
{
arch_gettimeoffset = h720x_gettimeoffset;

CPU_REG (TIMER_VIRT, TM0_PERIOD) = LATCH;
CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_RESET;
CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_REPEAT | TM_START;
Expand All @@ -190,7 +192,6 @@ void __init h7202_init_time(void)

struct sys_timer h7202_timer = {
.init = h7202_init_time,
.offset = h720x_gettimeoffset,
};

void __init h7202_init_irq (void)
Expand Down
6 changes: 3 additions & 3 deletions trunk/arch/arm/mach-rpc/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

#include <asm/mach/time.h>

unsigned long ioc_timer_gettimeoffset(void)
static u32 ioc_timer_gettimeoffset(void)
{
unsigned int count1, count2, status;
long offset;
Expand Down Expand Up @@ -56,7 +56,7 @@ unsigned long ioc_timer_gettimeoffset(void)
}

offset = (LATCH - offset) * (tick_nsec / 1000);
return (offset + LATCH/2) / LATCH;
return ((offset + LATCH/2) / LATCH) * 1000;
}

void __init ioctime_init(void)
Expand Down Expand Up @@ -84,12 +84,12 @@ static struct irqaction ioc_timer_irq = {
*/
static void __init ioc_timer_init(void)
{
arch_gettimeoffset = ioc_timer_gettimeoffset;
ioctime_init();
setup_irq(IRQ_TIMER0, &ioc_timer_irq);
}

struct sys_timer ioc_timer = {
.init = ioc_timer_init,
.offset = ioc_timer_gettimeoffset,
};

7 changes: 4 additions & 3 deletions trunk/arch/arm/plat-samsung/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ static inline unsigned long timer_ticks_to_usec(unsigned long ticks)
* IRQs are disabled before entering here from do_gettimeofday()
*/

static unsigned long s3c2410_gettimeoffset (void)
static u32 s3c2410_gettimeoffset(void)
{
unsigned long tdone;
unsigned long tval;
Expand All @@ -120,7 +120,7 @@ static unsigned long s3c2410_gettimeoffset (void)
tdone += timer_startval;
}

return timer_ticks_to_usec(tdone);
return timer_ticks_to_usec(tdone) * 1000;
}


Expand Down Expand Up @@ -273,13 +273,14 @@ static void __init s3c2410_timer_resources(void)

static void __init s3c2410_timer_init(void)
{
arch_gettimeoffset = s3c2410_gettimeoffset;

s3c2410_timer_resources();
s3c2410_timer_setup();
setup_irq(IRQ_TIMER4, &s3c2410_timer_irq);
}

struct sys_timer s3c24xx_timer = {
.init = s3c2410_timer_init,
.offset = s3c2410_gettimeoffset,
.resume = s3c2410_timer_setup
};

0 comments on commit 453f860

Please sign in to comment.