aboutsummaryrefslogtreecommitdiff
path: root/frontend/pcnt.h
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/pcnt.h')
-rw-r--r--frontend/pcnt.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/frontend/pcnt.h b/frontend/pcnt.h
index 232ae07..3969aa4 100644
--- a/frontend/pcnt.h
+++ b/frontend/pcnt.h
@@ -83,6 +83,19 @@ static inline unsigned int pcnt_get(void)
return val;
}
+static inline void pcnt_init(void)
+{
+#ifdef __ARM_ARCH_7A__
+ int v;
+ asm volatile("mrc p15, 0, %0, c9, c12, 0" : "=r"(v));
+ v |= 5; // master enable, ccnt reset
+ v &= ~8; // ccnt divider 0
+ asm volatile("mcr p15, 0, %0, c9, c12, 0" :: "r"(v));
+ // enable cycle counter
+ asm volatile("mcr p15, 0, %0, c9, c12, 1" :: "r"(1<<31));
+#endif
+}
+
#else
#define pcnt_start(id)