diff --git a/arch/risc-v/Kconfig b/arch/risc-v/Kconfig index 2d47b743fff..275c28639ac 100644 --- a/arch/risc-v/Kconfig +++ b/arch/risc-v/Kconfig @@ -44,6 +44,7 @@ config ARCH_CHIP_LITEX select ARCH_RV_ISA_M select ARCH_RV_ISA_A select ARCH_DCACHE + select ARCH_HAVE_TICKLESS ---help--- Enjoy Digital LITEX VEXRISCV softcore processor (RV32IMA). diff --git a/arch/risc-v/src/litex/Make.defs b/arch/risc-v/src/litex/Make.defs index 2760dffa3ec..ed868915b04 100644 --- a/arch/risc-v/src/litex/Make.defs +++ b/arch/risc-v/src/litex/Make.defs @@ -32,9 +32,16 @@ endif CHIP_CSRCS = litex_allocateheap.c litex_clockconfig.c CHIP_CSRCS += litex_irq.c litex_irq_dispatch.c CHIP_CSRCS += litex_lowputc.c litex_serial.c -CHIP_CSRCS += litex_start.c litex_timerisr.c +CHIP_CSRCS += litex_start.c CHIP_ASRCS += litex_cache.S + +ifeq ($(CONFIG_SCHED_TICKLESS),y) +CHIP_CSRCS += litex_tickless.c +else +CHIP_CSRCS += litex_ticked.c +endif + ifeq ($(CONFIG_BUILD_KERNEL),y) CHIP_CSRCS += litex_mm_init.c litex_pgalloc.c endif diff --git a/arch/risc-v/src/litex/hardware/litex_timer.h b/arch/risc-v/src/litex/hardware/litex_timer.h index 619311199f2..91692d23895 100644 --- a/arch/risc-v/src/litex/hardware/litex_timer.h +++ b/arch/risc-v/src/litex/hardware/litex_timer.h @@ -41,6 +41,9 @@ #define LITEX_TIMER_EV_STATUS_OFFSET 0x0014 #define LITEX_TIMER_EV_PENDING_OFFSET 0x0018 #define LITEX_TIMER_EV_ENABLE_OFFSET 0x001C +#define LITEX_TIMER_UPTIME_LATCH_OFFSET 0x0020 +#define LITEX_TIMER_UPTIME_OFFSET_U 0x0024 +#define LITEX_TIMER_UPTIME_OFFSET_L 0x0028 /* LITEX_TIMER register addresses *******************************************/ @@ -52,7 +55,13 @@ #define LITEX_TIMER0_EV_STATUS (LITEX_TIMER0_BASE+LITEX_TIMER_EV_STATUS_OFFSET) #define LITEX_TIMER0_EV_PENDING (LITEX_TIMER0_BASE+LITEX_TIMER_EV_PENDING_OFFSET) #define LITEX_TIMER0_EV_ENABLE (LITEX_TIMER0_BASE+LITEX_TIMER_EV_ENABLE_OFFSET) +#define LITEX_TIMER0_UPTIME_LATCH (LITEX_TIMER0_BASE+LITEX_TIMER_UPTIME_LATCH_OFFSET) +#define LITEX_TIMER0_UPTIME_U (LITEX_TIMER0_BASE+LITEX_TIMER_UPTIME_OFFSET_U) +#define LITEX_TIMER0_UPTIME_L (LITEX_TIMER0_BASE+LITEX_TIMER_UPTIME_OFFSET_L) /* LITEX_TIMER register bit definitions *************************************/ +#define LITEX_TIMER0_TIMEOUT_EV_OFFSET 0x0 +#define LITEX_TIMER0_ENABLE_BIT 0x1 + #endif /* __ARCH_RISCV_SRC_LITEX_HARDWARE_LITEX_TIMER_H */ diff --git a/arch/risc-v/src/litex/litex_timerisr.c b/arch/risc-v/src/litex/litex_ticked.c similarity index 68% rename from arch/risc-v/src/litex/litex_timerisr.c rename to arch/risc-v/src/litex/litex_ticked.c index 8d55f175fa9..34d49842e1d 100644 --- a/arch/risc-v/src/litex/litex_timerisr.c +++ b/arch/risc-v/src/litex/litex_ticked.c @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/risc-v/src/litex/litex_timerisr.c + * arch/risc-v/src/litex/litex_ticked.c * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -23,17 +23,17 @@ ****************************************************************************/ #include -#include -#include -#include -#include +#include +#include + +#include "chip.h" + #include "riscv_internal.h" #include "litex.h" #include "litex_clockconfig.h" #include "hardware/litex_timer.h" -#include "riscv_mtimer.h" /**************************************************************************** * Pre-processor Definitions @@ -41,37 +41,17 @@ #define TICK_COUNT (litex_get_hfclk() / TICK_PER_SEC) -/**************************************************************************** - * Private Data - ****************************************************************************/ +#if !defined(CONFIG_SCHED_TICKLESS) /**************************************************************************** * Private Functions ****************************************************************************/ -/**************************************************************************** - * Name: litex_timerisr - ****************************************************************************/ - -#ifdef CONFIG_LITEX_CORE_VEXRISCV_SMP -static void litex_mtimer_initialise(void) -{ - struct oneshot_lowerhalf_s *lower = riscv_mtimer_initialize( - LITEX_CLINT_MTIME, LITEX_CLINT_MTIMECMP, - RISCV_IRQ_TIMER, litex_get_hfclk()); - - DEBUGASSERT(lower); - - up_alarm_set_lowerhalf(lower); -} - -#else - static int litex_timerisr(int irq, void *context, void *arg) { /* Clear timer interrupt */ - putreg32(0xffffffff, LITEX_TIMER0_EV_PENDING); + putreg32(1 << LITEX_TIMER0_TIMEOUT_EV_OFFSET, LITEX_TIMER0_EV_PENDING); /* Process timer interrupt */ @@ -79,39 +59,12 @@ static int litex_timerisr(int irq, void *context, void *arg) return 0; } -static void litex_timer0_initialize(void) -{ - /* Disable the timer and clear any pending interrupt */ - - putreg32(0, LITEX_TIMER0_EN); - putreg32(getreg32(LITEX_TIMER0_EV_PENDING), LITEX_TIMER0_EV_PENDING); - - /* Set the timer period */ - - putreg32(TICK_COUNT, LITEX_TIMER0_RELOAD); - putreg32(getreg32(LITEX_TIMER0_RELOAD), LITEX_TIMER0_LOAD); - - /* Attach timer interrupt handler */ - - irq_attach(LITEX_IRQ_TIMER0, litex_timerisr, NULL); - - /* Enable the timer */ - - putreg32(1, LITEX_TIMER0_EN); - - /* And enable the timer interrupt */ - - putreg32(1, LITEX_TIMER0_EV_ENABLE); - up_enable_irq(LITEX_IRQ_TIMER0); -} -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ /**************************************************************************** - * Name: up_timer_initialize + * Function: up_timer_initialize * * Description: * This function is called during start-up to initialize @@ -121,9 +74,27 @@ static void litex_timer0_initialize(void) void up_timer_initialize(void) { -#ifdef CONFIG_LITEX_CORE_VEXRISCV_SMP - litex_mtimer_initialise(); -#else - litex_timer0_initialize(); -#endif + /* Disable the timer and clear any pending interrupt */ + + putreg32(0, LITEX_TIMER0_EN); + putreg32(1 << LITEX_TIMER0_TIMEOUT_EV_OFFSET, LITEX_TIMER0_EV_PENDING); + + /* Set the timer period */ + + putreg32(TICK_COUNT, LITEX_TIMER0_RELOAD); + + /* Attach timer interrupt handler */ + + irq_attach(LITEX_IRQ_TIMER0, litex_timerisr, NULL); + + /* Enable the timer */ + + putreg32(LITEX_TIMER0_ENABLE_BIT, LITEX_TIMER0_EN); + + /* And enable the timer interrupt */ + + putreg32(1 << LITEX_TIMER0_TIMEOUT_EV_OFFSET, LITEX_TIMER0_EV_ENABLE); + up_enable_irq(LITEX_IRQ_TIMER0); } + +#endif /* !defind(CONFIG_SCHED_TICKLESS) */ diff --git a/arch/risc-v/src/litex/litex_tickless.c b/arch/risc-v/src/litex/litex_tickless.c new file mode 100644 index 00000000000..456930abf6c --- /dev/null +++ b/arch/risc-v/src/litex/litex_tickless.c @@ -0,0 +1,339 @@ +/**************************************************************************** + * arch/risc-v/src/litex/litex_tickless.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +#include "chip.h" + +#include "riscv_internal.h" + +#include "litex.h" +#include "litex_clockconfig.h" +#include "hardware/litex_timer.h" + +#if defined(CONFIG_SCHED_TICKLESS) + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define LITEX_TICK_PER_SEC (CONFIG_LITEX_SYS_CORE_FREQ_HZ) +#define LITEX_TICK_PER_USEC (LITEX_TICK_PER_SEC / USEC_PER_SEC) + +#define SEC_2_LITEX_TICK(s) ((s) * LITEX_TICK_PER_SEC) +#define USEC_2_LITEX_TICK(us) ((us) * LITEX_TICK_PER_USEC) +#define NSEC_2_LITEX_TICK(nsec) (((nsec) * LITEX_TICK_PER_USEC) / NSEC_PER_USEC) + +#define LITEX_TICK_2_SEC(tick) ((tick) / LITEX_TICK_PER_SEC) +#define LITEX_TICK_2_USEC(tick) ((tick) / LITEX_TICK_PER_USEC) +#define LITEX_TICK_2_NSEC(tick) ((tick) * 1000 / LITEX_TICK_PER_USEC) + +static bool g_timer_started; /* Whether an interval timer is being started */ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: up_timer_expire + * + * Description: + * Called as the IRQ handler for timer expiration. + * + * Input Parameters: + * None + * + * Returned Value: + * None + * + ****************************************************************************/ + +static int up_timer_expire(int irq, void *regs, void *arg) +{ + g_timer_started = false; + putreg32(1 << LITEX_TIMER0_TIMEOUT_EV_OFFSET, LITEX_TIMER0_EV_PENDING); + nxsched_timer_expiration(); + return OK; +} + +/**************************************************************************** + * Name: litex_get_uptime + * + * Description: + * Get the number of ticks remaining on the counter. + * + * Input Parameters: + * None + * + ****************************************************************************/ + +void litex_get_uptime(uint64_t * value) +{ + putreg32(1, LITEX_TIMER0_UPTIME_LATCH); + *value = (uint64_t)getreg32(LITEX_TIMER0_UPTIME_U) << 32; + *value |= getreg32(LITEX_TIMER0_UPTIME_L); +} + +/**************************************************************************** + * Name: litex_get_remaining + * + * Description: + * Get the number of ticks remaining on the counter. + * + * Input Parameters: + * None + * + * Returned Value: + * The count remaining on the timer. + * + ****************************************************************************/ + +uint32_t litex_get_remaining() +{ + putreg32(1, LITEX_TIMER0_UPDATE_VALUE); + return getreg32(LITEX_TIMER0_VALUE); +} + +/**************************************************************************** + * Name: litex_timer_cancel + * + * Input Parameters: + * None + * + * Description: + * Cancel any running one-shot timer. + * + ****************************************************************************/ + +void litex_timer_cancel() +{ + g_timer_started = false; + putreg32(0, LITEX_TIMER0_EN); + putreg32(1 << LITEX_TIMER0_TIMEOUT_EV_OFFSET, LITEX_TIMER0_EV_PENDING); +} + +/**************************************************************************** + * Name: litex_timer_oneshot + * + * Description: + * Start timer0 in one-shot countdown mode. + * + * Input Parameters: + * ticks - The tick count to use for the one-shot timer. + * + ****************************************************************************/ + +void litex_timer_oneshot(const uint32_t ticks) +{ + g_timer_started = true; + putreg32(ticks, LITEX_TIMER0_LOAD); + putreg32(LITEX_TIMER0_ENABLE_BIT, LITEX_TIMER0_EN); +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: up_timer_gettime + * + * Description: + * Return the elapsed time since power-up (or, more correctly, since + * up_timer_initialize() was called). This function is functionally + * equivalent to: + * + * int clock_gettime(clockid_t clockid, struct timespec *ts); + * + * when clockid is CLOCK_MONOTONIC. + * + * This function provides the basis for reporting the current time and + * also is used to eliminate error build-up from small errors in interval + * time calculations. + * + * Provided by platform-specific code and called from the RTOS base code. + * + * Input Parameters: + * ts - Provides the location in which to return the up-time. + * + * Returned Value: + * Zero (OK) is returned on success; a negated errno value is returned on + * any failure. + * + * Assumptions: + * Called from the normal tasking context. The implementation must + * provide whatever mutual exclusion is necessary for correct operation. + * This can include disabling interrupts in order to assure atomic register + * operations. + * + ****************************************************************************/ + +int up_timer_gettime(struct timespec *ts) +{ + uint64_t ticks; + + litex_get_uptime(&ticks); + ts->tv_sec = LITEX_TICK_2_SEC(ticks); + ts->tv_nsec = LITEX_TICK_2_NSEC(ticks % LITEX_TICK_PER_SEC); + + return OK; +} + +/**************************************************************************** + * Name: up_timer_cancel + * + * Description: + * Cancel the interval timer and return the time remaining on the timer. + * These two steps need to be as nearly atomic as possible. + * nxsched_timer_expiration() will not be called unless the timer is + * restarted with up_timer_start(). + * + * If, as a race condition, the timer has already expired when this + * function is called, then that pending interrupt must be cleared so + * that up_timer_start() and the remaining time of zero should be + * returned. + * + * NOTE: This function may execute at a high rate with no timer running (as + * when pre-emption is enabled and disabled). + * + * Provided by platform-specific code and called from the RTOS base code. + * + * Input Parameters: + * ts - Location to return the remaining time. Zero should be returned + * if the timer is not active. ts may be zero in which case the + * time remaining is not returned. + * + * Returned Value: + * Zero (OK) is returned on success. A call to up_timer_cancel() when + * the timer is not active should also return success; a negated errno + * value is returned on any failure. + * + * Assumptions: + * May be called from interrupt level handling or from the normal tasking + * level. Interrupts may need to be disabled internally to assure + * non-reentrancy. + * + ****************************************************************************/ + +int up_timer_cancel(struct timespec *ts) +{ + uint64_t alarm_value; + irqstate_t flags; + + flags = enter_critical_section(); + + if (ts != NULL) + { + if (g_timer_started == false) + { + ts->tv_sec = 0; + ts->tv_nsec = 0; + } + else + { + litex_timer_cancel(); + alarm_value = litex_get_remaining(); + ts->tv_sec = LITEX_TICK_2_SEC(alarm_value); + ts->tv_nsec = LITEX_TICK_2_NSEC(alarm_value % LITEX_TICK_PER_SEC); + } + } + + leave_critical_section(flags); + return OK; +} + +/**************************************************************************** + * Name: up_timer_start + * + * Description: + * Start the interval timer. nxsched_timer_expiration() will be + * called at the completion of the timeout (unless up_timer_cancel + * is called to stop the timing. + * + * Provided by platform-specific code and called from the RTOS base code. + * + * Input Parameters: + * ts - Provides the time interval until nxsched_timer_expiration() is + * called. + * + * Returned Value: + * Zero (OK) is returned on success; a negated errno value is returned on + * any failure. + * + * Assumptions: + * May be called from interrupt level handling or from the normal tasking + * level. Interrupts may need to be disabled internally to assure + * non-reentrancy. + * + ****************************************************************************/ + +int up_timer_start(const struct timespec *ts) +{ + uint64_t cpu_ticks; + irqstate_t flags; + + flags = enter_critical_section(); + + litex_timer_cancel(); + + cpu_ticks = SEC_2_LITEX_TICK((uint64_t)ts->tv_sec) + + NSEC_2_LITEX_TICK((uint64_t)ts->tv_nsec); + + DEBUGASSERT(cpu_ticks <= UINT32_MAX); + + litex_timer_oneshot(cpu_ticks); + + leave_critical_section(flags); + + return OK; +} + +/**************************************************************************** + * Function: up_timer_initialize + * + * Description: + * This function is called during start-up to initialize + * the timer interrupt. + * + ****************************************************************************/ + +void up_timer_initialize(void) +{ + /* Cancel any configuration that has been done in the bios or openSBI */ + + litex_timer_cancel(); + + /* Write zero to reload to ensure one-shot mode */ + + putreg32(0, LITEX_TIMER0_RELOAD); + + putreg32(1 << LITEX_TIMER0_TIMEOUT_EV_OFFSET, LITEX_TIMER0_EV_ENABLE); + irq_attach(LITEX_IRQ_TIMER0, up_timer_expire, NULL); + up_enable_irq(LITEX_IRQ_TIMER0); +} + +#endif /* CONFIG_SCHED_TICKLESS */ diff --git a/boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig b/boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig new file mode 100644 index 00000000000..5b38853179f --- /dev/null +++ b/boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig @@ -0,0 +1,84 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_DEBUG_OPT_UNUSED_SECTIONS is not set +# CONFIG_NSH_DISABLE_LOSMART is not set +# CONFIG_STANDARD_SERIAL is not set +CONFIG_ARCH="risc-v" +CONFIG_ARCH_ADDRENV=y +CONFIG_ARCH_BOARD="arty_a7" +CONFIG_ARCH_BOARD_ARTY_A7=y +CONFIG_ARCH_CHIP="litex" +CONFIG_ARCH_CHIP_LITEX=y +CONFIG_ARCH_DATA_NPAGES=128 +CONFIG_ARCH_DATA_VBASE=0x10400000 +CONFIG_ARCH_HEAP_NPAGES=128 +CONFIG_ARCH_HEAP_VBASE=0x10800000 +CONFIG_ARCH_INTERRUPTSTACK=8192 +CONFIG_ARCH_KERNEL_STACKSIZE=3072 +CONFIG_ARCH_PGPOOL_MAPPING=y +CONFIG_ARCH_PGPOOL_PBASE=0x40800000 +CONFIG_ARCH_PGPOOL_SIZE=4194304 +CONFIG_ARCH_PGPOOL_VBASE=0x40800000 +CONFIG_ARCH_RISCV=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARCH_TEXT_NPAGES=128 +CONFIG_ARCH_TEXT_VBASE=0x10000000 +CONFIG_ARCH_USE_MMU=y +CONFIG_ARCH_USE_MPU=y +CONFIG_ARCH_USE_S_MODE=y +CONFIG_BINFMT_ELF_EXECUTABLE=y +CONFIG_BOARDCTL_ROMDISK=y +CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=10000 +CONFIG_BUILD_KERNEL=y +CONFIG_DEV_ZERO=y +CONFIG_ELF=y +CONFIG_EXAMPLES_HELLO=y +CONFIG_FS_PROCFS=y +CONFIG_FS_PROCFS_EXCLUDE_ENVIRON=y +CONFIG_FS_ROMFS=y +CONFIG_IDLETHREAD_STACKSIZE=2048 +CONFIG_INIT_FILEPATH="/system/bin/init" +CONFIG_INIT_MOUNT=y +CONFIG_INIT_MOUNT_FLAGS=0x1 +CONFIG_INIT_MOUNT_TARGET="/system/bin" +CONFIG_INIT_STACKSIZE=3072 +CONFIG_INTELHEX_BINARY=y +CONFIG_LIBC_ENVPATH=y +CONFIG_LIBC_EXECFUNCS=y +CONFIG_LIBC_PERROR_STDOUT=y +CONFIG_LIBC_STRERROR=y +CONFIG_LITEX_APPLICATION_RAMDISK=y +CONFIG_LITEX_CORE_VEXRISCV_SMP=y +CONFIG_MM_PGALLOC=y +CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_FILE_APPS=y +CONFIG_NSH_READLINE=y +CONFIG_PATH_INITIAL="/system/bin" +CONFIG_RAM_SIZE=4194304 +CONFIG_RAM_START=0x40400000 +CONFIG_RAW_BINARY=y +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_TICKLESS=y +CONFIG_SCHED_WAITPID=y +CONFIG_START_MONTH=12 +CONFIG_START_YEAR=2021 +CONFIG_SYMTAB_ORDEREDBYNAME=y +CONFIG_SYSLOG_PROCESS_NAME=y +CONFIG_SYSLOG_TIMESTAMP=y +CONFIG_SYSTEM_CLE=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_NSH_PROGNAME="init" +CONFIG_TESTING_GETPRIME=y +CONFIG_UART0_RXBUFSIZE=128 +CONFIG_UART0_SERIAL_CONSOLE=y +CONFIG_UART0_TXBUFSIZE=128 +CONFIG_USEC_PER_TICK=1 diff --git a/boards/risc-v/litex/arty_a7/configs/knsh/defconfig b/boards/risc-v/litex/arty_a7/configs/knsh/defconfig index 61693e0b302..013081976fa 100644 --- a/boards/risc-v/litex/arty_a7/configs/knsh/defconfig +++ b/boards/risc-v/litex/arty_a7/configs/knsh/defconfig @@ -8,7 +8,6 @@ # CONFIG_DEBUG_OPT_UNUSED_SECTIONS is not set # CONFIG_NSH_DISABLE_LOSMART is not set # CONFIG_STANDARD_SERIAL is not set -CONFIG_ALARM_ARCH=y CONFIG_ARCH="risc-v" CONFIG_ARCH_ADDRENV=y CONFIG_ARCH_BOARD="arty_a7" @@ -56,13 +55,11 @@ CONFIG_LIBC_PERROR_STDOUT=y CONFIG_LIBC_STRERROR=y CONFIG_LITEX_APPLICATION_RAMDISK=y CONFIG_LITEX_CORE_VEXRISCV_SMP=y -CONFIG_LITEX_SYS_CORE_FREQ_HZ=300000000 CONFIG_MM_PGALLOC=y CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 CONFIG_NSH_FILEIOSIZE=512 CONFIG_NSH_FILE_APPS=y CONFIG_NSH_READLINE=y -CONFIG_ONESHOT=y CONFIG_PATH_INITIAL="/system/bin" CONFIG_RAM_SIZE=4194304 CONFIG_RAM_START=0x40400000 diff --git a/boards/risc-v/litex/arty_a7/configs/nsh-tickless/defconfig b/boards/risc-v/litex/arty_a7/configs/nsh-tickless/defconfig new file mode 100644 index 00000000000..55a1de68c78 --- /dev/null +++ b/boards/risc-v/litex/arty_a7/configs/nsh-tickless/defconfig @@ -0,0 +1,69 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_DISABLE_PTHREAD is not set +# CONFIG_FS_PROCFS_EXCLUDE_BLOCKS is not set +# CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set +# CONFIG_FS_PROCFS_EXCLUDE_MEMDUMP is not set +# CONFIG_FS_PROCFS_EXCLUDE_MEMINFO is not set +# CONFIG_FS_PROCFS_EXCLUDE_MOUNT is not set +# CONFIG_FS_PROCFS_EXCLUDE_MOUNTS is not set +# CONFIG_FS_PROCFS_EXCLUDE_PROCESS is not set +# CONFIG_FS_PROCFS_EXCLUDE_UPTIME is not set +# CONFIG_FS_PROCFS_EXCLUDE_USAGE is not set +# CONFIG_FS_PROCFS_EXCLUDE_VERSION is not set +# CONFIG_NSH_DISABLEBG is not set +# CONFIG_NSH_DISABLE_LOSMART is not set +# CONFIG_NSH_DISABLE_UNAME is not set +# CONFIG_STANDARD_SERIAL is not set +CONFIG_ARCH="risc-v" +CONFIG_ARCH_BOARD="arty_a7" +CONFIG_ARCH_BOARD_ARTY_A7=y +CONFIG_ARCH_CHIP="litex" +CONFIG_ARCH_CHIP_LITEX=y +CONFIG_ARCH_INTERRUPTSTACK=8192 +CONFIG_ARCH_RISCV=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_BOARD_LOOPSPERMSEC=10000 +CONFIG_BUILTIN=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEFAULT_SMALL=y +CONFIG_DEV_ZERO=y +CONFIG_EXAMPLES_HELLO=y +CONFIG_EXAMPLES_HELLO_STACKSIZE=8192 +CONFIG_FS_PROCFS=y +CONFIG_IDLETHREAD_STACKSIZE=8192 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INIT_STACKSIZE=8192 +CONFIG_INTELHEX_BINARY=y +CONFIG_LIBC_PERROR_STDOUT=y +CONFIG_LIBC_STRERROR=y +CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=64 +CONFIG_NSH_STRERROR=y +CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=8192 +CONFIG_PTHREAD_STACK_DEFAULT=8192 +CONFIG_RAM_SIZE=268435456 +CONFIG_RAM_START=0x40000000 +CONFIG_RAW_BINARY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_TICKLESS=y +CONFIG_SCHED_WAITPID=y +CONFIG_STACK_COLORATION=y +CONFIG_START_DAY=20 +CONFIG_START_MONTH=3 +CONFIG_START_YEAR=2020 +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=12 +CONFIG_TESTING_GETPRIME=y +CONFIG_UART0_RXBUFSIZE=128 +CONFIG_UART0_SERIAL_CONSOLE=y +CONFIG_UART0_TXBUFSIZE=128 +CONFIG_USEC_PER_TICK=1