#
# 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
	---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_MPU
	select ARCH_HAVE_TESTSET
	select ARCH_HAVE_MULTICPU
	---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
	---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
	---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_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
	---help---
		Espressif ESP32-C3 (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
	---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_HAVE_MMU
	select ARCH_MMU_TYPE_SV39
	select ARCH_HAVE_RESET
	select ARCH_HAVE_SPI_CS_CONTROL
	select ARCH_HAVE_PWM_MULTICHAN
	select PMP_HAS_LIMITED_FEATURES
	---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
	---help---
		QEMU Generic RV32/RV64 processor

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

config ARCH_RV32
	bool
	default n

config ARCH_RV64
	bool
	default n
	select LIBC_ARCH_ELF_64BIT if LIBC_ARCH_ELF

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_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"	if ARCH_CHIP_ESP32C3
	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

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

# MPU has certain architecture dependent configurations, which are presented
# here. Default is that the full RISC-V PMP specification is supported.

config PMP_HAS_LIMITED_FEATURES
	bool
	default n

config ARCH_MPU_MIN_BLOCK_SIZE
	int "Minimum MPU (PMP) block size"
	default 4	if !PMP_HAS_LIMITED_FEATURES

config ARCH_MPU_HAS_TOR
	bool "PMP supports TOR"
	default y	if !PMP_HAS_LIMITED_FEATURES

config ARCH_MPU_HAS_NO4
	bool "PMP supports NO4"
	default y	if !PMP_HAS_LIMITED_FEATURES

config ARCH_MPU_HAS_NAPOT
	bool "PMP supports NAPOT"
	default y	if !PMP_HAS_LIMITED_FEATURES

source "arch/risc-v/src/opensbi/Kconfig"
source "arch/risc-v/src/common/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/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
endif
