summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorMikael Pettersson <mikpe@it.uu.se>2009-10-29 11:46:56 -0700
committerDan Williams <dan.j.williams@intel.com>2009-10-29 11:46:56 -0700
commit345a32296b1f9f6121379e0240915e0e2be2dbf5 (patch)
tree995ad5887af10b11b2cbc48e8936f7f7d9fbb109 /arch/arm
parent980f2296b5a8dfe589f023fd34229dcfdcf280fa (diff)
downloadlinux-3.10-345a32296b1f9f6121379e0240915e0e2be2dbf5.tar.gz
linux-3.10-345a32296b1f9f6121379e0240915e0e2be2dbf5.tar.bz2
linux-3.10-345a32296b1f9f6121379e0240915e0e2be2dbf5.zip
iop: implement sched_clock()
This adds a better sched_clock() to the IOP platform, implemented using its new clocksource support. Tested on n2100, compile-tested for all plat-iop machines. [dan.j.williams@intel.com: allow early cp6 access] Signed-off-by: Mikael Pettersson <mikpe@it.uu.se> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mm/proc-xsc3.S2
-rw-r--r--arch/arm/plat-iop/time.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S
index 2028f370288..fab134e2982 100644
--- a/arch/arm/mm/proc-xsc3.S
+++ b/arch/arm/mm/proc-xsc3.S
@@ -396,7 +396,7 @@ __xsc3_setup:
orr r4, r4, #0x18 @ cache the page table in L2
mcr p15, 0, r4, c2, c0, 0 @ load page table pointer
- mov r0, #0 @ don't allow CP access
+ mov r0, #1 << 6 @ cp6 access for early sched_clock
mcr p15, 0, r0, c15, c1, 0 @ write CP access register
mrc p15, 0, r0, c1, c0, 1 @ get auxiliary control reg
diff --git a/arch/arm/plat-iop/time.c b/arch/arm/plat-iop/time.c
index aaaef3b4bc6..6c8a02ad98e 100644
--- a/arch/arm/plat-iop/time.c
+++ b/arch/arm/plat-iop/time.c
@@ -66,6 +66,17 @@ static void __init iop_clocksource_set_hz(struct clocksource *cs, unsigned int h
}
/*
+ * IOP sched_clock() implementation via its clocksource.
+ */
+unsigned long long sched_clock(void)
+{
+ cycle_t cyc = iop_clocksource_read(NULL);
+ struct clocksource *cs = &iop_clocksource;
+
+ return clocksource_cyc2ns(cyc, cs->mult, cs->shift);
+}
+
+/*
* IOP clockevents (interrupting timer 0).
*/
static int iop_set_next_event(unsigned long delta,