summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-11-09 10:18:29 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-11-10 08:55:38 +0100
commit1bf1c779e1eea50930bb0953ca92e308a0503745 (patch)
tree55ce00b15fd06e4848e4b8a58488bb85e1e24728
parentbsps/riscv: bsp_interrupt_is_pending() (diff)
downloadrtems-1bf1c779e1eea50930bb0953ca92e308a0503745.tar.bz2
bsps/riscv: bsp_interrupt_raise_on()
Implement bsp_interrupt_raise_on() and bsp_interrupt_raise().
-rw-r--r--bsps/riscv/riscv/irq/irq.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/bsps/riscv/riscv/irq/irq.c b/bsps/riscv/riscv/irq/irq.c
index eeb7787080..e414711ef6 100644
--- a/bsps/riscv/riscv/irq/irq.c
+++ b/bsps/riscv/riscv/irq/irq.c
@@ -346,10 +346,27 @@ rtems_status_code bsp_interrupt_is_pending(
return RTEMS_SUCCESSFUL;
}
-rtems_status_code bsp_interrupt_raise(rtems_vector_number vector)
+static inline rtems_status_code riscv_raise_on(
+ rtems_vector_number vector,
+ uint32_t cpu_index
+)
{
+ Per_CPU_Control *cpu;
+
bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
- return RTEMS_UNSATISFIED;
+
+ if (vector != RISCV_INTERRUPT_VECTOR_SOFTWARE) {
+ return RTEMS_UNSATISFIED;
+ }
+
+ cpu = _Per_CPU_Get_by_index(cpu_index);
+ *cpu->cpu_per_cpu.clint_msip = 0x1;
+ return RTEMS_SUCCESSFUL;
+}
+
+rtems_status_code bsp_interrupt_raise(rtems_vector_number vector)
+{
+ return riscv_raise_on(vector, rtems_scheduler_get_processor());
}
#if defined(RTEMS_SMP)
@@ -358,8 +375,7 @@ rtems_status_code bsp_interrupt_raise_on(
uint32_t cpu_index
)
{
- bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
- return RTEMS_UNSATISFIED;
+ return riscv_raise_on(vector, cpu_index);
}
#endif