diff options
-rw-r--r-- | chip/ish/registers.h | 3 | ||||
-rw-r--r-- | core/minute-ia/interrupts.c | 6 |
2 files changed, 5 insertions, 4 deletions
diff --git a/chip/ish/registers.h b/chip/ish/registers.h index eb028b403d..1ffd5fad75 100644 --- a/chip/ish/registers.h +++ b/chip/ish/registers.h @@ -321,7 +321,8 @@ enum ish_i2c_port { /* Bare address needed for assembler (ISH_LAPIC_BASE + 0xB0) */ #define LAPIC_EOI_REG_ADDR 0xFEE000B0 #define LAPIC_EOI_REG REG32(LAPIC_EOI_REG_ADDR) -#define LAPIC_ISR_REG REG32(ISH_LAPIC_BASE + 0x170) +#define LAPIC_ISR_REG REG32(ISH_LAPIC_BASE + 0x100) +#define LAPIC_ISR_LAST_REG REG32(ISH_LAPIC_BASE + 0x170) #define LAPIC_IRR_REG REG32(ISH_LAPIC_BASE + 0x200) #define LAPIC_ESR_REG REG32(ISH_LAPIC_BASE + 0x280) #define LAPIC_ERR_RECV_ILLEGAL BIT(6) diff --git a/core/minute-ia/interrupts.c b/core/minute-ia/interrupts.c index 8fc5b2f9e9..a4a3569c22 100644 --- a/core/minute-ia/interrupts.c +++ b/core/minute-ia/interrupts.c @@ -233,11 +233,11 @@ uint32_t get_current_interrupt_vector(void) uint32_t vec; /* In service register */ - uint32_t *ioapic_icr_last = (uint32_t *)LAPIC_ISR_REG; + volatile uint32_t *ioapic_isr_last = &LAPIC_ISR_LAST_REG; /* Scan ISRs from highest priority */ - for (i = 7; i >= 0; i--, ioapic_icr_last -= 4) { - vec = *ioapic_icr_last; + for (i = 7; i >= 0; i--, ioapic_isr_last -= 4) { + vec = *ioapic_isr_last; if (vec) { return (32 * i) + __fls(vec); } |