# # For a description of the syntax of this configuration file, # see the file kconfig-language.txt in the NuttX tools repository. # if ARCH_RISCV comment "RISC-V Options" choice prompt "RISC-V chip selection" default ARCH_CHIP_RISCV_CUSTOM config ARCH_CHIP_FE310 bool "SiFive FE310" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ONESHOT select ALARM_ARCH ---help--- SiFive FE310 processor (E31 RISC-V Core with MAC extensions). config ARCH_CHIP_K210 bool "Kendryte K210" select ARCH_RV64 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU if !K210_WITH_QEMU select ARCH_HAVE_DPFPU if !K210_WITH_QEMU select ARCH_HAVE_MPU select ARCH_HAVE_TESTSET select ARCH_HAVE_MULTICPU select ARCH_HAVE_MISALIGN_EXCEPTION select ONESHOT select ALARM_ARCH ---help--- Kendryte K210 processor (RISC-V 64bit core with GC extensions) config ARCH_CHIP_LITEX bool "Enjoy Digital LITEX VEXRISCV" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_DCACHE select ARCH_HAVE_TICKLESS select ARCH_HAVE_RESET select LIBC_FDT select DEVICE_TREE ---help--- Enjoy Digital LITEX VEXRISCV softcore processor (RV32IMA). config ARCH_CHIP_BL602 bool "BouffaloLab BL602" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU select ARCH_HAVE_RESET select ARCH_HAVE_MISALIGN_EXCEPTION select ONESHOT select ALARM_ARCH ---help--- BouffaloLab BL602(rv32imfc) config ARCH_CHIP_ESP32C3 bool "Espressif ESP32-C3" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_C select ARCH_VECNOTIRQ select ARCH_HAVE_MPU select ARCH_HAVE_RESET select LIBC_ARCH_ATOMIC select LIBC_ARCH_MEMCPY select LIBC_ARCH_MEMCHR select LIBC_ARCH_MEMCMP select LIBC_ARCH_MEMMOVE select LIBC_ARCH_MEMSET select LIBC_ARCH_STRCHR select LIBC_ARCH_STRCMP select LIBC_ARCH_STRCPY select LIBC_ARCH_STRLCPY select LIBC_ARCH_STRNCPY select LIBC_ARCH_STRLEN select LIBC_ARCH_STRNLEN select ARCH_HAVE_TEXT_HEAP select ARCH_HAVE_BOOTLOADER select ARCH_HAVE_PERF_EVENTS select ARCH_HAVE_DEBUG ---help--- Espressif ESP32-C3 (RV32IMC). config ARCH_CHIP_ESP32C3_GENERIC bool "ESP32-C3" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_C select ARCH_VECNOTIRQ select ARCH_HAVE_BOOTLOADER if !ESPRESSIF_SIMPLE_BOOT select ARCH_HAVE_MPU select ARCH_HAVE_RESET select ARCH_HAVE_RNG select ARCH_HAVE_TICKLESS select LIBC_ARCH_ATOMIC select LIBC_ARCH_MEMCPY select LIBC_ARCH_MEMCHR select LIBC_ARCH_MEMCMP select LIBC_ARCH_MEMMOVE select LIBC_ARCH_MEMSET select LIBC_ARCH_STRCHR select LIBC_ARCH_STRCMP select LIBC_ARCH_STRCPY select LIBC_ARCH_STRLCPY select LIBC_ARCH_STRNCPY select LIBC_ARCH_STRLEN select LIBC_ARCH_STRNLEN select ESPRESSIF_SOC_RTC_MEM_SUPPORTED select ARCH_CHIP_ESPRESSIF select ARCH_HAVE_DEBUG ---help--- ESP32-C3 chip with a single RISC-V IMC core, no embedded Flash memory config ARCH_CHIP_ESP32C6 bool "ESP32-C6" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_VECNOTIRQ select ARCH_HAVE_BOOTLOADER if !ESPRESSIF_SIMPLE_BOOT select ARCH_HAVE_MPU select ARCH_HAVE_RESET select ARCH_HAVE_RNG select ARCH_HAVE_TICKLESS select LIBC_ARCH_MEMCPY select LIBC_ARCH_MEMCHR select LIBC_ARCH_MEMCMP select LIBC_ARCH_MEMMOVE select LIBC_ARCH_MEMSET select LIBC_ARCH_STRCHR select LIBC_ARCH_STRCMP select LIBC_ARCH_STRCPY select LIBC_ARCH_STRLCPY select LIBC_ARCH_STRNCPY select LIBC_ARCH_STRLEN select LIBC_ARCH_STRNLEN select ESPRESSIF_SOC_RTC_MEM_SUPPORTED select ARCH_CHIP_ESPRESSIF ---help--- Espressif ESP32-C6 (RV32IMAC). config ARCH_CHIP_ESP32H2 bool "ESP32-H2" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_C select ARCH_VECNOTIRQ select ARCH_HAVE_BOOTLOADER if !ESPRESSIF_SIMPLE_BOOT select ARCH_HAVE_MPU select ARCH_HAVE_RESET select ARCH_HAVE_RNG select ARCH_HAVE_TICKLESS select LIBC_ARCH_ATOMIC select LIBC_ARCH_MEMCPY select LIBC_ARCH_MEMCHR select LIBC_ARCH_MEMCMP select LIBC_ARCH_MEMMOVE select LIBC_ARCH_MEMSET select LIBC_ARCH_STRCHR select LIBC_ARCH_STRCMP select LIBC_ARCH_STRCPY select LIBC_ARCH_STRLCPY select LIBC_ARCH_STRNCPY select LIBC_ARCH_STRLEN select LIBC_ARCH_STRNLEN select ESPRESSIF_ESPTOOLPY_NO_STUB select ESPRESSIF_SOC_RTC_MEM_SUPPORTED select ARCH_CHIP_ESPRESSIF ---help--- Espressif ESP32-H2 (RV32IMC). config ARCH_CHIP_C906 bool "THEAD C906" select ARCH_RV64 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU select ARCH_HAVE_DPFPU select ARCH_HAVE_MPU select ONESHOT select ALARM_ARCH ---help--- THEAD C906 processor (RISC-V 64bit core with GCVX extensions). config ARCH_CHIP_MPFS bool "MicroChip Polarfire (MPFS)" select ARCH_RV64 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU select ARCH_HAVE_DPFPU select ARCH_HAVE_MPU select ARCH_MMU_TYPE_SV39 select ARCH_HAVE_ADDRENV select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_RESET select ARCH_HAVE_SPI_CS_CONTROL select ARCH_HAVE_PWM_MULTICHAN select ARCH_HAVE_S_MODE select ONESHOT select ALARM_ARCH ---help--- MicroChip Polarfire processor (RISC-V 64bit core with GCVX extensions). config ARCH_CHIP_RV32M1 bool "NXP RV32M1" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_C ---help--- NXP RV32M1 processor (RISC-V Core with PULP extensions). config ARCH_CHIP_QEMU_RV bool "QEMU RV" select ARCH_HAVE_FPU select ARCH_HAVE_DPFPU select ARCH_HAVE_MULTICPU select ARCH_HAVE_MPU select ARCH_MMU_TYPE_SV39 if ARCH_CHIP_QEMU_RV64 select ARCH_MMU_TYPE_SV32 if ARCH_CHIP_QEMU_RV32 select NUTTSBI_LATE_INIT if NUTTSBI select ARCH_HAVE_ADDRENV select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_S_MODE select ARCH_HAVE_ELF_EXECUTABLE select ONESHOT select ALARM_ARCH select ARCH_HAVE_DEBUG ---help--- QEMU Generic RV32/RV64 processor config ARCH_CHIP_HPM6000 bool "Hpmicro HPM6000" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ONESHOT select ALARM_ARCH ---help--- Hpmicro HPM6000 processor (D45 RISC-V Core with MAC extensions). config ARCH_CHIP_HPM6750 bool "Hpmicro HPM6750" select ARCH_RV32 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ONESHOT select ALARM_ARCH ---help--- Hpmicro HPM6750 processor (D45 RISC-V Core with MAC extensions). config ARCH_CHIP_JH7110 bool "StarFive JH7110" select ARCH_RV64 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU select ARCH_HAVE_DPFPU select ARCH_HAVE_MULTICPU select ARCH_HAVE_MPU select ARCH_MMU_TYPE_SV39 select ARCH_HAVE_ADDRENV select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_S_MODE select ONESHOT select ALARM_ARCH ---help--- StarFive JH7110 SoC. config ARCH_CHIP_BL808 bool "Bouffalo Lab BL808" select ARCH_RV64 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU select ARCH_HAVE_DPFPU select ARCH_HAVE_MULTICPU select ARCH_HAVE_MPU select ARCH_MMU_TYPE_SV39 select ARCH_HAVE_ADDRENV select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_S_MODE select ONESHOT select ALARM_ARCH ---help--- Bouffalo Lab BL808 SoC. config ARCH_CHIP_K230 bool "Kendryte K230" select ARCH_RV64 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU select ARCH_HAVE_DPFPU select ARCH_HAVE_MISALIGN_EXCEPTION select ARCH_HAVE_MPU select ARCH_HAVE_ADDRENV select ARCH_HAVE_RESET select ARCH_HAVE_S_MODE select ARCH_HAVE_ELF_EXECUTABLE select ARCH_MMU_TYPE_SV39 select ARCH_NEED_ADDRENV_MAPPING select NUTTSBI_LATE_INIT if NUTTSBI select ONESHOT select ALARM_ARCH ---help--- Kendryte K230 SoC (RV64GCV and RV64GCVX C908 cores). config ARCH_CHIP_SG2000 bool "SOPHGO SG2000" select ARCH_RV64 select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_RV_ISA_C select ARCH_HAVE_FPU select ARCH_HAVE_DPFPU select ARCH_HAVE_MULTICPU select ARCH_HAVE_MPU select ARCH_MMU_TYPE_SV39 select ARCH_HAVE_ADDRENV select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_S_MODE select ONESHOT select ALARM_ARCH ---help--- SOPHGO SG2000 SoC. config ARCH_CHIP_RISCV_CUSTOM bool "Custom RISC-V chip" select ARCH_CHIP_CUSTOM ---help--- Select this option if there is no directory for the chip under arch/risc-v/src/. endchoice # RISC-V chip selection config ARCH_RV32 bool default n config ARCH_RV64 bool default n select LIBC_ARCH_ELF_64BIT if LIBC_ARCH_ELF && !ARCH_RV64ILP32 config ARCH_RV64ILP32 bool depends on ARCH_RV64 default n config ARCH_RV_ISA_M bool default n config ARCH_RV_ISA_A bool default n select ARCH_HAVE_TESTSET config ARCH_RV_ISA_C bool default n config ARCH_RV_ISA_V bool default n depends on ARCH_FPU if ARCH_RV_ISA_V config ARCH_RV_VECTOR_BYTE_LENGTH int "Vector Register Length in bytes" default 32 ---help--- Predefined vector register length. If CSR vlenb is greater than the current reserved value, appropriate memory will be allocated to save/restore the vector registers. The XLEN-bit-wide read-only CSR vlenb holds the value VLEN/8, i.e., the vector register length in bytes. The value in vlenb is a design-time constant in any implementation. Without this CSR, several instructions are needed to calculate VLEN in bytes. The code has to disturb current vl and vtype settings which require them to be saved and restored. endif config ARCH_RV_ISA_ZICSR_ZIFENCEI bool default y ---help--- https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aed44286efa8ae8717a77d94b51ac3614e2ca6dc https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=98416dbb0a62579d4a7a4a76bab51b5b52fec2cd GCC-12.1.0 bumped the default ISA spec to the newer 20191213 version, which moves some instructions from the I extension to the Zicsr and Zifencei extensions. This requires explicitly specifying Zicsr and Zifencei when GCC >= 12.1.0. To make life easier, and avoid forcing toolchains that default to a newer ISA spec to version 2.2. For clang < 17 or GCC < 11.3.0, for which this is not possible or need special treatment. config ARCH_RV_EXPERIMENTAL_EXTENSIONS string "LLVM RISC-V Experimental Extensions" default "" depends on RISCV_TOOLCHAIN_CLANG ---help--- This option allows the platform to enable experimental extensions, LLVM supports (to various degrees) a number of experimental extensions. All experimental extensions have experimental- as a prefix. There is explicitly no compatibility promised between versions of the toolchain, and regular users are strongly advised not to make use of experimental extensions before they reach ratification. config ARCH_RV_ISA_VENDOR_EXTENSIONS string "Vendor Custom RISC-V Instruction Set Architecture Extensions" default "" ---help--- This option allows the platform to enable some vendor-customized ISA extensions, E.g OpenHW, SiFive, T-Head. SiFive Intelligence Extensions: SiFive Vector Coprocessor Interface(VCIX): xsfvcp SiFive FP32-to-int8 Ranged Clip Instructions: Xsfvfnrclipxfqf SiFive Matrix Multiply Accumulate Instructions: Xsfvfwmaccqqq SiFive Int8 Matrix Multiplication Instructions: XSFvqmaccqoq Command Line: xsfvcp0p1_xsfvfnrclipxfqf0p1_xsfvfwmaccqqq0p1_xsfvqmaccqoq0p1 config ARCH_RV_MMIO_BITS int # special cases default 32 if ARCH_CHIP_K230 # general fallbacks default 32 if ARCH_RV32 default 64 if ARCH_RV64 config ARCH_RV_HARTID_BASE int "Base hartid of this cluster" default 0 ---help--- Some RV chips have multiple cluster of harts with globally numbered mhartids, like qemu-rv, mpfs and jh7110 etc. Clusters with SMP ability can be managed by NuttX. As NuttX expects cluster-local hart ids, we can shift mhartid by this value to derive such local ids. The SMP_NCPUS still defines number of harts in the cluster. Note that we assume that global ids for each cluster are continuous. Note that there are chips like k230 which don't have global mhartid. config ARCH_FAMILY string default "rv32" if ARCH_RV32 default "rv64" if ARCH_RV64 config ARCH_CHIP string default "fe310" if ARCH_CHIP_FE310 default "k210" if ARCH_CHIP_K210 default "litex" if ARCH_CHIP_LITEX default "bl602" if ARCH_CHIP_BL602 default "esp32c3-legacy" if ARCH_CHIP_ESP32C3 default "esp32c3" if ARCH_CHIP_ESP32C3_GENERIC default "esp32c6" if ARCH_CHIP_ESP32C6 default "esp32h2" if ARCH_CHIP_ESP32H2 default "c906" if ARCH_CHIP_C906 default "mpfs" if ARCH_CHIP_MPFS default "rv32m1" if ARCH_CHIP_RV32M1 default "qemu-rv" if ARCH_CHIP_QEMU_RV default "hpm6000" if ARCH_CHIP_HPM6000 default "hpm6750" if ARCH_CHIP_HPM6750 default "jh7110" if ARCH_CHIP_JH7110 default "bl808" if ARCH_CHIP_BL808 default "k230" if ARCH_CHIP_K230 default "sg2000" if ARCH_CHIP_SG2000 config ARCH_RISCV_INTXCPT_EXTENSIONS bool "RISC-V Integer Context Extensions" default n depends on RV32M1_OPENISA_TOOLCHAIN ---help--- RISC-V could be customized with extensions. Some Integer Context Registers have to be saved and restored when Contexts switch. if ARCH_RISCV_INTXCPT_EXTENSIONS config ARCH_RISCV_INTXCPT_EXTREGS int "Number of Extral RISC-V Integer Context Registers" default 0 endif config ARCH_MMU_TYPE_SV39 bool default n select ARCH_HAVE_MMU config ARCH_MMU_TYPE_SV32 bool default n select ARCH_HAVE_MMU config ARCH_HAVE_S_MODE bool default n config ARCH_HAVE_MISALIGN_EXCEPTION bool default n ---help--- The chip will raise a exception while misaligned memory access. config RISCV_MISALIGNED_HANDLER bool "Software misaligned memory access handler" depends on ARCH_HAVE_MISALIGN_EXCEPTION default y config RISCV_PERCPU_SCRATCH bool "Enable Scratch-based Per-CPU storage" default y if LIB_SYSCALL ---help--- In some special chipsets, multiple CPUs may be bundled in one hardware thread cluster, which results in hartid and cpuindex not being exactly the same. This option will enable Scratch-based Per-CPU storage to distinguish the real cpu index. # Option to run NuttX in supervisor mode. This is obviously not usable in # flat mode, is questionable in protected mode, but is mandatory in kernel # mode. # # Kernel mode requires this as M-mode uses flat addressing and the kernel # memory must be mapped in order to share memory between the kernel and # different user tasks which reside in virtual memory. # # Note that S-mode requires a companion software (SBI) # config ARCH_USE_S_MODE bool "Run NuttX in S-mode" default n depends on ARCH_HAVE_S_MODE select RISCV_PERCPU_SCRATCH ---help--- Most of the RISC-V implementations run in M-mode (flat addressing) and/or U-mode (in case of separate kernel-/userspaces). This provides an option to run the kernel in S-mode, if the target supports it. config ARCH_RV_EXT_SSTC bool "Enable RISC-V SSTC extension support" default n depends on ARCH_USE_S_MODE config ARCH_RV_HAVE_APLIC bool "Enable RISC-V Advanced Platform-Level Interrupt Controller support" default n ---help--- Instead of PLIC, RISC-V also defines Advanced Platform-Level Interrupt Controller (APLIC) to provide flexible interrupt control. This device is not backward compatible with PLIC. config ARCH_RV_EXT_AIA bool "Enable RISC-V SxAIA support" default n ---help--- Advanced Interrupt Architecture defines necessary features that impact the ISA at a hart. This should not be selected if the target does not support SxAIA for the operating mode of NuttX. if ARCH_RV_EXT_AIA config ARCH_RV_HAVE_IMSIC bool "Enable RISC-V AIA Incoming Message Controller support" default n endif # ARCH_RV_EXT_AIA choice prompt "Toolchain Selection" default RISCV_TOOLCHAIN_GNU_RV64 config RISCV_TOOLCHAIN_GNU_RV64 bool "Generic GNU RV64 toolchain" select ARCH_TOOLCHAIN_GNU ---help--- This option should work for any modern GNU toolchain (GCC 5.2 or newer) configured for riscv64-unknown-elf. config RISCV_TOOLCHAIN_GNU_RV32 bool "Generic GNU RV32 toolchain" select ARCH_TOOLCHAIN_GNU ---help--- This option should work for any modern GNU toolchain (GCC 5.2 or newer) configured for riscv32-unknown-elf. config RISCV_TOOLCHAIN_CLANG bool "LLVM Clang toolchain" select ARCH_TOOLCHAIN_CLANG config RISCV_TOOLCHAIN_GNU_RV64ILP32 bool "Generic GNU RV64ILP32 toolchain" select ARCH_TOOLCHAIN_GNU select ARCH_RV64ILP32 ---help--- This option work with Ruyisdk toolchain (GCC 13 or newer) configured for riscv64-unknown-elf. endchoice # Toolchain Selection config RISCV_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 RISCV_SEMIHOSTING_HOSTFS config RISCV_SEMIHOSTING_HOSTFS_CACHE_COHERENCE bool "Cache coherence in semihosting hostfs" depends on ARCH_DCACHE ---help--- Flush & Invalidte cache before & after bkpt instruction. endif # RISCV_SEMIHOSTING_HOSTFS if ARCH_CHIP_LITEX choice prompt "LITEX Core Selection" default LITEX_CORE_VEXRISCV config LITEX_CORE_VEXRISCV bool "vexriscv core" config LITEX_CORE_VEXRISCV_SMP bool "vexriscv_smp core" select ARCH_HAVE_MPU select ARCH_RV_ISA_C select ARCH_MMU_TYPE_SV32 select ARCH_HAVE_ADDRENV select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_S_MODE select ARCH_HAVE_ELF_EXECUTABLE endchoice # LITEX Core Selection endif # ARCH_CHIP_LITEX source "arch/risc-v/src/opensbi/Kconfig" source "arch/risc-v/src/nuttsbi/Kconfig" if ARCH_CHIP_FE310 source "arch/risc-v/src/fe310/Kconfig" endif if ARCH_CHIP_K210 source "arch/risc-v/src/k210/Kconfig" endif if ARCH_CHIP_LITEX source "arch/risc-v/src/litex/Kconfig" endif if ARCH_CHIP_BL602 source "arch/risc-v/src/bl602/Kconfig" endif if ARCH_CHIP_ESP32C3 source "arch/risc-v/src/esp32c3-legacy/Kconfig" endif if ARCH_CHIP_ESP32C3_GENERIC source "arch/risc-v/src/esp32c3/Kconfig" endif if ARCH_CHIP_ESP32C6 source "arch/risc-v/src/esp32c6/Kconfig" endif if ARCH_CHIP_ESP32H2 source "arch/risc-v/src/esp32h2/Kconfig" endif if ARCH_CHIP_C906 source "arch/risc-v/src/c906/Kconfig" endif if ARCH_CHIP_MPFS source "arch/risc-v/src/mpfs/Kconfig" endif if ARCH_CHIP_RV32M1 source "arch/risc-v/src/rv32m1/Kconfig" endif if ARCH_CHIP_QEMU_RV source "arch/risc-v/src/qemu-rv/Kconfig" endif if ARCH_CHIP_HPM6000 source "arch/risc-v/src/hpm6000/Kconfig" endif if ARCH_CHIP_HPM6750 source "arch/risc-v/src/hpm6750/Kconfig" endif if ARCH_CHIP_JH7110 source "arch/risc-v/src/jh7110/Kconfig" endif if ARCH_CHIP_BL808 source "arch/risc-v/src/bl808/Kconfig" endif if ARCH_CHIP_K230 source "arch/risc-v/src/k230/Kconfig" endif if ARCH_CHIP_SG2000 source "arch/risc-v/src/sg2000/Kconfig" endif endif # ARCH_RISCV