mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-09-21 20:04:01 +00:00
ARM: timer-sp: add sched_clock support
Add a sched_clock support for the sp804 timer. The clocksource timer can optionally initialize itself as sched_clock timer. Signed-off-by: Rob Herring <rob.herring@calxeda.com>
This commit is contained in:
parent
d65b4e98d7
commit
a7bf616208
3 changed files with 31 additions and 2 deletions
|
@ -1127,6 +1127,7 @@ config PLAT_VERSATILE
|
||||||
config ARM_TIMER_SP804
|
config ARM_TIMER_SP804
|
||||||
bool
|
bool
|
||||||
select CLKSRC_MMIO
|
select CLKSRC_MMIO
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
|
|
||||||
source arch/arm/mm/Kconfig
|
source arch/arm/mm/Kconfig
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
#include <asm/sched_clock.h>
|
||||||
#include <asm/hardware/arm_timer.h>
|
#include <asm/hardware/arm_timer.h>
|
||||||
|
|
||||||
static long __init sp804_get_clock_rate(const char *name)
|
static long __init sp804_get_clock_rate(const char *name)
|
||||||
|
@ -67,7 +68,16 @@ static long __init sp804_get_clock_rate(const char *name)
|
||||||
return rate;
|
return rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init sp804_clocksource_init(void __iomem *base, const char *name)
|
static void __iomem *sched_clock_base;
|
||||||
|
|
||||||
|
static u32 sp804_read(void)
|
||||||
|
{
|
||||||
|
return ~readl_relaxed(sched_clock_base + TIMER_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init __sp804_clocksource_and_sched_clock_init(void __iomem *base,
|
||||||
|
const char *name,
|
||||||
|
int use_sched_clock)
|
||||||
{
|
{
|
||||||
long rate = sp804_get_clock_rate(name);
|
long rate = sp804_get_clock_rate(name);
|
||||||
|
|
||||||
|
@ -83,6 +93,11 @@ void __init sp804_clocksource_init(void __iomem *base, const char *name)
|
||||||
|
|
||||||
clocksource_mmio_init(base + TIMER_VALUE, name,
|
clocksource_mmio_init(base + TIMER_VALUE, name,
|
||||||
rate, 200, 32, clocksource_mmio_readl_down);
|
rate, 200, 32, clocksource_mmio_readl_down);
|
||||||
|
|
||||||
|
if (use_sched_clock) {
|
||||||
|
sched_clock_base = base;
|
||||||
|
setup_sched_clock(sp804_read, 32, rate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,15 @@
|
||||||
void sp804_clocksource_init(void __iomem *, const char *);
|
void __sp804_clocksource_and_sched_clock_init(void __iomem *,
|
||||||
|
const char *, int);
|
||||||
|
|
||||||
|
static inline void sp804_clocksource_init(void __iomem *base, const char *name)
|
||||||
|
{
|
||||||
|
__sp804_clocksource_and_sched_clock_init(base, name, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void sp804_clocksource_and_sched_clock_init(void __iomem *base,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
__sp804_clocksource_and_sched_clock_init(base, name, 1);
|
||||||
|
}
|
||||||
|
|
||||||
void sp804_clockevents_init(void __iomem *, unsigned int, const char *);
|
void sp804_clockevents_init(void __iomem *, unsigned int, const char *);
|
||||||
|
|
Loading…
Reference in a new issue