mirror of
https://github.com/apache/nuttx.git
synced 2026-03-24 23:54:24 +08:00
arch/risc-v/litex: Add platform specific tickless implementation.
Adds a platform specific implementation for tickless schedular operation. This includes: - Tickless operation for vexriscv cores. - Tickless operation for vexriscv-smp cores. - Ticked operation for vexriscv-smp cores. Ticked operation for vexriscv core has been refactored. Additional default configuration added to demonstrate operation. Both tickless and ticked options use Litex timer0 for scheduling intervals. This is significantly faster than interfaceing with the risc-v mtimer through opensbi.
This commit is contained in:
@@ -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).
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 <nuttx/config.h>
|
||||
#include <nuttx/clock.h>
|
||||
#include <nuttx/timers/arch_alarm.h>
|
||||
#include <nuttx/init.h>
|
||||
|
||||
#include <debug.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#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) */
|
||||
339
arch/risc-v/src/litex/litex_tickless.c
Normal file
339
arch/risc-v/src/litex/litex_tickless.c
Normal file
@@ -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 <nuttx/config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <assert.h>
|
||||
|
||||
#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 */
|
||||
84
boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig
Normal file
84
boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig
Normal file
@@ -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
|
||||
@@ -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
|
||||
|
||||
69
boards/risc-v/litex/arty_a7/configs/nsh-tickless/defconfig
Normal file
69
boards/risc-v/litex/arty_a7/configs/nsh-tickless/defconfig
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user