static void tpu_clocksource_disable(struct clocksource *cs) { struct tpu_priv *p = cs_to_priv(cs); WARN_ON(!p->cs_enabled); iowrite8(0, p->mapbase1 + TCR); iowrite8(0, p->mapbase2 + TCR); p->cs_enabled = false; }
static u64 timer16_clocksource_read(struct clocksource *cs) { struct timer16_priv *p = cs_to_priv(cs); unsigned long raw, value; value = p->total_cycles; raw = timer16_get_counter(p); return value + raw; }
static void timer16_disable(struct clocksource *cs) { struct timer16_priv *p = cs_to_priv(cs); WARN_ON(!p->cs_enabled); bclr(p->ovie, p->mapcommon + TISRC); bclr(p->enb, p->mapcommon + TSTR); p->cs_enabled = false; }
static cycle_t tpu_clocksource_read(struct clocksource *cs) { struct tpu_priv *p = cs_to_priv(cs); unsigned long flags; unsigned long long value; raw_spin_lock_irqsave(&p->lock, flags); if (tpu_get_counter(p, &value)) value += 0x100000000; raw_spin_unlock_irqrestore(&p->lock, flags); return value; }
static int tpu_clocksource_enable(struct clocksource *cs) { struct tpu_priv *p = cs_to_priv(cs); WARN_ON(p->cs_enabled); iowrite16be(0, p->mapbase1 + TCNT); iowrite16be(0, p->mapbase2 + TCNT); iowrite8(0x0f, p->mapbase1 + TCR); iowrite8(0x03, p->mapbase2 + TCR); p->cs_enabled = true; return 0; }
static int timer16_enable(struct clocksource *cs) { struct timer16_priv *p = cs_to_priv(cs); WARN_ON(p->cs_enabled); p->total_cycles = 0; iowrite16be(0x0000, p->mapbase + TCNT); iowrite8(0x83, p->mapbase + TCR); bset(p->ovie, p->mapcommon + TISRC); bset(p->enb, p->mapcommon + TSTR); p->cs_enabled = true; return 0; }