linux/arch/arm/kernel/arch_timer.c
<<
>>
Prefs
   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
  17static unsigned long arch_timer_read_counter_long(void)
  18{
  19        return arch_timer_read_counter();
  20}
  21
  22static struct delay_timer arch_delay_timer;
  23
  24static 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
  32int __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