From 71c3b30bd01655370001a3f19e603101d597245e Mon Sep 17 00:00:00 2001 From: babbleberry Date: Tue, 6 Feb 2024 12:22:54 +0000 Subject: [PATCH] Updated part14 to reflect changes to part13 --- part14-spi-ethernet/kernel/irq.c | 2 +- part14-spi-ethernet/kernel/kernel.c | 1 + part14-spi-ethernet/kernel/kernel.h | 1 + part14-spi-ethernet/kernel/utils.S | 5 +++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/part14-spi-ethernet/kernel/irq.c b/part14-spi-ethernet/kernel/irq.c index 3ab82d1..6e83ca3 100644 --- a/part14-spi-ethernet/kernel/irq.c +++ b/part14-spi-ethernet/kernel/irq.c @@ -11,7 +11,7 @@ void disable_interrupt_controller() { void handle_irq() { unsigned int irq = REGS_IRQ->irq0_pending_0; - while(irq) { + while(irq & (SYS_TIMER_IRQ_1 | SYS_TIMER_IRQ_3)) { if (irq & SYS_TIMER_IRQ_1) { irq &= ~SYS_TIMER_IRQ_1; diff --git a/part14-spi-ethernet/kernel/kernel.c b/part14-spi-ethernet/kernel/kernel.c index fe2fe6f..5b35e15 100644 --- a/part14-spi-ethernet/kernel/kernel.c +++ b/part14-spi-ethernet/kernel/kernel.c @@ -147,6 +147,7 @@ void main(void) irq_init_vectors(); enable_interrupt_controller(); + irq_barrier(); irq_enable(); timer_init(); diff --git a/part14-spi-ethernet/kernel/kernel.h b/part14-spi-ethernet/kernel/kernel.h index 33591dc..6d471af 100644 --- a/part14-spi-ethernet/kernel/kernel.h +++ b/part14-spi-ethernet/kernel/kernel.h @@ -38,6 +38,7 @@ enum vc_irqs { void irq_init_vectors(); void irq_enable(); +void irq_barrier(); void irq_disable(); void enable_interrupt_controller(); void disable_interrupt_controller(); diff --git a/part14-spi-ethernet/kernel/utils.S b/part14-spi-ethernet/kernel/utils.S index 6027c0d..7a34152 100644 --- a/part14-spi-ethernet/kernel/utils.S +++ b/part14-spi-ethernet/kernel/utils.S @@ -13,3 +13,8 @@ irq_enable: irq_disable: msr daifset, #2 ret + +.globl irq_barrier +irq_barrier: + dsb sy + ret