Arm GIC stuck interrupt fix.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2286 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									240f24e013
								
							
						
					
					
						commit
						df628ff14e
					
				@ -17,7 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG_GIC
 | 
					#ifdef DEBUG_GIC
 | 
				
			||||||
#define DPRINTF(fmt, args...) \
 | 
					#define DPRINTF(fmt, args...) \
 | 
				
			||||||
do { printf("arm_gic: " fmt , (int)s->base, ##args); } while (0)
 | 
					do { printf("arm_gic: " fmt , ##args); } while (0)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define DPRINTF(fmt, args...) do {} while(0)
 | 
					#define DPRINTF(fmt, args...) do {} while(0)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -135,6 +135,9 @@ static void gic_set_irq(void *opaque, int irq, int level)
 | 
				
			|||||||
static void gic_set_running_irq(gic_state *s, int irq)
 | 
					static void gic_set_running_irq(gic_state *s, int irq)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    s->running_irq = irq;
 | 
					    s->running_irq = irq;
 | 
				
			||||||
 | 
					    if (irq == 1023)
 | 
				
			||||||
 | 
					        s->running_priority = 0x100;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
        s->running_priority = s->priority[irq];
 | 
					        s->running_priority = s->priority[irq];
 | 
				
			||||||
    gic_update(s);
 | 
					    gic_update(s);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -160,7 +163,7 @@ static uint32_t gic_acknowledge_irq(gic_state *s)
 | 
				
			|||||||
static void gic_complete_irq(gic_state * s, int irq)
 | 
					static void gic_complete_irq(gic_state * s, int irq)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int update = 0;
 | 
					    int update = 0;
 | 
				
			||||||
    DPRINTF("EIO %d\n", irq);
 | 
					    DPRINTF("EOI %d\n", irq);
 | 
				
			||||||
    if (s->running_irq == 1023)
 | 
					    if (s->running_irq == 1023)
 | 
				
			||||||
        return; /* No active IRQ.  */
 | 
					        return; /* No active IRQ.  */
 | 
				
			||||||
    if (irq != 1023) {
 | 
					    if (irq != 1023) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user