# # For a description of the syntax of this configuration file, # see the file kconfig-language.txt in the NuttX tools repository. # if ARCH_ARM64 comment "ARM64 Options" choice prompt "ARM64 Toolchain Selection" default ARM64_TOOLCHAIN_GNU_EABI config ARM64_TOOLCHAIN_GNU_EABI bool "Generic GNU EABI toolchain" select ARCH_TOOLCHAIN_GNU ---help--- This option should work for any modern GNU toolchain (GCC 4.5 or newer) config ARM64_TOOLCHAIN_CLANG bool "LLVM Clang toolchain" select ARCH_TOOLCHAIN_CLANG endchoice # ARM64 Toolchain Selection choice prompt "ARM64 chip selection" default ARCH_CHIP_QEMU config ARCH_CHIP_A64 bool "Allwinner A64" select ARCH_CORTEX_A53 select ARCH_HAVE_ADDRENV select ARCH_HAVE_RESET select ARCH_HAVE_IRQTRIGGER select ARCH_NEED_ADDRENV_MAPPING select ARM64_HAVE_PSCI ---help--- Allwinner A64 SoC config ARCH_CHIP_RK3399 bool "Rockchip RK3399" select ARCH_CORTEX_A53 select ARCH_HAVE_ADDRENV select ARCH_HAVE_RESET select ARCH_NEED_ADDRENV_MAPPING select ARM64_HAVE_PSCI ---help--- Rockchip RK3399 SoC config ARCH_CHIP_QEMU bool "QEMU virt platform (ARMv8a)" select ARCH_HAVE_ADDRENV select ARCH_HAVE_IRQTRIGGER select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_POWEROFF select ARCH_HAVE_RESET select ARCH_HAVE_TEXT_HEAP select ARM64_HAVE_PSCI ---help--- QEMU virt platform (ARMv8a) config ARCH_CHIP_GOLDFISH bool "goldfish platform (ARMv8a)" select ARCH_CORTEX_A53 select ARCH_HAVE_MULTICPU select ARMV8A_HAVE_GICv2 select ARCH_HAVE_ADDRENV select ARCH_HAVE_IRQTRIGGER select ARCH_HAVE_POWEROFF select ARCH_HAVE_RESET select ARCH_NEED_ADDRENV_MAPPING select ARM64_HAVE_PSCI ---help--- Android GoldFish platform for NuttX (ARMv8a), based on ARM virt board config ARCH_CHIP_FVP_ARMV8R bool "ARM FVP virt platform (ARMv8r)" select ARCH_CORTEX_R82 select ARCH_HAVE_IRQTRIGGER ---help--- ARM FVP virt platform (ARMv8r) config ARCH_CHIP_IMX8 bool "NXP i.MX8 Platform (ARMv8a)" select ARCH_HAVE_ADDRENV select ARCH_HAVE_IRQTRIGGER select ARCH_NEED_ADDRENV_MAPPING ---help--- NXP i.MX8 (ARMv8a) applications processors config ARCH_CHIP_IMX9 bool "NXP i.MX9 Platform (ARMv8.2a)" select ARCH_HAVE_ADDRENV select ARCH_HAVE_I2CRESET select ARCH_HAVE_IRQTRIGGER select ARCH_NEED_ADDRENV_MAPPING ---help--- NXP i.MX9 (ARMv8.2a) applications processors config ARCH_CHIP_ZYNQ_MPSOC bool "XilinX Zynq UltraScale+ MPSoC" select ARCH_CORTEX_A53 select ARCH_HAVE_ADDRENV select ARCH_HAVE_RESET select ARCH_HAVE_IRQTRIGGER select ARCH_NEED_ADDRENV_MAPPING select ARM64_HAVE_PSCI ---help--- XilinX ZYNQ MPSOC config ARCH_CHIP_ARM64_CUSTOM bool "Custom ARM64 chip" select ARCH_CHIP_CUSTOM ---help--- Select this option if there is no directory for the chip under arch/arm64/src/. endchoice # ARM64 chip selection config ARCH_ARMV8A bool default n select ARCH_HAVE_EL3 config ARCH_ARMV8R bool default n select ARCH_SINGLE_SECURITY_STATE config ARCH_SINGLE_SECURITY_STATE bool "ARM Single Security State Support" default n ---help--- Some ARM aarch64 Cortex-family processors only supports single security state(eg. Cortex-R82). For these Processors, GIC or other ARM architecture feature will with different configure config ARCH_HAVE_EL3 bool default n ---help--- Some ARM aarch64 Cortex-family processors only supports EL0~El2(eg. Cortex-R82). For these Processors, the code runing at EL3 is not necessary and system register for EL3 is not accessible config ARCH_ARM64_EXCEPTION_LEVEL int "Exception level to operate" default 1 range 1 3 ---help--- Default exception level is EL1 for the NuttX OS. However, if NuttX works as the primary bootloader, this may be set to EL3. Other levels are not supported at the moment. config ARCH_SET_VMPIDR_EL2 bool "Set VMPIDR_EL2 at EL2 stage" ---help--- VMPIDR_EL2 holds the value of the Virtualization Multiprocessor ID. From architecture manual of AArch64, the behave is: -reading register MPIDR_EL1 in EL2, it's return real MPIDR_EL1 -reading register MPIDR_EL1 in EL1, it's return VMPIDR_EL2 So since NuttX for SMP is running at EL1 to read MPIDR_EL1 for identify CPU id, it's need to set VMPIDR_EL2 to MPIDR_EL1 for every CPU at boot EL2 stage. For some platform, the bootloader or hypervisor will do that at the EL2 stage, but not all. ARM FVP and VDK should set it since these platform will boot without BootLoader. config ARCH_EARLY_PRINT bool "arch early print support" default n ---help--- The aarch64 have EL0~El3 execute level and NS/S (security state), the NuttX should be execute at EL1 in NS(ARmv8-A) or S(ARmv8-R) state. but booting NuttX have different ELs and state while with different platform, if NuttX runing at wrong ELs or state it will not normal anymore. So we need to print something in arm64_head.S to debug this situation. Enabling this option will need to implement arm64_earlyprintinit and arm64_lowputc functions just you see in qemu_lowputc.S. by default, UART dev will be used. You can also logging the booting message through rewriting fake arm64_lowputc with other debug method (eg semihosting , ARM debug channel etc) if you not sure, keeping the option disable. config ARCH_CORTEX_A53 bool default n select ARCH_ARMV8A select ARCH_HAVE_TRUSTZONE select ARCH_DCACHE select ARCH_ICACHE select ARCH_HAVE_MMU select ARCH_HAVE_FPU select ARCH_HAVE_TESTSET select ARM64_HAVE_NEON config ARCH_CORTEX_A55 bool default n select ARCH_ARMV8A select ARCH_HAVE_TRUSTZONE select ARCH_DCACHE select ARCH_ICACHE select ARCH_HAVE_MMU select ARCH_HAVE_FPU select ARCH_HAVE_TESTSET select ARM64_HAVE_NEON config ARCH_CORTEX_A57 bool default n select ARCH_ARMV8A select ARCH_HAVE_TRUSTZONE select ARCH_DCACHE select ARCH_ICACHE select ARCH_HAVE_MMU select ARCH_HAVE_FPU select ARCH_HAVE_TESTSET select ARM64_HAVE_NEON config ARCH_CORTEX_A72 bool default n select ARCH_ARMV8A select ARCH_HAVE_TRUSTZONE select ARCH_DCACHE select ARCH_ICACHE select ARCH_HAVE_MMU select ARCH_HAVE_FPU select ARCH_HAVE_TESTSET select ARM64_HAVE_NEON config ARCH_CORTEX_R82 bool default n select ARCH_ARMV8R select ARCH_DCACHE select ARCH_ICACHE select ARCH_HAVE_MPU select ARCH_HAVE_FPU select ARCH_HAVE_TESTSET select ARM64_HAVE_NEON config ARCH_FAMILY string default "armv8-a" if ARCH_ARMV8A default "armv8-r" if ARCH_ARMV8R config ARCH_CHIP string default "a64" if ARCH_CHIP_A64 default "rk3399" if ARCH_CHIP_RK3399 default "zynq-mpsoc" if ARCH_CHIP_ZYNQ_MPSOC default "qemu" if ARCH_CHIP_QEMU default "goldfish" if ARCH_CHIP_GOLDFISH default "fvp-v8r" if ARCH_CHIP_FVP_ARMV8R default "imx8" if ARCH_CHIP_IMX8 default "imx9" if ARCH_CHIP_IMX9 config ARM64_HAVE_PSCI bool "ARM PCSI (Power State Coordination Interface) Support" default n ---help--- This Power State Coordination Interface (PSCI) defines a standard interface for power management. the PCSI need to implement handling firmware at EL2 or EL3. The option maybe not applicable for arm core without PCSI firmware interface implement config ARM64_PSCI bool "Enabled PSCI" depends on ARM64_HAVE_PSCI default y ---help--- See ARM64_HAVE_PSCI for details config ARM64_HAVE_NEON bool default n ---help--- Decide whether support NEON instruction config ARM64_NEON bool "Advanced SIMD (NEON) Extension" default y depends on ARM64_HAVE_NEON config ARM64_DECODEFIQ bool "FIQ Handler" default n ---help--- Select this option if your platform supports the function arm_decodefiq(). This is used primarily to support secure TrustZone interrupts received on the FIQ vector. config ARM64_GIC_VERSION int "GIC version" default 2 if ARCH_CHIP_A64 default 3 range 2 4 ---help--- Version of Generic Interrupt Controller (GIC) supported by the architecture if ARM64_GIC_VERSION = 2 config ARM64_GIC_EOIMODE bool default n ---help--- Enable GICC_CTLR.EOImode, this will separates the priority drop and interrupt deactivation operations. config ARM64_GICV2M bool "gicv2m support message irq" depends on PCI_MSIX default n config ARM64_GICV2_LEGACY_IRQ0 int "pci legacy irq0 default val" default 35 ---help--- qemu pci legacy irq0 val, not support if val < 0 endif config ARM64_SEMIHOSTING_HOSTFS bool "Semihosting HostFS" depends on FS_HOSTFS ---help--- Mount HostFS through semihosting. This doesn't support some directory operations like readdir because of the limitations of semihosting mechanism. if ARM64_SEMIHOSTING_HOSTFS config ARM64_SEMIHOSTING_HOSTFS_CACHE_COHERENCE bool "Cache coherence in semihosting hostfs" depends on ARCH_DCACHE ---help--- Flush & Invalidte cache before & after bkpt instruction. endif # ARM64_SEMIHOSTING_HOSTFS config ARM64_DCACHE_DISABLE bool "Disable DCACHE at __start" default n config ARM64_ICACHE_DISABLE bool "Disable ICACHE at __start" default n config ARM64_VA_BITS int "Virtual address space size" default 48 ---help--- Allows choosing one of multiple possible virtual address space sizes. The level of translation table is determined by a combination of page size and virtual address space size. The choice could be: 32, 36, 42, 48 config ARM64_PA_BITS int "Physical address space size" default 48 ---help--- Choose the maximum physical address range that the kernel will support. The choice could be: 32, 36, 42, 48 if ARCH_CHIP_A64 source "arch/arm64/src/a64/Kconfig" endif if ARCH_CHIP_RK3399 source "arch/arm64/src/rk3399/Kconfig" endif if ARCH_CHIP_QEMU source "arch/arm64/src/qemu/Kconfig" endif if ARCH_CHIP_FVP_ARMV8R source "arch/arm64/src/fvp-v8r/Kconfig" endif if ARCH_CHIP_IMX8 source "arch/arm64/src/imx8/Kconfig" endif if ARCH_CHIP_IMX9 source "arch/arm64/src/imx9/Kconfig" endif if ARCH_CHIP_GOLDFISH source "arch/arm64/src/goldfish/Kconfig" endif if ARCH_CHIP_ZYNQ_MPSOC source "arch/arm64/src/zynq-mpsoc/Kconfig" endif endif # ARCH_ARM64