text: menu "RISC-V architecture"
  	depends on RISCV
  
  config SYS_ARCH
  	default "riscv"
  
  choice
  	prompt "Target select"
  	optional
  
  config TARGET_AX25_AE350
  	bool "Support ax25-ae350"
  
  config TARGET_MICROCHIP_ICICLE
  	bool "Support Microchip PolarFire-SoC Icicle Board"
  
  config TARGET_QEMU_VIRT
  	bool "Support QEMU Virt Board"
  
  config TARGET_SIFIVE_FU540
  	bool "Support SiFive FU540 Board"
  
  endchoice
  
  config SYS_ICACHE_OFF
  	bool "Do not enable icache"
  	default n
  	help
  	  Do not enable instruction cache in U-Boot.
  
  config SPL_SYS_ICACHE_OFF
  	bool "Do not enable icache in SPL"
  	depends on SPL
  	default SYS_ICACHE_OFF
  	help
  	  Do not enable instruction cache in SPL.
  
  config SYS_DCACHE_OFF
  	bool "Do not enable dcache"
  	default n
  	help
  	  Do not enable data cache in U-Boot.
  
  config SPL_SYS_DCACHE_OFF
  	bool "Do not enable dcache in SPL"
  	depends on SPL
  	default SYS_DCACHE_OFF
  	help
  	  Do not enable data cache in SPL.
  
  # board-specific options below
  source "board/AndesTech/ax25-ae350/Kconfig"
  source "board/emulation/qemu-riscv/Kconfig"
  source "board/microchip/mpfs_icicle/Kconfig"
  source "board/sifive/fu540/Kconfig"
  
  # platform-specific options below
  source "arch/riscv/cpu/ax25/Kconfig"
  source "arch/riscv/cpu/generic/Kconfig"
  
  # architecture-specific options below
  
  choice
  	prompt "Base ISA"
  	default ARCH_RV32I
  
  config ARCH_RV32I
  	bool "RV32I"
  	select 32BIT
  	help
  	  Choose this option to target the RV32I base integer instruction set.
  
  config ARCH_RV64I
  	bool "RV64I"
  	select 64BIT
  	select PHYS_64BIT
  	help
  	  Choose this option to target the RV64I base integer instruction set.
  
  endchoice
  
  choice
  	prompt "Code Model"
  	default CMODEL_MEDLOW
  
  config CMODEL_MEDLOW
  	bool "medium low code model"
  	help
  	  U-Boot and its statically defined symbols must lie within a single 2 GiB
  	  address range and must lie between absolute addresses -2 GiB and +2 GiB.
  
  config CMODEL_MEDANY
  	bool "medium any code model"
  	help
  	  U-Boot and its statically defined symbols must be within any single 2 GiB
  	  address range.
  
  endchoice
  
  choice
  	prompt "Run Mode"
  	default RISCV_MMODE
  
  config RISCV_MMODE
  	bool "Machine"
  	help
  	  Choose this option to build U-Boot for RISC-V M-Mode.
  
  config RISCV_SMODE
  	bool "Supervisor"
  	help
  	  Choose this option to build U-Boot for RISC-V S-Mode.
  
  endchoice
  
  choice
  	prompt "SPL Run Mode"
  	default SPL_RISCV_MMODE
  	depends on SPL
  
  config SPL_RISCV_MMODE
  	bool "Machine"
  	help
  	  Choose this option to build U-Boot SPL for RISC-V M-Mode.
  
  config SPL_RISCV_SMODE
  	bool "Supervisor"
  	help
  	  Choose this option to build U-Boot SPL for RISC-V S-Mode.
  
  endchoice
  
  config RISCV_ISA_C
  	bool "Emit compressed instructions"
  	default y
  	help
  	  Adds "C" to the ISA subsets that the toolchain is allowed to emit
  	  when building U-Boot, which results in compressed instructions in the
  	  U-Boot binary.
  
  config RISCV_ISA_A
  	def_bool y
  
  config 32BIT
  	bool
  
  config 64BIT
  	bool
  
  config SIFIVE_CLINT
  	bool
  	depends on RISCV_MMODE || SPL_RISCV_MMODE
  	select REGMAP
  	select SYSCON
  	select SPL_REGMAP if SPL
  	select SPL_SYSCON if SPL
  	help
  	  The SiFive CLINT block holds memory-mapped control and status registers
  	  associated with software and timer interrupts.
  
  config ANDES_PLIC
  	bool
  	depends on RISCV_MMODE || SPL_RISCV_MMODE
  	select REGMAP
  	select SYSCON
  	select SPL_REGMAP if SPL
  	select SPL_SYSCON if SPL
  	help
  	  The Andes PLIC block holds memory-mapped claim and pending registers
  	  associated with software interrupt.
  
  config ANDES_PLMT
  	bool
  	depends on RISCV_MMODE || SPL_RISCV_MMODE
  	select REGMAP
  	select SYSCON
  	select SPL_REGMAP if SPL
  	select SPL_SYSCON if SPL
  	help
  	  The Andes PLMT block holds memory-mapped mtime register
  	  associated with timer tick.
  
  config RISCV_RDTIME
  	bool
  	default y if RISCV_SMODE || SPL_RISCV_SMODE
  	help
  	  The provides the riscv_get_time() API that is implemented using the
  	  standard rdtime instruction. This is the case for S-mode U-Boot, and
  	  is useful for processors that support rdtime in M-mode too.
  
  config SYS_MALLOC_F_LEN
  	default 0x1000
  
  config SMP
  	bool "Symmetric Multi-Processing"
  	help
  	  This enables support for systems with more than one CPU. If
  	  you say N here, U-Boot will run on single and multiprocessor
  	  machines, but will use only one CPU of a multiprocessor
  	  machine. If you say Y here, U-Boot will run on many, but not
  	  all, single processor machines.
  
  config NR_CPUS
  	int "Maximum number of CPUs (2-32)"
  	range 2 32
  	depends on SMP
  	default 8
  	help
  	  On multiprocessor machines, U-Boot sets up a stack for each CPU.
  	  Stack memory is pre-allocated. U-Boot must therefore know the
  	  maximum number of CPUs that may be present.
  
  config SBI_IPI
  	bool
  	default y if RISCV_SMODE || SPL_RISCV_SMODE
  	depends on SMP
  
  config XIP
  	bool "XIP mode"
  	help
  	  XIP (eXecute In Place) is a method for executing code directly
  	  from a NOR flash memory without copying the code to ram.
  	  Say yes here if U-Boot boots from flash directly.
  
  config STACK_SIZE_SHIFT
  	int
  	default 14
  
  config SPL_LDSCRIPT
  	default "arch/riscv/cpu/u-boot-spl.lds"
  
  endmenu
  