According to ARMv8 architecture, the IRQ should be enable by calling gic_setup_spi when the NO. is larger than 31.

This commit is contained in:
songyanguang 2024-09-20 19:28:42 +08:00
parent 332bb5b870
commit 7000c5cd18
2 changed files with 12 additions and 1 deletions

View File

@ -70,7 +70,12 @@ static void _cpu_irq_disable(void)
static void _single_irq_enable(int irq, int cpu, int prio)
{
gic_setup_ppi((uint32_t)cpu, (uint32_t)irq);
if (irq < 32) {
gic_setup_ppi((uint32_t)cpu, (uint32_t)irq);
}
else {
gic_setup_spi((uint32_t)cpu, (uint32_t)irq);
}
}
static void _single_irq_disable(int irq, int cpu)

View File

@ -104,6 +104,8 @@ extern struct session_backend* create_session_inner(struct Thread* client, struc
static struct XiziTrapDriver* p_intr_driver = NULL;
int sys_register_irq(int irq_num, int irq_opcode)
{
int cpu_id;
// init intr resource;
if (p_intr_driver == NULL) {
struct TraceTag intr_ac_tag;
@ -140,6 +142,10 @@ int sys_register_irq(int irq_num, int irq_opcode)
p_intr_driver->bind_irq_handler(irq_num, user_irq_handler);
cur_task->bind_irq = true;
// enable irq
cpu_id = p_intr_driver->cur_cpu_id();
p_intr_driver->single_irq_enable(irq_num, cpu_id, 0);
return 0;
}