From 1072d523e22b5c2fb47af4c16b420a35bb1af097 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Mon, 30 May 2022 10:29:07 +0200 Subject: [PATCH] Kernel: Initialize and use interrupts in the aarch64 Kernel Now that everything is in place, we can actually use interrupts in the aarch64 Kernel build. :^) --- Kernel/Arch/aarch64/init.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Kernel/Arch/aarch64/init.cpp b/Kernel/Arch/aarch64/init.cpp index 8e57970d46..a358fa3ba5 100644 --- a/Kernel/Arch/aarch64/init.cpp +++ b/Kernel/Arch/aarch64/init.cpp @@ -10,6 +10,8 @@ #include #include +#include +#include #include #include #include @@ -106,6 +108,10 @@ extern "C" [[noreturn]] void init() load_kernel_symbol_table(); + initialize_interrupts(); + InterruptManagement::initialize(); + Processor::enable_interrupts(); + auto firmware_version = query_firmware_version(); dbgln("Firmware version: {}", firmware_version); @@ -117,17 +123,16 @@ extern "C" [[noreturn]] void init() draw_logo(); } + auto& timer = RPi::Timer::the(); + timer.set_interrupt_interval_usec(1'000'000); + timer.enable_interrupt_mode(); + dbgln("Enter loop"); - auto& timer = RPi::Timer::the(); - u64 start_musec = 0; - for (;;) { - u64 now_musec; - while ((now_musec = timer.microseconds_since_boot()) - start_musec < 1'000'000) - ; - start_musec = now_musec; - dbgln("Timer: {}", now_musec); - } + // This will not disable interrupts, so the timer will still fire and show that + // interrupts are working! + for (;;) + asm volatile("wfi"); } class QueryFirmwareVersionMboxMessage : RPi::Mailbox::Message {