linux/arch/c6x/kernel/time.c
<<
>>
Prefs
   1/*
   2 *  Port on Texas Instruments TMS320C6x architecture
   3 *
   4 *  Copyright (C) 2004, 2009, 2010, 2011 Texas Instruments Incorporated
   5 *  Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com)
   6 *
   7 *  This program is free software; you can redistribute it and/or modify
   8 *  it under the terms of the GNU General Public License version 2 as
   9 *  published by the Free Software Foundation.
  10 */
  11
  12#include <linux/kernel.h>
  13#include <linux/clocksource.h>
  14#include <linux/errno.h>
  15#include <linux/sched.h>
  16#include <linux/param.h>
  17#include <linux/string.h>
  18#include <linux/mm.h>
  19#include <linux/interrupt.h>
  20#include <linux/timex.h>
  21#include <linux/profile.h>
  22
  23#include <asm/timer64.h>
  24
  25static u32 sched_clock_multiplier;
  26#define SCHED_CLOCK_SHIFT 16
  27
  28static cycle_t tsc_read(struct clocksource *cs)
  29{
  30        return get_cycles();
  31}
  32
  33static struct clocksource clocksource_tsc = {
  34        .name           = "timestamp",
  35        .rating         = 300,
  36        .read           = tsc_read,
  37        .mask           = CLOCKSOURCE_MASK(64),
  38        .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
  39};
  40
  41/*
  42 * scheduler clock - returns current time in nanoseconds.
  43 */
  44u64 sched_clock(void)
  45{
  46        u64 tsc = get_cycles();
  47
  48        return (tsc * sched_clock_multiplier) >> SCHED_CLOCK_SHIFT;
  49}
  50
  51void time_init(void)
  52{
  53        u64 tmp = (u64)NSEC_PER_SEC << SCHED_CLOCK_SHIFT;
  54
  55        do_div(tmp, c6x_core_freq);
  56        sched_clock_multiplier = tmp;
  57
  58        clocksource_register_hz(&clocksource_tsc, c6x_core_freq);
  59
  60        /* write anything into TSCL to enable counting */
  61        set_creg(TSCL, 0);
  62
  63        /* probe for timer64 event timer */
  64        timer64_init();
  65}
  66
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.