Ver Fonte

Kernel/aarch64: Initialize TimeManagement in init.cpp

Also remove the check for aarch64 in AK/Format.cpp, so now the format
functions will prepend the time since boot!
Timon Kruiper há 2 anos atrás
pai
commit
c7aa05cdcc
2 ficheiros alterados com 8 adições e 8 exclusões
  1. 0 2
      AK/Format.cpp
  2. 8 6
      Kernel/Arch/aarch64/init.cpp

+ 0 - 2
AK/Format.cpp

@@ -933,10 +933,8 @@ void vdmesgln(StringView fmtstr, TypeErasedFormatParams& params)
 #    ifdef AK_OS_SERENITY
     struct timespec ts = {};
 
-#        if !ARCH(AARCH64)
     if (TimeManagement::is_initialized())
         ts = TimeManagement::the().monotonic_time(TimePrecision::Coarse).to_timespec();
-#        endif
 
     if (Kernel::Processor::is_initialized() && Kernel::Thread::current()) {
         auto& thread = *Kernel::Thread::current();

+ 8 - 6
Kernel/Arch/aarch64/init.cpp

@@ -18,7 +18,6 @@
 #include <Kernel/Arch/aarch64/CPU.h>
 #include <Kernel/Arch/aarch64/RPi/Framebuffer.h>
 #include <Kernel/Arch/aarch64/RPi/Mailbox.h>
-#include <Kernel/Arch/aarch64/RPi/Timer.h>
 #include <Kernel/Arch/aarch64/RPi/UART.h>
 #include <Kernel/Arch/aarch64/Registers.h>
 #include <Kernel/Arch/aarch64/TrapFrame.h>
@@ -144,20 +143,23 @@ extern "C" [[noreturn]] void init()
     InterruptManagement::initialize();
     Processor::enable_interrupts();
 
+    TimeManagement::initialize(0);
+
     auto firmware_version = query_firmware_version();
     dmesgln("Firmware version: {}", firmware_version);
 
-    auto& timer = RPi::Timer::the();
-    timer.set_interrupt_interval_usec(1'000'000);
-    timer.enable_interrupt_mode();
-
     dmesgln("Enter loop");
 
     // This will not disable interrupts, so the timer will still fire and show that
     // interrupts are working!
-    for (;;)
+    for (u32 i = 0;; i++) {
         asm volatile("wfi");
 
+        // NOTE: This shows that dmesgln now outputs the time since boot!
+        if (i % 250 == 0)
+            dmesgln("Timer fired!");
+    }
+
     TODO_AARCH64();
 }