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>
This commit is contained in:
Mikael Pettersson 2009-10-29 11:46:56 -07:00 committed by Dan Williams
parent 980f2296b5
commit 345a32296b
2 changed files with 12 additions and 1 deletions

View File

@ -396,7 +396,7 @@ __xsc3_setup:
orr r4, r4, #0x18 @ cache the page table in L2 orr r4, r4, #0x18 @ cache the page table in L2
mcr p15, 0, r4, c2, c0, 0 @ load page table pointer 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 mcr p15, 0, r0, c15, c1, 0 @ write CP access register
mrc p15, 0, r0, c1, c0, 1 @ get auxiliary control reg mrc p15, 0, r0, c1, c0, 1 @ get auxiliary control reg

View File

@ -65,6 +65,17 @@ static void __init iop_clocksource_set_hz(struct clocksource *cs, unsigned int h
cs->name, cs->shift, cs->mult); cs->name, cs->shift, cs->mult);
} }
/*
* 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). * IOP clockevents (interrupting timer 0).
*/ */