420 lines
10 KiB
Plaintext
420 lines
10 KiB
Plaintext
#
|
|
# 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 ARM64_SMP_BUSY_WAIT
|
|
bool "Busy wait when SMP boot"
|
|
default n
|
|
depends on SMP
|
|
---help---
|
|
Enables busy wait when SMP boot
|
|
|
|
config ARM64_SMP_BUSY_WAIT_FLAG_ADDR
|
|
hex "Busy wait flag address"
|
|
depends on ARM64_SMP_BUSY_WAIT
|
|
|
|
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
|