Skip to content

Commit 90258fd

Browse files
committed
[libcpu][riscv]统一plic
1 parent 42a41c6 commit 90258fd

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ struct plic_handler
3131
};
3232

3333
rt_inline void plic_toggle(struct plic_handler *handler, int hwirq, int enable);
34-
struct plic_handler plic_handlers[C908_NR_CPUS];
34+
struct plic_handler plic_handlers[NR_CPUS];
3535
static void *plic_irq_priority[INTERRUPTS_MAX] = {RT_NULL};
3636

3737
rt_inline void plic_irq_toggle(int hwirq, int enable)
@@ -153,7 +153,7 @@ rt_inline void plic_toggle(struct plic_handler *handler, int hwirq, int enable)
153153
}
154154
}
155155

156-
void plic_init(void)
156+
void plic_init(unsigned long base_pa)
157157
{
158158
int nr_irqs;
159159
int nr_context;
@@ -167,16 +167,16 @@ void plic_init(void)
167167
return;
168168
}
169169

170-
nr_context = C908_NR_CONTEXT;
170+
nr_context = PLIC_NR_CONTEXT;
171171

172-
plic_regs = (void *)C908_PLIC_PHY_ADDR;
172+
plic_regs = (void *)base_pa;
173173
if (!plic_regs)
174174
{
175175
LOG_E("fatal error, plic is reg space is null.");
176176
return;
177177
}
178178

179-
nr_irqs = C908_PLIC_NR_EXT_IRQS;
179+
nr_irqs = IRQ_MAX_NR;
180180

181181
for (i = 0; i < nr_context; i ++)
182182
{
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,8 @@
1414

1515
#include <interrupt.h>
1616

17-
#ifndef C908_PLIC_PHY_ADDR
18-
#define C908_PLIC_PHY_ADDR (0xF00000000UL)
19-
#endif
20-
#define C908_PLIC_NR_EXT_IRQS (IRQ_MAX_NR)
21-
#define C908_NR_CPUS (NR_CPUS)
22-
2317
/* M and S mode context. */
24-
#define C908_NR_CONTEXT (2)
18+
#define PLIC_NR_CONTEXT (2)
2519

2620
#define MAX_DEVICES 1024
2721
#define MAX_CONTEXTS 15872
@@ -50,7 +44,7 @@
5044
#define CONTEXT_THRESHOLD 0x00
5145
#define CONTEXT_CLAIM 0x04
5246

53-
void plic_init(void);
47+
void plic_init(unsigned long base_pa);
5448
void plic_enable_irq(int irqno);
5549
void plic_disable_irq(int irqno);
5650
// tell PLIC that we've served this IRQ

libcpu/risc-v/t-head/c906/interrupt.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
#include "riscv.h"
1616
#include "plic.h"
1717

18+
#ifndef C906_PLIC_PHY_ADDR
19+
#define C906_PLIC_PHY_ADDR (0x10000000)
20+
#endif
21+
1822
extern rt_atomic_t rt_interrupt_nest;
1923
extern rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread;
2024
extern rt_uint32_t rt_thread_switch_interrupt_flag;
@@ -32,7 +36,7 @@ static void rt_hw_interrupt_handler(int vector, void *param)
3236
void rt_hw_interrupt_init(void)
3337
{
3438
/* init interrupt controller */
35-
plic_init();
39+
plic_init(C906_PLIC_PHY_ADDR);
3640

3741
rt_int32_t idx;
3842

libcpu/risc-v/t-head/c908/interrupt.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
#include "riscv.h"
1616
#include "plic.h"
1717

18+
#ifndef C908_PLIC_PHY_ADDR
19+
#define C908_PLIC_PHY_ADDR (0xF00000000UL)
20+
#endif
21+
1822
extern rt_atomic_t rt_interrupt_nest;
1923
extern rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread;
2024
extern rt_uint32_t rt_thread_switch_interrupt_flag;
@@ -32,7 +36,7 @@ static void rt_hw_interrupt_handler(int vector, void *param)
3236
void rt_hw_interrupt_init(void)
3337
{
3438
/* init interrupt controller */
35-
plic_init();
39+
plic_init(C908_PLIC_PHY_ADDR);
3640

3741
rt_int32_t idx;
3842

0 commit comments

Comments
 (0)