mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 09:31:50 +00:00
ARM: 7451/1: arch timer: implement read_current_timer and get_cycles
This patch implements read_current_timer using the architected timers when they are selected via CONFIG_ARM_ARCH_TIMER. If they are detected not to be usable at runtime, we return -ENXIO to the caller. Furthermore, if read_current_timer is exported then we can implement get_cycles in terms of it for use as both an entropy source and for implementing __udelay and friends. Tested-by: Shinya Kuribayashi <shinya.kuribayashi.px@renesas.com> Reviewed-by: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
f8f5701bda
commit
923df96b9f
@ -1,7 +1,10 @@
|
||||
#ifndef __ASMARM_ARCH_TIMER_H
|
||||
#define __ASMARM_ARCH_TIMER_H
|
||||
|
||||
#include <asm/errno.h>
|
||||
|
||||
#ifdef CONFIG_ARM_ARCH_TIMER
|
||||
#define ARCH_HAS_READ_CURRENT_TIMER
|
||||
int arch_timer_of_register(void);
|
||||
int arch_timer_sched_clock_init(void);
|
||||
#else
|
||||
|
@ -12,13 +12,15 @@
|
||||
#ifndef _ASMARM_TIMEX_H
|
||||
#define _ASMARM_TIMEX_H
|
||||
|
||||
#include <asm/arch_timer.h>
|
||||
#include <mach/timex.h>
|
||||
|
||||
typedef unsigned long cycles_t;
|
||||
|
||||
static inline cycles_t get_cycles (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#ifdef ARCH_HAS_READ_CURRENT_TIMER
|
||||
#define get_cycles() ({ cycles_t c; read_current_timer(&c) ? 0 : c; })
|
||||
#else
|
||||
#define get_cycles() (0)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -223,6 +223,14 @@ static cycle_t arch_counter_read(struct clocksource *cs)
|
||||
return arch_counter_get_cntpct();
|
||||
}
|
||||
|
||||
int read_current_timer(unsigned long *timer_val)
|
||||
{
|
||||
if (!arch_timer_rate)
|
||||
return -ENXIO;
|
||||
*timer_val = arch_counter_get_cntpct();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct clocksource clocksource_counter = {
|
||||
.name = "arch_sys_counter",
|
||||
.rating = 400,
|
||||
|
Loading…
Reference in New Issue
Block a user