/* * Copyright (c) 2025 Andrew Featherstone * * SPDX-License-Identifier: Apache-2.0 */ #define DT_DRV_COMPAT hazard3_hazard3_intc #include #include #include #include #include #include #include #include #include #define CSR_WINDOW_SIZE 16 void arch_irq_enable(unsigned int irq) { irq_set_enabled(irq, true); } void arch_irq_disable(unsigned int irq) { irq_set_enabled(irq, false); } int arch_irq_is_enabled(unsigned int irq) { return pico_irq_is_enabled(irq); } static int hazard3_irq_init(const struct device *dev) { /* Clear all IRQ force array bits. */ for (int i = 0; (i * CSR_WINDOW_SIZE) < CONFIG_NUM_IRQS; i++) { hazard3_irqarray_clear(RVCSR_MEIFA_OFFSET, i, -1); } /* Global external IRQ enable. */ csr_write(mie, RVCSR_MIE_MEIE_BITS); csr_set(mstatus, MSTATUS_IEN); return 0; } DEVICE_DT_INST_DEFINE(0, hazard3_irq_init, NULL, NULL, NULL, PRE_KERNEL_1, CONFIG_INTC_INIT_PRIORITY, NULL);