2022-06-18 13:26:10 +02:00
|
|
|
#
|
|
|
|
# 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"
|
|
|
|
|
2023-01-05 12:28:47 +01:00
|
|
|
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
|
|
|
|
|
2022-06-18 13:26:10 +02:00
|
|
|
choice
|
|
|
|
prompt "ARM64 chip selection"
|
|
|
|
default ARCH_CHIP_QEMU
|
|
|
|
|
2022-11-22 00:32:45 +01:00
|
|
|
config ARCH_CHIP_A64
|
|
|
|
bool "Allwinner A64"
|
|
|
|
select ARCH_CORTEX_A53
|
|
|
|
select ARCH_HAVE_ADDRENV
|
2022-12-07 04:41:39 +01:00
|
|
|
select ARCH_HAVE_RESET
|
2023-02-28 07:23:02 +01:00
|
|
|
select ARCH_HAVE_PSCI
|
2022-11-22 00:32:45 +01:00
|
|
|
select ARCH_NEED_ADDRENV_MAPPING
|
|
|
|
---help---
|
|
|
|
Allwinner A64 SoC
|
|
|
|
|
2023-08-11 15:12:26 +02:00
|
|
|
config ARCH_CHIP_RK3399
|
|
|
|
bool "Rockchip RK3399"
|
|
|
|
select ARCH_CORTEX_A53
|
|
|
|
select ARCH_HAVE_ADDRENV
|
|
|
|
select ARCH_HAVE_RESET
|
|
|
|
select ARCH_HAVE_PSCI
|
|
|
|
select ARCH_NEED_ADDRENV_MAPPING
|
|
|
|
---help---
|
|
|
|
Rockchip RK3399 SoC
|
|
|
|
|
2022-06-18 13:26:10 +02:00
|
|
|
config ARCH_CHIP_QEMU
|
2022-10-13 15:32:59 +02:00
|
|
|
bool "QEMU virt platform (ARMv8a)"
|
2022-06-18 13:26:10 +02:00
|
|
|
select ARCH_HAVE_ADDRENV
|
2023-08-11 10:35:07 +02:00
|
|
|
select ARCH_HAVE_PSCI
|
2022-06-18 13:26:10 +02:00
|
|
|
select ARCH_NEED_ADDRENV_MAPPING
|
2023-08-14 05:04:44 +02:00
|
|
|
select ARCH_HAVE_POWEROFF
|
|
|
|
select ARCH_HAVE_RESET
|
2022-06-18 13:26:10 +02:00
|
|
|
---help---
|
2022-10-13 15:32:59 +02:00
|
|
|
QEMU virt platform (ARMv8a)
|
2022-06-18 13:26:10 +02:00
|
|
|
|
2023-05-30 08:36:36 +02:00
|
|
|
config ARCH_CHIP_GOLDFISH
|
|
|
|
bool "goldfish platform (ARMv8a)"
|
|
|
|
select ARCH_CORTEX_A53
|
2023-08-11 10:35:07 +02:00
|
|
|
select ARCH_HAVE_PSCI
|
2023-05-30 08:36:36 +02:00
|
|
|
select ARCH_HAVE_MULTICPU
|
|
|
|
select ARMV8A_HAVE_GICv2
|
|
|
|
select ARCH_HAVE_ADDRENV
|
|
|
|
select ARCH_HAVE_IRQTRIGGER
|
2023-08-14 05:04:44 +02:00
|
|
|
select ARCH_HAVE_POWEROFF
|
|
|
|
select ARCH_HAVE_RESET
|
2023-05-30 08:36:36 +02:00
|
|
|
select ARCH_NEED_ADDRENV_MAPPING
|
|
|
|
---help---
|
|
|
|
Android GoldFish platform for NuttX (ARMv8a),
|
|
|
|
based on ARM virt board
|
|
|
|
|
2023-02-26 18:04:20 +01:00
|
|
|
config ARCH_CHIP_FVP_ARMV8R
|
|
|
|
bool "ARM FVP virt platform (ARMv8r)"
|
|
|
|
select ARCH_CORTEX_R82
|
|
|
|
---help---
|
|
|
|
ARM FVP virt platform (ARMv8r)
|
2023-04-07 13:21:11 +02:00
|
|
|
|
2023-06-26 18:43:12 +02:00
|
|
|
config ARCH_CHIP_IMX8
|
2023-06-26 18:59:30 +02:00
|
|
|
bool "NXP i.MX8 Platform (ARMv8a)"
|
2023-06-26 18:43:12 +02:00
|
|
|
select ARCH_HAVE_ADDRENV
|
|
|
|
select ARCH_HAVE_IRQTRIGGER
|
|
|
|
select ARCH_NEED_ADDRENV_MAPPING
|
|
|
|
---help---
|
2023-06-26 18:59:30 +02:00
|
|
|
NXP i.MX8 (ARMv8a) applications processors
|
2023-06-26 18:43:12 +02:00
|
|
|
|
2023-04-07 13:21:11 +02:00
|
|
|
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/.
|
|
|
|
|
2022-06-18 13:26:10 +02:00
|
|
|
endchoice
|
|
|
|
|
|
|
|
config ARCH_ARMV8A
|
|
|
|
bool
|
|
|
|
default n
|
2023-02-28 10:01:24 +01:00
|
|
|
select ARCH_HAVE_EL3
|
2022-06-18 13:26:10 +02:00
|
|
|
|
|
|
|
config ARCH_ARMV8R
|
|
|
|
bool
|
|
|
|
default n
|
2023-02-28 10:01:24 +01:00
|
|
|
select ARCH_SINGLE_SECURITY_STATE
|
2022-06-18 13:26:10 +02:00
|
|
|
|
2023-02-28 07:23:02 +01:00
|
|
|
config ARCH_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
|
|
|
|
|
2023-02-28 10:01:24 +01:00
|
|
|
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
|
|
|
|
|
2023-02-28 10:02:37 +01:00
|
|
|
config ARCH_SET_VMPIDR_EL2
|
|
|
|
bool "Set VMPIDR_EL2 at EL2 stage"
|
2023-05-10 11:44:15 +02:00
|
|
|
---help---
|
2023-02-28 10:02:37 +01:00
|
|
|
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.
|
|
|
|
|
2023-02-28 08:07:42 +01:00
|
|
|
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
|
2023-04-26 03:36:15 +02:00
|
|
|
not normal anymore. So we need to print something in arm64_head.S
|
2023-02-28 08:07:42 +01:00
|
|
|
to debug this situation.
|
2023-04-26 03:36:15 +02:00
|
|
|
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.
|
2023-02-28 07:23:02 +01:00
|
|
|
|
2022-06-18 13:26:10 +02:00
|
|
|
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
|
2023-03-13 04:10:40 +01:00
|
|
|
select ARM_HAVE_NEON
|
2022-06-18 13:26:10 +02:00
|
|
|
|
2022-10-13 15:32:59 +02:00
|
|
|
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
|
2023-03-13 04:10:40 +01:00
|
|
|
select ARM_HAVE_NEON
|
2022-10-13 15:32:59 +02:00
|
|
|
|
|
|
|
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
|
2023-03-13 04:10:40 +01:00
|
|
|
select ARM_HAVE_NEON
|
2022-10-13 15:32:59 +02:00
|
|
|
|
2022-06-18 13:26:10 +02:00
|
|
|
config ARCH_CORTEX_R82
|
|
|
|
bool
|
|
|
|
default n
|
|
|
|
select ARCH_ARMV8R
|
|
|
|
select ARCH_DCACHE
|
|
|
|
select ARCH_ICACHE
|
|
|
|
select ARCH_HAVE_MPU
|
2023-03-13 04:10:40 +01:00
|
|
|
select ARCH_HAVE_FPU
|
2022-06-18 13:26:10 +02:00
|
|
|
select ARCH_HAVE_TESTSET
|
2023-03-13 04:10:40 +01:00
|
|
|
select ARM_HAVE_NEON
|
2022-06-18 13:26:10 +02:00
|
|
|
|
|
|
|
config ARCH_FAMILY
|
|
|
|
string
|
|
|
|
default "armv8-a" if ARCH_ARMV8A
|
|
|
|
default "armv8-r" if ARCH_ARMV8R
|
|
|
|
|
|
|
|
config ARCH_CHIP
|
|
|
|
string
|
2022-11-22 00:32:45 +01:00
|
|
|
default "a64" if ARCH_CHIP_A64
|
2023-08-11 15:12:26 +02:00
|
|
|
default "rk3399" if ARCH_CHIP_RK3399
|
2022-06-18 13:26:10 +02:00
|
|
|
default "qemu" if ARCH_CHIP_QEMU
|
2023-05-30 08:36:36 +02:00
|
|
|
default "goldfish" if ARCH_CHIP_GOLDFISH
|
2023-02-26 18:04:20 +01:00
|
|
|
default "fvp-v8r" if ARCH_CHIP_FVP_ARMV8R
|
2023-06-26 18:43:12 +02:00
|
|
|
default "imx8" if ARCH_CHIP_IMX8
|
2022-06-18 13:26:10 +02:00
|
|
|
|
|
|
|
config ARM_HAVE_NEON
|
|
|
|
bool
|
|
|
|
default n
|
|
|
|
---help---
|
|
|
|
Decide whether support NEON instruction
|
|
|
|
|
arch/arm64: Add support for Generic Interrupt Controller Version 2
Currently NuttX on Arm64 supports Generic Interrupt Controller (GIC) Versions 3 and 4: [`arm64_gicv3.c`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm64/src/common/arm64_gicv3.c), [`arm64_gic.h`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm64/src/common/arm64_gic.h). This PR adds support for GIC Version 2, which is needed by [Pine64 PinePhone](https://lupyuen.github.io/articles/interrupt) based on Allwinner A64 SoC.
This 64-bit implementation of GIC v2 is mostly identical to the existing GIC v2 for 32-bit Armv7-A ([`armv7-a/arm_gicv2.c`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/arm_gicv2.c), [`armv7-a/gic.h`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/gic.h)), with minor modifications to support 64-bit Registers (Interrupt Context).
- `arch/arm64/Kconfig`: Under "ARM64 Options", we added an integer option `ARM_GIC_VERSION` ("GIC version") that selects the GIC Version. Valid values are 2, 3 and 4, default is 3.
- `arch/arm64/src/common/arm64_gicv2.c`: Implements 64-bit GIC v2 based on 32-bit [`armv7-a/arm_gicv2.c`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/arm_gicv2.c) and [`armv7-a/gic.h`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/gic.h), modified to support 64-bit Registers (Interrupt Context).
Function and Macro Names have not been changed, for easier cross-referencing between the 32-bit and 64-bit implementations of GIC v2.
- `arch/arm64/src/common/arm64_gicv3.c`: Added Conditional Compilation for GIC v3. This file will not be compiled if `ARM_GIC_VERSION` is 2.
- `arch/arm64/src/common/arm64_gic.h`: Added the Version Identifier for GIC v2. At startup we read the GIC Version from hardware and verify that it matches `ARM_GIC_VERSION`.
- `arch/arm64/include/qemu/chip.h`: Added the QEMU Base Addresses for GIC v2.
- `arch/arm64/src/common/Make.defs`: Added the source file that implements GIC v2.
- `boards/arm64/qemu/qemu-armv8a/README.txt`: Added the documentation for testing GIC v2 with QEMU.
- `boards/arm64/qemu/qemu-armv8a/configs/nsh_gicv2/defconfig`: Added the Board Configuration `qemu-armv8a:nsh_gicv2` for testing GIC v2 with QEMU. Identical to `qemu-armv8a:nsh`, except that `ARM_GIC_VERSION` is 2.
2022-11-16 08:29:43 +01:00
|
|
|
config ARM_GIC_VERSION
|
|
|
|
int "GIC version"
|
2022-11-22 00:32:45 +01:00
|
|
|
default 2 if ARCH_CHIP_A64
|
arch/arm64: Add support for Generic Interrupt Controller Version 2
Currently NuttX on Arm64 supports Generic Interrupt Controller (GIC) Versions 3 and 4: [`arm64_gicv3.c`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm64/src/common/arm64_gicv3.c), [`arm64_gic.h`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm64/src/common/arm64_gic.h). This PR adds support for GIC Version 2, which is needed by [Pine64 PinePhone](https://lupyuen.github.io/articles/interrupt) based on Allwinner A64 SoC.
This 64-bit implementation of GIC v2 is mostly identical to the existing GIC v2 for 32-bit Armv7-A ([`armv7-a/arm_gicv2.c`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/arm_gicv2.c), [`armv7-a/gic.h`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/gic.h)), with minor modifications to support 64-bit Registers (Interrupt Context).
- `arch/arm64/Kconfig`: Under "ARM64 Options", we added an integer option `ARM_GIC_VERSION` ("GIC version") that selects the GIC Version. Valid values are 2, 3 and 4, default is 3.
- `arch/arm64/src/common/arm64_gicv2.c`: Implements 64-bit GIC v2 based on 32-bit [`armv7-a/arm_gicv2.c`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/arm_gicv2.c) and [`armv7-a/gic.h`](https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/armv7-a/gic.h), modified to support 64-bit Registers (Interrupt Context).
Function and Macro Names have not been changed, for easier cross-referencing between the 32-bit and 64-bit implementations of GIC v2.
- `arch/arm64/src/common/arm64_gicv3.c`: Added Conditional Compilation for GIC v3. This file will not be compiled if `ARM_GIC_VERSION` is 2.
- `arch/arm64/src/common/arm64_gic.h`: Added the Version Identifier for GIC v2. At startup we read the GIC Version from hardware and verify that it matches `ARM_GIC_VERSION`.
- `arch/arm64/include/qemu/chip.h`: Added the QEMU Base Addresses for GIC v2.
- `arch/arm64/src/common/Make.defs`: Added the source file that implements GIC v2.
- `boards/arm64/qemu/qemu-armv8a/README.txt`: Added the documentation for testing GIC v2 with QEMU.
- `boards/arm64/qemu/qemu-armv8a/configs/nsh_gicv2/defconfig`: Added the Board Configuration `qemu-armv8a:nsh_gicv2` for testing GIC v2 with QEMU. Identical to `qemu-armv8a:nsh`, except that `ARM_GIC_VERSION` is 2.
2022-11-16 08:29:43 +01:00
|
|
|
default 3
|
|
|
|
range 2 4
|
|
|
|
---help---
|
|
|
|
Version of Generic Interrupt Controller (GIC) supported by the
|
|
|
|
architecture
|
|
|
|
|
2023-03-21 04:45:21 +01:00
|
|
|
if ARM_GIC_VERSION = 2
|
|
|
|
|
|
|
|
config ARM_GIC_EOIMODE
|
|
|
|
bool
|
|
|
|
default n
|
|
|
|
---help---
|
|
|
|
Enable GICC_CTLR.EOImode, this will separates the priority drop and interrupt
|
|
|
|
deactivation operations.
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
2023-04-12 11:56:45 +02:00
|
|
|
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
|
|
|
|
|
2023-03-14 06:28:44 +01:00
|
|
|
config ARM64_DCACHE_DISABLE
|
|
|
|
bool "Disable DCACHE at __start"
|
|
|
|
default n
|
|
|
|
|
|
|
|
config ARM64_ICACHE_DISABLE
|
|
|
|
bool "Disable ICACHE at __start"
|
|
|
|
default n
|
|
|
|
|
2022-11-22 00:32:45 +01:00
|
|
|
if ARCH_CHIP_A64
|
|
|
|
source "arch/arm64/src/a64/Kconfig"
|
|
|
|
endif
|
|
|
|
|
2023-08-11 15:12:26 +02:00
|
|
|
if ARCH_CHIP_RK3399
|
|
|
|
source "arch/arm64/src/rk3399/Kconfig"
|
|
|
|
endif
|
|
|
|
|
2022-06-18 13:26:10 +02:00
|
|
|
if ARCH_CHIP_QEMU
|
|
|
|
source "arch/arm64/src/qemu/Kconfig"
|
|
|
|
endif
|
|
|
|
|
2023-02-26 18:04:20 +01:00
|
|
|
if ARCH_CHIP_FVP_ARMV8R
|
|
|
|
source "arch/arm64/src/fvp-v8r/Kconfig"
|
|
|
|
endif
|
2023-06-26 18:43:12 +02:00
|
|
|
|
|
|
|
if ARCH_CHIP_IMX8
|
|
|
|
source "arch/arm64/src/imx8/Kconfig"
|
|
|
|
endif
|
|
|
|
|
2023-05-30 08:36:36 +02:00
|
|
|
if ARCH_CHIP_GOLDFISH
|
|
|
|
source "arch/arm64/src/goldfish/Kconfig"
|
|
|
|
endif
|
|
|
|
|
2022-06-18 13:26:10 +02:00
|
|
|
endif # ARCH_ARM64
|