1 | // SPDX-License-Identifier: GPL-2.0-only |
---|---|
2 | /* |
3 | * linux/arch/arm/kernel/arch_timer.c |
4 | * |
5 | * Copyright (C) 2011 ARM Ltd. |
6 | * All Rights Reserved |
7 | */ |
8 | #include <linux/init.h> |
9 | #include <linux/types.h> |
10 | #include <linux/errno.h> |
11 | |
12 | #include <asm/delay.h> |
13 | #include <asm/arch_timer.h> |
14 | |
15 | #include <clocksource/arm_arch_timer.h> |
16 | |
17 | static unsigned long arch_timer_read_counter_long(void) |
18 | { |
19 | return arch_timer_read_counter(); |
20 | } |
21 | |
22 | static struct delay_timer arch_delay_timer; |
23 | |
24 | static void __init arch_timer_delay_timer_register(void) |
25 | { |
26 | /* Use the architected timer for the delay loop. */ |
27 | arch_delay_timer.read_current_timer = arch_timer_read_counter_long; |
28 | arch_delay_timer.freq = arch_timer_get_rate(); |
29 | register_current_timer_delay(&arch_delay_timer); |
30 | } |
31 | |
32 | int __init arch_timer_arch_init(void) |
33 | { |
34 | u32 arch_timer_rate = arch_timer_get_rate(); |
35 | |
36 | if (arch_timer_rate == 0) |
37 | return -ENXIO; |
38 | |
39 | arch_timer_delay_timer_register(); |
40 | |
41 | return 0; |
42 | } |
43 |