From 15b818cd576cac1e115ced5c69ad79cbea2345fe Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Wed, 21 Sep 2022 17:04:09 +0200 Subject: [PATCH] Kernel/aarch64: Remove specific aarch64 code in BootFramebufferConsole The MemoryManager now works, so we can use the same code as on x86 to map the framebuffer. Since it uses the MemoryManager, the initialization of the BootFramebufferConsole has to happen after the MemoryManager is working. --- Kernel/Arch/aarch64/init.cpp | 11 ++++++----- .../Graphics/Console/BootFramebufferConsole.cpp | 17 +---------------- .../Graphics/Console/BootFramebufferConsole.h | 10 ---------- 3 files changed, 7 insertions(+), 31 deletions(-) diff --git a/Kernel/Arch/aarch64/init.cpp b/Kernel/Arch/aarch64/init.cpp index e9b63ef17d..f41ad34a63 100644 --- a/Kernel/Arch/aarch64/init.cpp +++ b/Kernel/Arch/aarch64/init.cpp @@ -129,11 +129,6 @@ extern "C" [[noreturn]] void init() CommandLine::initialize(); - auto& framebuffer = RPi::Framebuffer::the(); - if (framebuffer.initialized()) { - g_boot_console = &try_make_lock_ref_counted(framebuffer.gpu_buffer(), framebuffer.width(), framebuffer.width(), framebuffer.pitch()).value().leak_ref(); - draw_logo(); - } dmesgln("Starting SerenityOS..."); dmesgln("Initialize MMU"); @@ -145,6 +140,12 @@ extern "C" [[noreturn]] void init() for (ctor_func_t* ctor = start_ctors; ctor < end_ctors; ctor++) (*ctor)(); + auto& framebuffer = RPi::Framebuffer::the(); + if (framebuffer.initialized()) { + g_boot_console = &try_make_lock_ref_counted(PhysicalAddress((PhysicalPtr)framebuffer.gpu_buffer()), framebuffer.width(), framebuffer.height(), framebuffer.pitch()).value().leak_ref(); + draw_logo(); + } + initialize_interrupts(); InterruptManagement::initialize(); Processor::enable_interrupts(); diff --git a/Kernel/Graphics/Console/BootFramebufferConsole.cpp b/Kernel/Graphics/Console/BootFramebufferConsole.cpp index 36ab11c2d6..c950072a7c 100644 --- a/Kernel/Graphics/Console/BootFramebufferConsole.cpp +++ b/Kernel/Graphics/Console/BootFramebufferConsole.cpp @@ -6,34 +6,19 @@ #include #include -// FIXME: Port MemoryManager to aarch64 -#if !ARCH(AARCH64) -# include -#endif +#include namespace Kernel::Graphics { -// FIXME: Port MemoryManager to aarch64 -#if ARCH(AARCH64) -BootFramebufferConsole::BootFramebufferConsole(u8* framebuffer_addr, size_t width, size_t height, size_t pitch) - : GenericFramebufferConsoleImpl(width, height, pitch) - , m_framebuffer(framebuffer_addr) -#else BootFramebufferConsole::BootFramebufferConsole(PhysicalAddress framebuffer_addr, size_t width, size_t height, size_t pitch) : GenericFramebufferConsoleImpl(width, height, pitch) -#endif { -// FIXME: Port MemoryManager to aarch64 -#if ARCH(AARCH64) - m_framebuffer_data = framebuffer_addr; -#else // NOTE: We're very early in the boot process, memory allocations shouldn't really fail auto framebuffer_end = Memory::page_round_up(framebuffer_addr.offset(height * pitch * sizeof(u32)).get()).release_value(); m_framebuffer = MM.allocate_kernel_region(framebuffer_addr.page_base(), framebuffer_end - framebuffer_addr.page_base().get(), "Boot Framebuffer"sv, Memory::Region::Access::ReadWrite).release_value(); [[maybe_unused]] auto result = m_framebuffer->set_write_combine(true); m_framebuffer_data = m_framebuffer->vaddr().offset(framebuffer_addr.offset_in_page()).as_ptr(); -#endif memset(m_framebuffer_data, 0, height * pitch * sizeof(u32)); } diff --git a/Kernel/Graphics/Console/BootFramebufferConsole.h b/Kernel/Graphics/Console/BootFramebufferConsole.h index a04a8282e0..f37ea6ccd5 100644 --- a/Kernel/Graphics/Console/BootFramebufferConsole.h +++ b/Kernel/Graphics/Console/BootFramebufferConsole.h @@ -23,12 +23,7 @@ public: virtual void flush(size_t, size_t, size_t, size_t) override { } virtual void set_resolution(size_t, size_t, size_t) override { } -// FIXME: Port MemoryManager to aarch64 -#if ARCH(AARCH64) - BootFramebufferConsole(u8* framebuffer_addr, size_t width, size_t height, size_t pitch); -#else BootFramebufferConsole(PhysicalAddress framebuffer_addr, size_t width, size_t height, size_t pitch); -#endif private: virtual void set_cursor(size_t x, size_t y) override; @@ -40,12 +35,7 @@ protected: virtual u8* framebuffer_data() override; -// FIXME: Port MemoryManager to aarch64 -#if ARCH(AARCH64) - u8* m_framebuffer; -#else OwnPtr m_framebuffer; -#endif u8* m_framebuffer_data {}; mutable Spinlock m_lock { LockRank::None }; };