projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
board: ls1012a: LS1012A-2G5RDB board support
[oweals/u-boot.git]
/
arch
/
arm
/
cpu
/
armv8
/
generic_timer.c
diff --git
a/arch/arm/cpu/armv8/generic_timer.c
b/arch/arm/cpu/armv8/generic_timer.c
index 223b95e210edd7146c6a8549bbf7f43b362d105b..a2dda333fe5f63979f5b4d4fbf4d40b18ff9934d 100644
(file)
--- a/
arch/arm/cpu/armv8/generic_timer.c
+++ b/
arch/arm/cpu/armv8/generic_timer.c
@@
-9,6
+9,8
@@
#include <command.h>
#include <asm/system.h>
#include <command.h>
#include <asm/system.h>
+DECLARE_GLOBAL_DATA_PTR;
+
/*
* Generic timer implementation of get_tbclk()
*/
/*
* Generic timer implementation of get_tbclk()
*/
@@
-25,7
+27,38
@@
unsigned long get_tbclk(void)
unsigned long timer_read_counter(void)
{
unsigned long cntpct;
unsigned long timer_read_counter(void)
{
unsigned long cntpct;
+#ifdef CONFIG_SYS_FSL_ERRATUM_A008585
+ /* This erratum number needs to be confirmed to match ARM document */
+ unsigned long temp;
+#endif
isb();
asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
isb();
asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
+#ifdef CONFIG_SYS_FSL_ERRATUM_A008585
+ asm volatile("mrs %0, cntpct_el0" : "=r" (temp));
+ while (temp != cntpct) {
+ asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
+ asm volatile("mrs %0, cntpct_el0" : "=r" (temp));
+ }
+#endif
return cntpct;
}
return cntpct;
}
+
+uint64_t get_ticks(void)
+{
+ unsigned long ticks = timer_read_counter();
+
+ gd->arch.tbl = ticks;
+
+ return ticks;
+}
+
+unsigned long usec2ticks(unsigned long usec)
+{
+ ulong ticks;
+ if (usec < 1000)
+ ticks = ((usec * (get_tbclk()/1000)) + 500) / 1000;
+ else
+ ticks = ((usec / 10) * (get_tbclk() / 100000));
+
+ return ticks;
+}