cregit-Linux how code gets into the kernel

Release 4.11 arch/arm/plat-iop/time.c

/*
 * arch/arm/plat-iop/time.c
 *
 * Timer code for IOP32x and IOP33x based systems
 *
 * Author: Deepak Saxena <dsaxena@mvista.com>
 *
 * Copyright 2002-2003 MontaVista Software Inc.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.
 */

#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/time.h>
#include <linux/init.h>
#include <linux/timex.h>
#include <linux/io.h>
#include <linux/clocksource.h>
#include <linux/clockchips.h>
#include <linux/export.h>
#include <linux/sched_clock.h>
#include <mach/hardware.h>
#include <asm/irq.h>
#include <linux/uaccess.h>
#include <asm/mach/irq.h>
#include <asm/mach/time.h>
#include <mach/time.h>

/*
 * Minimum clocksource/clockevent timer range in seconds
 */

#define IOP_MIN_RANGE 4

/*
 * IOP clocksource (free-running timer 1).
 */

static u64 notrace iop_clocksource_read(struct clocksource *unused) { return 0xffffffffu - read_tcr1(); }

Contributors

PersonTokensPropCommitsCommitProp
Mikael Pettersson1688.89%133.33%
Rabin Vincent15.56%133.33%
Thomas Gleixner15.56%133.33%
Total18100.00%3100.00%

static struct clocksource iop_clocksource = { .name = "iop_timer1", .rating = 300, .read = iop_clocksource_read, .mask = CLOCKSOURCE_MASK(32), .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; /* * IOP sched_clock() implementation via its clocksource. */
static u64 notrace iop_read_sched_clock(void) { return 0xffffffffu - read_tcr1(); }

Contributors

PersonTokensPropCommitsCommitProp
Russell King1066.67%125.00%
Marc Zyngier320.00%125.00%
Stephen Boyd16.67%125.00%
Mikael Pettersson16.67%125.00%
Total15100.00%4100.00%

/* * IOP clockevents (interrupting timer 0). */
static int iop_set_next_event(unsigned long delta, struct clock_event_device *unused) { u32 tmr = IOP_TMR_PRIVILEGED | IOP_TMR_RATIO_1_1; BUG_ON(delta == 0); write_tmr0(tmr & ~(IOP_TMR_EN | IOP_TMR_RELOAD)); write_tcr0(delta); write_tmr0((tmr & ~IOP_TMR_RELOAD) | IOP_TMR_EN); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Mikael Pettersson61100.00%1100.00%
Total61100.00%1100.00%

static unsigned long ticks_per_jiffy;
static int iop_set_periodic(struct clock_event_device *evt) { u32 tmr = read_tmr0(); write_tmr0(tmr & ~IOP_TMR_EN); write_tcr0(ticks_per_jiffy - 1); write_trr0(ticks_per_jiffy - 1); tmr |= (IOP_TMR_RELOAD | IOP_TMR_EN); write_tmr0(tmr); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Mikael Pettersson3665.45%133.33%
Viresh Kumar1221.82%133.33%
Russell King712.73%133.33%
Total55100.00%3100.00%


static int iop_set_oneshot(struct clock_event_device *evt) { u32 tmr = read_tmr0(); /* ->set_next_event sets period and enables timer */ tmr &= ~(IOP_TMR_RELOAD | IOP_TMR_EN); write_tmr0(tmr); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Viresh Kumar2365.71%150.00%
Mikael Pettersson1234.29%150.00%
Total35100.00%2100.00%


static int iop_shutdown(struct clock_event_device *evt) { u32 tmr = read_tmr0(); tmr &= ~IOP_TMR_EN; write_tmr0(tmr); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Viresh Kumar2480.00%150.00%
Mikael Pettersson620.00%150.00%
Total30100.00%2100.00%


static int iop_resume(struct clock_event_device *evt) { u32 tmr = read_tmr0(); tmr |= IOP_TMR_EN; write_tmr0(tmr); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Viresh Kumar2379.31%150.00%
Mikael Pettersson620.69%150.00%
Total29100.00%2100.00%

static struct clock_event_device iop_clockevent = { .name = "iop_timer0", .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, .rating = 300, .set_next_event = iop_set_next_event, .set_state_shutdown = iop_shutdown, .set_state_periodic = iop_set_periodic, .tick_resume = iop_resume, .set_state_oneshot = iop_set_oneshot, };
static irqreturn_t iop_timer_interrupt(int irq, void *dev_id) { struct clock_event_device *evt = dev_id; write_tisr(1); evt->event_handler(evt); return IRQ_HANDLED; }

Contributors

PersonTokensPropCommitsCommitProp
Lennert Buytenhek1851.43%133.33%
Mikael Pettersson1131.43%133.33%
Dan J Williams617.14%133.33%
Total35100.00%3100.00%

static struct irqaction iop_timer_irq = { .name = "IOP Timer Tick", .handler = iop_timer_interrupt, .flags = IRQF_TIMER | IRQF_IRQPOLL, .dev_id = &iop_clockevent, }; static unsigned long iop_tick_rate;
unsigned long get_iop_tick_rate(void) { return iop_tick_rate; }

Contributors

PersonTokensPropCommitsCommitProp
Dan J Williams11100.00%1100.00%
Total11100.00%1100.00%

EXPORT_SYMBOL(get_iop_tick_rate);
void __init iop_init_time(unsigned long tick_rate) { u32 timer_ctl; sched_clock_register(iop_read_sched_clock, 32, tick_rate); ticks_per_jiffy = DIV_ROUND_CLOSEST(tick_rate, HZ); iop_tick_rate = tick_rate; timer_ctl = IOP_TMR_EN | IOP_TMR_PRIVILEGED | IOP_TMR_RELOAD | IOP_TMR_RATIO_1_1; /* * Set up interrupting clockevent timer 0. */ write_tmr0(timer_ctl & ~IOP_TMR_EN); write_tisr(1); setup_irq(IRQ_IOP_TIMER0, &iop_timer_irq); iop_clockevent.cpumask = cpumask_of(0); clockevents_config_and_register(&iop_clockevent, tick_rate, 0xf, 0xfffffffe); /* * Set up free-running clocksource timer 1. */ write_trr1(0xffffffff); write_tcr1(0xffffffff); write_tmr1(timer_ctl); clocksource_register_hz(&iop_clocksource, tick_rate); }

Contributors

PersonTokensPropCommitsCommitProp
Mikael Pettersson4439.29%216.67%
Lennert Buytenhek2320.54%18.33%
Dan J Williams1916.96%216.67%
Russell King1311.61%325.00%
Shawn Guo76.25%18.33%
Julia Lawall43.57%18.33%
Stephen Boyd10.89%18.33%
Marc Zyngier10.89%18.33%
Total112100.00%12100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Mikael Pettersson27546.85%313.04%
Viresh Kumar9916.87%14.35%
Lennert Buytenhek9516.18%14.35%
Dan J Williams518.69%28.70%
Russell King345.79%521.74%
Shawn Guo71.19%14.35%
Stephen Boyd50.85%28.70%
Linus Walleij50.85%14.35%
Marc Zyngier40.68%14.35%
Julia Lawall40.68%14.35%
Paul Gortmaker30.51%14.35%
Bernhard Walle20.34%14.35%
Thomas Gleixner10.17%14.35%
Linus Torvalds10.17%14.35%
Rabin Vincent10.17%14.35%
Total587100.00%23100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.