This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 1f02c05c6d arch/litex/litex_arch_alarm: Support tickless schedular 
with arch alarm.
1f02c05c6d is described below

commit 1f02c05c6dfa34266ac8b142578c3e5eb4fbcae2
Author: Stuart Ianna <[email protected]>
AuthorDate: Fri May 10 12:08:03 2024 +1000

    arch/litex/litex_arch_alarm: Support tickless schedular with arch alarm.
    
    This provides an alternate tickless scheduling method, which uses the riscv
    mtimer as a timebase, allowing the time and timeh registers to used
    throughout an application.
    
    The exiting tickless method, using Litex's timer0 has been left in place, as
    it is a more performant option, but currently has the potential issue
    identified in #11189.
---
 arch/risc-v/src/litex/Make.defs                    |  4 ++
 arch/risc-v/src/litex/litex_arch_alarm.c           | 56 ++++++++++++++++++++++
 .../litex/arty_a7/configs/knsh-tickless/defconfig  |  2 +
 3 files changed, 62 insertions(+)

diff --git a/arch/risc-v/src/litex/Make.defs b/arch/risc-v/src/litex/Make.defs
index f3bfabac1b..653bba416f 100644
--- a/arch/risc-v/src/litex/Make.defs
+++ b/arch/risc-v/src/litex/Make.defs
@@ -38,7 +38,11 @@ CHIP_ASRCS += litex_cache.S
 
 
 ifeq ($(CONFIG_SCHED_TICKLESS),y)
+ifeq ($(CONFIG_SCHED_TICKLESS_ALARM),y)
+CHIP_CSRCS += litex_arch_alarm.c
+else
 CHIP_CSRCS += litex_tickless.c
+endif
 else
 CHIP_CSRCS += litex_ticked.c
 endif
diff --git a/arch/risc-v/src/litex/litex_arch_alarm.c 
b/arch/risc-v/src/litex/litex_arch_alarm.c
new file mode 100644
index 0000000000..e3621ae9b4
--- /dev/null
+++ b/arch/risc-v/src/litex/litex_arch_alarm.c
@@ -0,0 +1,56 @@
+/****************************************************************************
+ * arch/risc-v/src/litex/litex_arch_alarm.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 <assert.h>
+#include <nuttx/config.h>
+#include <nuttx/timers/arch_alarm.h>
+
+#include "chip.h"
+#include "litex_clockconfig.h"
+#include "riscv_internal.h"
+#include "riscv_mtimer.h"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function:  up_timer_initialize
+ *
+ * Description:
+ *   This function is called during start-up to initialize
+ *   the timer interrupt.
+ *
+ ****************************************************************************/
+
+void up_timer_initialize(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);
+}
diff --git a/boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig 
b/boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig
index 83a307a6cf..eab2dece6d 100644
--- a/boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig
+++ b/boards/risc-v/litex/arty_a7/configs/knsh-tickless/defconfig
@@ -8,6 +8,7 @@
 # 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"
@@ -61,6 +62,7 @@ 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

Reply via email to