From aac122ab17aaf66dab59d4ca262b6a0f67860d97 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Fri, 17 Feb 2023 10:35:32 -0700 Subject: [PATCH] =?UTF-8?q?Revert=20"Kernel:=20Remove=20old=20=E2=80=98mai?= =?UTF-8?q?n=20id=20register=20accessor=CA=BC=20for=20Aarch64"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch needed more review than it got. This reverts commit 84e8d5f41842f6c3f9f613f3570f669328fe4d06. --- Kernel/Arch/aarch64/MainIdRegister.cpp | 19 ++++++++++++++ Kernel/Arch/aarch64/MainIdRegister.h | 36 ++++++++++++++++++++++++++ Kernel/CMakeLists.txt | 1 + 3 files changed, 56 insertions(+) create mode 100644 Kernel/Arch/aarch64/MainIdRegister.cpp create mode 100644 Kernel/Arch/aarch64/MainIdRegister.h diff --git a/Kernel/Arch/aarch64/MainIdRegister.cpp b/Kernel/Arch/aarch64/MainIdRegister.cpp new file mode 100644 index 0000000000..0ffec21116 --- /dev/null +++ b/Kernel/Arch/aarch64/MainIdRegister.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2021, Nico Weber + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace Kernel { + +MainIdRegister::MainIdRegister() +{ + unsigned int mrs; + asm volatile("mrs %x0, MIDR_EL1" + : "=r"(mrs)); + m_value = mrs; +} + +} diff --git a/Kernel/Arch/aarch64/MainIdRegister.h b/Kernel/Arch/aarch64/MainIdRegister.h new file mode 100644 index 0000000000..1b53c269d0 --- /dev/null +++ b/Kernel/Arch/aarch64/MainIdRegister.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021, Nico Weber + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +namespace Kernel { + +class MainIdRegister { +public: + MainIdRegister(); + + enum Implementer { + ArmLimited = 0x41, + }; + unsigned implementer() const { return (m_value >> 24) & 0xFF; } + unsigned variant() const { return (m_value >> 20) & 0xF; } + unsigned architecture() const { return (m_value >> 16) & 0xF; } + + enum PartNum { + RaspberryPi1 = 0xB76, + RaspberryPi2 = 0xC07, + RaspberryPi3 = 0xD03, + RaspberryPi4 = 0xD08, + }; + unsigned part_num() const { return (m_value >> 4) & 0xFFF; } + + unsigned revision() const { return m_value & 0xF; } + +private: + unsigned int m_value; +}; + +} diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 036c84f7d6..5a0c8d896a 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -460,6 +460,7 @@ elseif("${SERENITY_ARCH}" STREQUAL "aarch64") Arch/aarch64/InterruptManagement.cpp Arch/aarch64/Interrupts.cpp Arch/aarch64/kprintf.cpp + Arch/aarch64/MainIdRegister.cpp Arch/aarch64/PageDirectory.cpp Arch/aarch64/Panic.cpp Arch/aarch64/Processor.cpp