123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /* SPDX-License-Identifier: GPL-2.0-or-later */
- /**
- ******************************************************************************
- * @file timer.c
- * @author StarFive Technology
- * @version V1.0
- * @date 06/25/2020
- * @brief
- ******************************************************************************
- * @copy
- *
- * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
- */
- #include "platform.h"
- #include "timer.h"
- #include "sys.h"
- #include "clkgen_ctrl_macro.h"
- #define TIMER_CLK_HZ 25000000
- u64 usec_to_tick(u32 usec)
- {
- u64 value;
- value = usec*(TIMER_CLK_HZ/1000000);
- return value;
- }
- /* delay x useconds */
- void udelay(unsigned long usec)
- {
- unsigned long tmp;
- tmp = readq((volatile void *)CLINT_CTRL_MTIME) + usec_to_tick(usec); /* get current timestamp */
-
- while (readq((volatile void *)CLINT_CTRL_MTIME) < tmp);
- }
|