blob: 89f1c2edbe02ee96eaf822e4bafe8139fa556062 [file] [log] [blame]
Mark Rutland06470652013-06-03 13:33:53 -07001/*
2 * linux/drivers/clocksource/dummy_timer.c
3 *
4 * Copyright (C) 2013 ARM Ltd.
5 * All Rights Reserved
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#include <linux/clockchips.h>
12#include <linux/cpu.h>
13#include <linux/init.h>
14#include <linux/percpu.h>
15#include <linux/cpumask.h>
16
17static DEFINE_PER_CPU(struct clock_event_device, dummy_timer_evt);
18
Richard Cochran00c1d172016-07-13 17:16:41 +000019static int dummy_timer_starting_cpu(unsigned int cpu)
Mark Rutland06470652013-06-03 13:33:53 -070020{
Richard Cochran00c1d172016-07-13 17:16:41 +000021 struct clock_event_device *evt = per_cpu_ptr(&dummy_timer_evt, cpu);
Mark Rutland06470652013-06-03 13:33:53 -070022
23 evt->name = "dummy_timer";
24 evt->features = CLOCK_EVT_FEAT_PERIODIC |
25 CLOCK_EVT_FEAT_ONESHOT |
26 CLOCK_EVT_FEAT_DUMMY;
27 evt->rating = 100;
Mark Rutland06470652013-06-03 13:33:53 -070028 evt->cpumask = cpumask_of(cpu);
29
30 clockevents_register_device(evt);
Richard Cochran00c1d172016-07-13 17:16:41 +000031 return 0;
Mark Rutland06470652013-06-03 13:33:53 -070032}
33
Mark Rutland06470652013-06-03 13:33:53 -070034static int __init dummy_timer_register(void)
35{
Richard Cochran00c1d172016-07-13 17:16:41 +000036 return cpuhp_setup_state(CPUHP_AP_DUMMY_TIMER_STARTING,
37 "AP_DUMMY_TIMER_STARTING",
38 dummy_timer_starting_cpu, NULL);
Mark Rutland06470652013-06-03 13:33:53 -070039}
40early_initcall(dummy_timer_register);