From 180dfed61505cfe944755f7078d7b29063ea7734 Mon Sep 17 00:00:00 2001
From: Christian Cunningham <cc@localhost>
Date: Thu, 24 Mar 2022 18:59:26 -0700
Subject: Allow access to CNTPCT from user mode

---
 kernel/sys/kernel.S | 5 +++++
 usr/main.c          | 4 ++++
 2 files changed, 9 insertions(+)

diff --git a/kernel/sys/kernel.S b/kernel/sys/kernel.S
index 71b22a1..df55cc1 100644
--- a/kernel/sys/kernel.S
+++ b/kernel/sys/kernel.S
@@ -19,6 +19,11 @@ kernel_main:
 	mov r0, #0x80000000
 	mcr p15, 0, r0, c9, c12, 1
 
+	// Allow access to CNTKCTL from PL0
+	mrc p15, 0, r0, c14, c1, 0
+	orr r0, #1
+	mcr p15, 0, r0, c14, c1, 0
+
 	// Intentional undefined instruction
 	// .word 0xf7f0a000
 	cpsie ai, #0x10
diff --git a/usr/main.c b/usr/main.c
index 56ddbcb..6eecc7c 100644
--- a/usr/main.c
+++ b/usr/main.c
@@ -41,4 +41,8 @@ void main(void)
 	subscribe_irq(SYS_TIMER_2_IRQ, loopt, &stime_2);
 	subscribe_irq(SYS_TIMER_3_IRQ, loopt, &stime_3);
 	add_thread(loop, 0, 0);
+	unsigned long long counter;
+	asm volatile ("mrrc p15, 0, %0, c14" : "=r"(counter));
+	draw_hex32(0, 20, counter>>32);
+	draw_hex32(9, 20, counter);
 }
-- 
cgit v1.2.1