10 #include "qm_common.h"
11 #include "qm_soc_regs.h"
13 #define NUM_IRQ_LINES (32)
15 static uint32_t _mvic_get_irq_val(
unsigned int irq)
21 QM_IOAPIC->ioregsel.reg = ((irq & 0x7) << 1) | ((irq & 0x18) << 2);
22 return QM_IOAPIC->iowin.reg;
25 static void _mvic_set_irq_val(
unsigned int irq, uint32_t value)
31 QM_IOAPIC->ioregsel.reg = ((irq & 0x7) << 1) | ((irq & 0x18) << 2);
32 QM_IOAPIC->iowin.reg = value;
38 static __inline__
void mvic_init(
void)
42 for (i = 0; i < NUM_IRQ_LINES; i++) {
49 _mvic_set_irq_val(i, BIT(16));
58 static __inline__
void mvic_register_irq(uint32_t irq)
63 case QM_IRQ_RTC_0_INT:
64 case QM_IRQ_AONPT_0_INT:
65 case QM_IRQ_PIC_TIMER:
66 case QM_IRQ_WDT_0_INT:
68 _mvic_set_irq_val(irq, 0);
72 _mvic_set_irq_val(irq, BIT(15));
82 static __inline__
void mvic_unmask_irq(uint32_t irq)
84 uint32_t value = _mvic_get_irq_val(irq);
88 _mvic_set_irq_val(irq, value);
96 static __inline__
void mvic_mask_irq(uint32_t irq)
98 uint32_t value = _mvic_get_irq_val(irq);
102 _mvic_set_irq_val(irq, value);