Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  *  linux/arch/arm/kernel/arch_timer.c
0004  *
0005  *  Copyright (C) 2011 ARM Ltd.
0006  *  All Rights Reserved
0007  */
0008 #include <linux/init.h>
0009 #include <linux/types.h>
0010 #include <linux/errno.h>
0011 
0012 #include <asm/delay.h>
0013 #include <asm/arch_timer.h>
0014 
0015 #include <clocksource/arm_arch_timer.h>
0016 
0017 static unsigned long arch_timer_read_counter_long(void)
0018 {
0019     return arch_timer_read_counter();
0020 }
0021 
0022 static struct delay_timer arch_delay_timer;
0023 
0024 static void __init arch_timer_delay_timer_register(void)
0025 {
0026     /* Use the architected timer for the delay loop. */
0027     arch_delay_timer.read_current_timer = arch_timer_read_counter_long;
0028     arch_delay_timer.freq = arch_timer_get_rate();
0029     register_current_timer_delay(&arch_delay_timer);
0030 }
0031 
0032 int __init arch_timer_arch_init(void)
0033 {
0034         u32 arch_timer_rate = arch_timer_get_rate();
0035 
0036     if (arch_timer_rate == 0)
0037         return -ENXIO;
0038 
0039     arch_timer_delay_timer_register();
0040 
0041     return 0;
0042 }