mirror of
https://github.com/subhobhai943/SUB-OS.git
synced 2026-10-26 00:52:50 +00:00
feat(arch): Add armv8i (32-bit ARM/AArch32) architecture & complete TUI configurator
- Support ARMv8i / ARM32 (AArch32) baremetal target with arm-linux-gnueabihf toolchain - Implement ARMv8i boot entry point, banked exception mode stacks (IRQ, ABT, UND, SVC) - Implement 8 exception vectors, GICv2 distributor/CPU interface, CP15 Generic Timer (100 Hz), flat Section MMU - Support PL011 UART for early console & interactive LazyBox TTY input - Update Makefile with make armv8i_defconfig and automated cross-compilation - Update scripts/kconfig/menuconfig.py with dedicated armv8i options
This commit is contained in:
1 parent
70d5925b16
commit
7b646c8cc4
30 files changed
+964
-24
No files matched your search
@@ -0,0 +1,41 @@
|
||||
#include <arch/armv8i/cpu.h>
|
||||
#include <lib/string.h>
|
||||
#include <kernel/printk.h>
|
||||
|
||||
static armv8i_cpu_info_t global_cpu_info;
|
||||
|
||||
uint32_t armv8i_get_midr(void) {
|
||||
uint32_t midr;
|
||||
__asm__ volatile("mrc p15, 0, %0, c0, c0, 0" : "=r"(midr));
|
||||
return midr;
|
||||
}
|
||||
|
||||
uint32_t armv8i_get_mpidr(void) {
|
||||
uint32_t mpidr;
|
||||
__asm__ volatile("mrc p15, 0, %0, c0, c0, 5" : "=r"(mpidr));
|
||||
return mpidr;
|
||||
}
|
||||
|
||||
void armv8i_cpu_init(void) {
|
||||
memset(&global_cpu_info, 0, sizeof(global_cpu_info));
|
||||
global_cpu_info.midr = armv8i_get_midr();
|
||||
global_cpu_info.mpidr = armv8i_get_mpidr();
|
||||
global_cpu_info.implementer = (global_cpu_info.midr >> 24) & 0xFF;
|
||||
global_cpu_info.part_number = (global_cpu_info.midr >> 4) & 0xFFF;
|
||||
global_cpu_info.architecture = (global_cpu_info.midr >> 16) & 0xF;
|
||||
|
||||
const char* part_str = "ARM Cortex-A (ARMv8i 32-Bit)";
|
||||
if (global_cpu_info.part_number == 0xC0F) part_str = "ARM Cortex-A15 (ARMv7-A/v8i)";
|
||||
else if (global_cpu_info.part_number == 0xC07) part_str = "ARM Cortex-A7 (ARMv7-A/v8i)";
|
||||
else if (global_cpu_info.part_number == 0xD03) part_str = "ARM Cortex-A53 (AArch32)";
|
||||
else if (global_cpu_info.part_number == 0xD07) part_str = "ARM Cortex-A57 (AArch32)";
|
||||
|
||||
strncpy(global_cpu_info.model_name, part_str, sizeof(global_cpu_info.model_name) - 1);
|
||||
|
||||
printk(KERN_INFO "CPU: %s (Implementer: 0x%02x, Part: 0x%03x, AArch32)\n",
|
||||
global_cpu_info.model_name, global_cpu_info.implementer, global_cpu_info.part_number);
|
||||
}
|
||||
|
||||
const armv8i_cpu_info_t* armv8i_get_cpu_info(void) {
|
||||
return &global_cpu_info;
|
||||
}
|
||||
Reference in new issue
Block a user