From a9171b3f7499dfff1f40bf3503fdf13a20487b68 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Thu, 20 Jan 2022 14:57:57 -0700 Subject: Read Paging Register --- src/sys/kernel.S | 10 ++++++++-- src/util/status.c | 15 +++++++++++++-- src/util/time.c | 5 +++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/sys/kernel.S b/src/sys/kernel.S index 4a3c096..356cedd 100644 --- a/src/sys/kernel.S +++ b/src/sys/kernel.S @@ -3,9 +3,16 @@ .globl kernel_main kernel_main: bl sysinit + ///https://wiki.osdev.org/ARM_Paging + // Query the ID_MMFR0 register + mrc p15, 0, r0, c0, c1, 4 + bl uart_hexn + // Switch to user mode cps #0x10 // Intentional undefined instruction - .word 0xf7f0a000 + //.word 0xf7f0a000 + // This will fail in user mode + mrc p15, 3, r0, c15, c0, 0 // Supervisor Call #1 - Does nothing special svc #1 mrs r0, cpsr @@ -15,7 +22,6 @@ kernel_main: mrs r0, cpsr bl uart_hexn 1: - //bl schedule wfe b 1b diff --git a/src/util/status.c b/src/util/status.c index ac801d1..dd2b899 100644 --- a/src/util/status.c +++ b/src/util/status.c @@ -124,12 +124,14 @@ void status(void) write_cchar(&g_Drawer, '!', 0xFF00FF); } + g_Drawer.x = 0; g_Drawer.y = 9; + write_string(&g_Drawer, "SVC IRQ FIQ User/SYS\n"); for(int i = 0; i < 128; i++) write_char(&g_Drawer, ' '); g_Drawer.x = 0; - g_Drawer.y = 9; + g_Drawer.y = 10; unsigned long sp = (unsigned long)getsvcstack(); write_hex32(&g_Drawer, sp); @@ -143,14 +145,23 @@ void status(void) sp = (unsigned long)getsysstack(); write_hex32(&g_Drawer, sp); write_char(&g_Drawer, '\n'); + /* WRITE Stack Values for(unsigned long i = 1; i <= 14; i++) { - write_hex32(&g_Drawer, *(unsigned long*)(0x4000 - i*4)); + write_hex32(&g_Drawer, *(unsigned long*)(0x2000 - i*4)); if(i % 6 == 0) { write_char(&g_Drawer, '\n'); } else { write_char(&g_Drawer, ' '); } } + write_char(&g_Drawer, '\n'); + */ + unsigned long coren; + asm volatile ( + "mrc p15, #0, %0, c0, c0, #5\n" + "and %0, %0, #3" : "=r"(coren) :: "cc"); + write_string(&g_Drawer, "Status Updated by Core #"); + write_10(&g_Drawer, coren); g_Drawer.x = x; g_Drawer.y = y; diff --git a/src/util/time.c b/src/util/time.c index 035ff82..a0c539b 100644 --- a/src/util/time.c +++ b/src/util/time.c @@ -1,6 +1,11 @@ #include #include +void routing_core0cntv_to_core0fiq(void) +{ + store32(0x80, CORE0_TIMER_IRQCNTL); +} + void routing_core0cntv_to_core0irq(void) { store32(0x08, CORE0_TIMER_IRQCNTL); -- cgit v1.2.1