summaryrefslogtreecommitdiff
path: root/libcpu/risc-v
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2018-12-23 14:11:25 +0800
committerBernard Xiong <[email protected]>2018-12-23 14:11:25 +0800
commit597d71cc032bf30098c2a5f890eec48ce5ff418d (patch)
treede2276e5cdcb067cdaeb9c6ffddbb0d01e5744f1 /libcpu/risc-v
parentda612ebaf6cf48556e9cd653b0b02822c517dd1a (diff)
[bsp][k210] Add get_free_heap_size function.
* Add get_free_heap_size function; * Increase shell stack for KPU module.
Diffstat (limited to 'libcpu/risc-v')
-rw-r--r--libcpu/risc-v/k210/interrupt.c14
-rw-r--r--libcpu/risc-v/k210/startup_gcc.S5
2 files changed, 18 insertions, 1 deletions
diff --git a/libcpu/risc-v/k210/interrupt.c b/libcpu/risc-v/k210/interrupt.c
index 6d8866c3f0..f9c3eb5a67 100644
--- a/libcpu/risc-v/k210/interrupt.c
+++ b/libcpu/risc-v/k210/interrupt.c
@@ -114,6 +114,13 @@ rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
return old_handler;
}
+RT_WEAK
+void plic_irq_handle(plic_irq_t irq)
+{
+ rt_kprintf("UN-handled interrupt %d occurred!!!\n", irq);
+ return ;
+}
+
uintptr_t handle_irq_m_ext(uintptr_t cause, uintptr_t epc)
{
/*
@@ -142,7 +149,12 @@ uintptr_t handle_irq_m_ext(uintptr_t cause, uintptr_t epc)
/* Disable software interrupt and timer interrupt */
clear_csr(mie, MIP_MTIP | MIP_MSIP);
- if (irq_desc[core_id][int_num].handler)
+ if (irq_desc[core_id][int_num].handler == (rt_isr_handler_t)rt_hw_interrupt_handle)
+ {
+ /* default handler, route to kendryte bsp plic driver */
+ plic_irq_handle(int_num);
+ }
+ else if (irq_desc[core_id][int_num].handler)
{
irq_desc[core_id][int_num].handler(int_num, irq_desc[core_id][int_num].param);
}
diff --git a/libcpu/risc-v/k210/startup_gcc.S b/libcpu/risc-v/k210/startup_gcc.S
index bc73f51e03..2e69c5021e 100644
--- a/libcpu/risc-v/k210/startup_gcc.S
+++ b/libcpu/risc-v/k210/startup_gcc.S
@@ -16,6 +16,11 @@
_start:
j 1f
.word 0xdeadbeef
+ .align 3
+ .global g_wake_up
+ g_wake_up:
+ .dword 1
+ .dword 0
1:
csrw mideleg, 0
csrw medeleg, 0