blob: 6cee6dce5605cb20cca0323ff5de848d4b86e2ca [file] [log] [blame]
Thomas Gleixnerd2912cb2019-06-04 10:11:33 +02001// SPDX-License-Identifier: GPL-2.0-only
Mark Rutland06470652013-06-03 13:33:53 -07002/*
3 * linux/drivers/clocksource/dummy_timer.c
4 *
5 * Copyright (C) 2013 ARM Ltd.
6 * All Rights Reserved
Mark Rutland06470652013-06-03 13:33:53 -07007 */
8#include <linux/clockchips.h>
9#include <linux/cpu.h>
10#include <linux/init.h>
11#include <linux/percpu.h>
12#include <linux/cpumask.h>
13
14static DEFINE_PER_CPU(struct clock_event_device, dummy_timer_evt);
15
Richard Cochran00c1d172016-07-13 17:16:41 +000016static int dummy_timer_starting_cpu(unsigned int cpu)
Mark Rutland06470652013-06-03 13:33:53 -070017{
Richard Cochran00c1d172016-07-13 17:16:41 +000018 struct clock_event_device *evt = per_cpu_ptr(&dummy_timer_evt, cpu);
Mark Rutland06470652013-06-03 13:33:53 -070019
20 evt->name = "dummy_timer";
21 evt->features = CLOCK_EVT_FEAT_PERIODIC |
22 CLOCK_EVT_FEAT_ONESHOT |
23 CLOCK_EVT_FEAT_DUMMY;
24 evt->rating = 100;
Mark Rutland06470652013-06-03 13:33:53 -070025 evt->cpumask = cpumask_of(cpu);
26
27 clockevents_register_device(evt);
Richard Cochran00c1d172016-07-13 17:16:41 +000028 return 0;
Mark Rutland06470652013-06-03 13:33:53 -070029}
30
Mark Rutland06470652013-06-03 13:33:53 -070031static int __init dummy_timer_register(void)
32{
Richard Cochran00c1d172016-07-13 17:16:41 +000033 return cpuhp_setup_state(CPUHP_AP_DUMMY_TIMER_STARTING,
Thomas Gleixner73c1b412016-12-21 20:19:54 +010034 "clockevents/dummy_timer:starting",
Richard Cochran00c1d172016-07-13 17:16:41 +000035 dummy_timer_starting_cpu, NULL);
Mark Rutland06470652013-06-03 13:33:53 -070036}
37early_initcall(dummy_timer_register);