# Copyright (c) 2021 Tokita, Hiroshi <tokita.hiroshi@gmail.com>
# SPDX-License-Identifier: Apache-2.0

if SOC_GD32VF103

config KERNEL_ENTRY
	default "__nuclei_start"

config SYS_CLOCK_HW_CYCLES_PER_SEC
	# This value should be the CPU frequency divided by 4.
	# The CPU frequency is set to the maximum value of 108MHz by default.
	default 27000000

config RISCV_MCAUSE_EXCEPTION_MASK
	default 0xFFF

config RISCV_SOC_INTERRUPT_INIT
	default y

config RISCV_GP
	default y

config NUM_IRQS
	default 87 if  NUCLEI_ECLIC
	default 16 if !NUCLEI_ECLIC

config 2ND_LEVEL_INTERRUPTS
	default y

config ARCH_IRQ_VECTOR_TABLE_ALIGN
	default 512 if NUCLEI_ECLIC

config RISCV_TRAP_HANDLER_ALIGNMENT
	default 64 if NUCLEI_ECLIC && !RISCV_VECTORED_MODE

endif # GD32VF103
