blob: a6dfe265fe42046de6427ebdf2e9016313bac8cc [file] [log] [blame]
jinkun.hongac490b82014-06-22 20:40:39 -07001/*
2 * This file is part of the coreboot project.
3 *
4 * Copyright 2014 Rockchip Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
Patrick Georgib890a122015-03-26 15:17:45 +010017 * Foundation, Inc.
jinkun.hongac490b82014-06-22 20:40:39 -070018 */
19
Julius Werner7a453eb2014-10-20 13:14:55 -070020#include <arch/io.h>
jinkun.hongac490b82014-06-22 20:40:39 -070021#include <delay.h>
Julius Werner7a453eb2014-10-20 13:14:55 -070022#include <soc/timer.h>
Julius Werner8d978a82014-12-08 13:16:03 -080023#include <stdint.h>
Julius Werner7a453eb2014-10-20 13:14:55 -070024#include <timer.h>
jinkun.hongac490b82014-06-22 20:40:39 -070025
Julius Werner8d978a82014-12-08 13:16:03 -080026static uint64_t timer_raw_value(void)
27{
28 uint64_t value0;
29 uint64_t value1;
30
31 value0 = (uint64_t)read32(&timer7_ptr->timer_curr_value0);
32 value1 = (uint64_t)read32(&timer7_ptr->timer_curr_value1);
33 value0 = value0 | value1<<32;
34 return value0;
35}
36
37void timer_monotonic_get(struct mono_time *mt)
38{
39 mono_time_set_usecs(mt, timer_raw_value() / clocks_per_usec);
40}
41
Julius Werner44cf8702014-12-08 13:39:14 -080042void init_timer(void)
jinkun.hongac490b82014-06-22 20:40:39 -070043{
Julius Werner2f37bd62015-02-19 14:51:15 -080044 write32(&timer7_ptr->timer_load_count0, TIMER_LOAD_VAL);
45 write32(&timer7_ptr->timer_load_count1, TIMER_LOAD_VAL);
46 write32(&timer7_ptr->timer_ctrl_reg, 1);
jinkun.hongac490b82014-06-22 20:40:39 -070047}