Explorar o código

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>
Mikael Pettersson %!s(int64=15) %!d(string=hai) anos
pai
achega
345a32296b
Modificáronse 2 ficheiros con 12 adicións e 1 borrados
  1. 1 1
      arch/arm/mm/proc-xsc3.S
  2. 11 0
      arch/arm/plat-iop/time.c

+ 1 - 1
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

+ 11 - 0
arch/arm/plat-iop/time.c

@@ -65,6 +65,17 @@ static void __init iop_clocksource_set_hz(struct clocksource *cs, unsigned int h
 	       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).
  */