From a6526cd90c73534de340136b856b519a09c45f26 Mon Sep 17 00:00:00 2001 From: konrad Date: Tue, 24 Jan 2023 22:03:28 +0100 Subject: [PATCH] =?UTF-8?q?Kernel:=20Migrate=20=E2=80=98main=20id=20regist?= =?UTF-8?q?er=CA=BC=20access=20in=20Aarch64=20MMIO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kernel/Arch/aarch64/CPUID.h | 20 ++++++++++++++++++++ Kernel/Arch/aarch64/RPi/MMIO.cpp | 6 +++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Kernel/Arch/aarch64/CPUID.h b/Kernel/Arch/aarch64/CPUID.h index e4b8fc36d2..30a64ea78d 100644 --- a/Kernel/Arch/aarch64/CPUID.h +++ b/Kernel/Arch/aarch64/CPUID.h @@ -272,6 +272,26 @@ AK_MAKE_ARBITRARY_SIZED_ENUM(CPUFeature, u256, __End = CPUFeature(1u) << 255u); // XXX — SENTINEL VALUE — XXX +enum class ArmLimited { // 0x41 + Cortex_A34 = 0xd02, + Cortex_A53 = 0xd03, // Raspberry Pi 2 v1.2 / Raspberry Pi 3 + Cortex_A35 = 0xd04, + Cortex_A55 = 0xd05, + Cortex_A65 = 0xd06, + Cortex_A57 = 0xd07, + Cortex_A72 = 0xd08, // Raspberry Pi 4 + Cortex_A73 = 0xd09, + Cortex_A75 = 0xd0a, + Cortex_A76 = 0xd0b, + Neoverse_N1 = 0xd0c, + Cortex_A77 = 0xd0d, + Cortex_A78 = 0xd41, + Cortex_A65AE = 0xd43, + Cortex_X1 = 0xd44, + Cortex_A78C = 0xd4b, + Cortex_X1C = 0xd4c, +}; + CPUFeature::Type detect_cpu_features(); StringView cpu_feature_to_name(CPUFeature::Type const&); StringView cpu_feature_to_description(CPUFeature::Type const&); diff --git a/Kernel/Arch/aarch64/RPi/MMIO.cpp b/Kernel/Arch/aarch64/RPi/MMIO.cpp index 031ed3bdfd..b10771de66 100644 --- a/Kernel/Arch/aarch64/RPi/MMIO.cpp +++ b/Kernel/Arch/aarch64/RPi/MMIO.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include namespace Kernel::RPi { @@ -12,8 +12,8 @@ namespace Kernel::RPi { MMIO::MMIO() : m_base_address(0xFE00'0000) { - MainIdRegister id; - if (id.part_num() <= MainIdRegister::RaspberryPi3) + auto main_id_register = Aarch64::MIDR_EL1::read(); + if (static_cast(main_id_register.PartNum) <= ArmLimited::Cortex_A53) // Raspberry Pi 3 m_base_address = PhysicalAddress(0x3F00'0000); }