Add support for ARM Cortex-A76
This micro-arch is used by the RPi5. Signed-off-by: Ivan Velickovic <i.velickovic@unsw.edu.au>
This commit is contained in:
parent
d0e0a6a5a2
commit
973cbf4e08
3 changed files with 38 additions and 2 deletions
|
|
@ -143,6 +143,7 @@ foreach(
|
||||||
KernelArmCortexA55
|
KernelArmCortexA55
|
||||||
KernelArmCortexA57
|
KernelArmCortexA57
|
||||||
KernelArmCortexA72
|
KernelArmCortexA72
|
||||||
|
KernelArmCortexA76
|
||||||
KernelArchArmV7a
|
KernelArchArmV7a
|
||||||
KernelArchArmV7ve
|
KernelArchArmV7ve
|
||||||
KernelArchArmV8a
|
KernelArchArmV8a
|
||||||
|
|
@ -194,6 +195,7 @@ config_set(KernelArmCortexA53 ARM_CORTEX_A53 "${KernelArmCortexA53}")
|
||||||
config_set(KernelArmCortexA55 ARM_CORTEX_A55 "${KernelArmCortexA55}")
|
config_set(KernelArmCortexA55 ARM_CORTEX_A55 "${KernelArmCortexA55}")
|
||||||
config_set(KernelArmCortexA57 ARM_CORTEX_A57 "${KernelArmCortexA57}")
|
config_set(KernelArmCortexA57 ARM_CORTEX_A57 "${KernelArmCortexA57}")
|
||||||
config_set(KernelArmCortexA72 ARM_CORTEX_A72 "${KernelArmCortexA72}")
|
config_set(KernelArmCortexA72 ARM_CORTEX_A72 "${KernelArmCortexA72}")
|
||||||
|
config_set(KernelArmCortexA76 ARM_CORTEX_A76 "${KernelArmCortexA76}")
|
||||||
config_set(KernelArchArmV7a ARCH_ARM_V7A "${KernelArchArmV7a}")
|
config_set(KernelArchArmV7a ARCH_ARM_V7A "${KernelArchArmV7a}")
|
||||||
config_set(KernelArchArmV7ve ARCH_ARM_V7VE "${KernelArchArmV7ve}")
|
config_set(KernelArchArmV7ve ARCH_ARM_V7VE "${KernelArchArmV7ve}")
|
||||||
config_set(KernelArchArmV8a ARCH_ARM_V8A "${KernelArchArmV8a}")
|
config_set(KernelArchArmV8a ARCH_ARM_V8A "${KernelArchArmV8a}")
|
||||||
|
|
@ -232,6 +234,8 @@ elseif(KernelArmCortexA57)
|
||||||
set(KernelArmCPU "cortex-a57" CACHE INTERNAL "")
|
set(KernelArmCPU "cortex-a57" CACHE INTERNAL "")
|
||||||
elseif(KernelArmCortexA72)
|
elseif(KernelArmCortexA72)
|
||||||
set(KernelArmCPU "cortex-a72" CACHE INTERNAL "")
|
set(KernelArmCPU "cortex-a72" CACHE INTERNAL "")
|
||||||
|
elseif(KernelArmCortexA76)
|
||||||
|
set(KernelArmCPU "cortex-a76" CACHE INTERNAL "")
|
||||||
endif()
|
endif()
|
||||||
if(KernelArchARM)
|
if(KernelArchARM)
|
||||||
config_set(KernelArmMach ARM_MACH "${KernelArmMach}")
|
config_set(KernelArmMach ARM_MACH "${KernelArmMach}")
|
||||||
|
|
|
||||||
28
libsel4/arch_include/arm/sel4/arch/constants_cortex_a76.h
Normal file
28
libsel4/arch_include/arm/sel4/arch/constants_cortex_a76.h
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <sel4/config.h>
|
||||||
|
|
||||||
|
#if !defined(CONFIG_ARM_CORTEX_A76)
|
||||||
|
#error CONFIG_ARM_CORTEX_A76 is not defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Cortex-A76 Manual, Section 17.2.2 */
|
||||||
|
#define seL4_NumHWBreakpoints 10
|
||||||
|
#define seL4_NumExclusiveBreakpoints 6
|
||||||
|
#define seL4_NumExclusiveWatchpoints 4
|
||||||
|
|
||||||
|
#ifdef CONFIG_HARDWARE_DEBUG_API
|
||||||
|
|
||||||
|
#define seL4_FirstBreakpoint 0
|
||||||
|
#define seL4_FirstWatchpoint 6
|
||||||
|
|
||||||
|
#define seL4_NumDualFunctionMonitors 0
|
||||||
|
#define seL4_FirstDualFunctionMonitor (-1)
|
||||||
|
|
||||||
|
#endif /* CONFIG_HARDWARE_DEBUG_API */
|
||||||
|
|
@ -30,6 +30,9 @@ elseif(KernelArmCortexA72)
|
||||||
# (https://developer.arm.com/documentation/100095/0001/memory-management-unit/about-the-mmu)
|
# (https://developer.arm.com/documentation/100095/0001/memory-management-unit/about-the-mmu)
|
||||||
set(KernelArmPASizeBits44 ON)
|
set(KernelArmPASizeBits44 ON)
|
||||||
math(EXPR KernelPaddrUserTop "(1 << 44)")
|
math(EXPR KernelPaddrUserTop "(1 << 44)")
|
||||||
|
elseif(KernelArmCortexA76)
|
||||||
|
set(KernelArmPASizeBits40 ON)
|
||||||
|
math(EXPR KernelPaddrUserTop "(1 << 40)")
|
||||||
endif()
|
endif()
|
||||||
config_set(KernelArmPASizeBits40 ARM_PA_SIZE_BITS_40 "${KernelArmPASizeBits40}")
|
config_set(KernelArmPASizeBits40 ARM_PA_SIZE_BITS_40 "${KernelArmPASizeBits40}")
|
||||||
config_set(KernelArmPASizeBits44 ARM_PA_SIZE_BITS_44 "${KernelArmPASizeBits44}")
|
config_set(KernelArmPASizeBits44 ARM_PA_SIZE_BITS_44 "${KernelArmPASizeBits44}")
|
||||||
|
|
@ -78,7 +81,7 @@ config_option(
|
||||||
"Build as Hypervisor. Utilise ARM virtualisation extensions to build the kernel as a hypervisor"
|
"Build as Hypervisor. Utilise ARM virtualisation extensions to build the kernel as a hypervisor"
|
||||||
DEFAULT ${KernelSel4ArchArmHyp}
|
DEFAULT ${KernelSel4ArchArmHyp}
|
||||||
DEPENDS
|
DEPENDS
|
||||||
"KernelArmCortexA15 OR KernelArmCortexA35 OR KernelArmCortexA57 OR KernelArmCortexA53 OR KernelArmCortexA55 OR KernelArmCortexA72"
|
"KernelArmCortexA15 OR KernelArmCortexA35 OR KernelArmCortexA57 OR KernelArmCortexA53 OR KernelArmCortexA55 OR KernelArmCortexA72 OR KernelArmCortexA76"
|
||||||
)
|
)
|
||||||
|
|
||||||
config_option(KernelArmGicV3 ARM_GIC_V3_SUPPORT "Build support for GICv3" DEFAULT OFF)
|
config_option(KernelArmGicV3 ARM_GIC_V3_SUPPORT "Build support for GICv3" DEFAULT OFF)
|
||||||
|
|
@ -234,7 +237,8 @@ if(KernelAArch32FPUEnableContextSwitch OR KernelSel4ArchAarch64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(KernelArmCortexA7 OR KernelArmCortexA8 OR KernelArmCortexA15 OR KernelArmCortexA35
|
if(KernelArmCortexA7 OR KernelArmCortexA8 OR KernelArmCortexA15 OR KernelArmCortexA35
|
||||||
OR KernelArmCortexA53 OR KernelArmCortexA55 OR KernelArmCortexA57 OR KernelArmCortexA72)
|
OR KernelArmCortexA53 OR KernelArmCortexA55 OR KernelArmCortexA57 OR KernelArmCortexA72
|
||||||
|
OR KernelArmCortexA76)
|
||||||
# According to https://developer.arm.com/documentation/100095/0001/functional-description/about-the-cortex-a72-processor-functions/components-of-the-processor
|
# According to https://developer.arm.com/documentation/100095/0001/functional-description/about-the-cortex-a72-processor-functions/components-of-the-processor
|
||||||
# the L1 instruction on the Cortex-A72 cache has a 64-byte cache line.
|
# the L1 instruction on the Cortex-A72 cache has a 64-byte cache line.
|
||||||
# Thus, 6 bits are needed.
|
# Thus, 6 bits are needed.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue