Commit df628ff14eeb825eafbf820ea71b09b8d9434029
1 parent
240f24e0
Arm GIC stuck interrupt fix.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2286 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
6 additions
and
3 deletions
hw/arm_gic.c
| @@ -17,7 +17,7 @@ | @@ -17,7 +17,7 @@ | ||
| 17 | 17 | ||
| 18 | #ifdef DEBUG_GIC | 18 | #ifdef DEBUG_GIC |
| 19 | #define DPRINTF(fmt, args...) \ | 19 | #define DPRINTF(fmt, args...) \ |
| 20 | -do { printf("arm_gic: " fmt , (int)s->base, ##args); } while (0) | 20 | +do { printf("arm_gic: " fmt , ##args); } while (0) |
| 21 | #else | 21 | #else |
| 22 | #define DPRINTF(fmt, args...) do {} while(0) | 22 | #define DPRINTF(fmt, args...) do {} while(0) |
| 23 | #endif | 23 | #endif |
| @@ -135,7 +135,10 @@ static void gic_set_irq(void *opaque, int irq, int level) | @@ -135,7 +135,10 @@ static void gic_set_irq(void *opaque, int irq, int level) | ||
| 135 | static void gic_set_running_irq(gic_state *s, int irq) | 135 | static void gic_set_running_irq(gic_state *s, int irq) |
| 136 | { | 136 | { |
| 137 | s->running_irq = irq; | 137 | s->running_irq = irq; |
| 138 | - s->running_priority = s->priority[irq]; | 138 | + if (irq == 1023) |
| 139 | + s->running_priority = 0x100; | ||
| 140 | + else | ||
| 141 | + s->running_priority = s->priority[irq]; | ||
| 139 | gic_update(s); | 142 | gic_update(s); |
| 140 | } | 143 | } |
| 141 | 144 | ||
| @@ -160,7 +163,7 @@ static uint32_t gic_acknowledge_irq(gic_state *s) | @@ -160,7 +163,7 @@ static uint32_t gic_acknowledge_irq(gic_state *s) | ||
| 160 | static void gic_complete_irq(gic_state * s, int irq) | 163 | static void gic_complete_irq(gic_state * s, int irq) |
| 161 | { | 164 | { |
| 162 | int update = 0; | 165 | int update = 0; |
| 163 | - DPRINTF("EIO %d\n", irq); | 166 | + DPRINTF("EOI %d\n", irq); |
| 164 | if (s->running_irq == 1023) | 167 | if (s->running_irq == 1023) |
| 165 | return; /* No active IRQ. */ | 168 | return; /* No active IRQ. */ |
| 166 | if (irq != 1023) { | 169 | if (irq != 1023) { |