mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-08-19 03:36:19 -04:00
microblaze: Fix interrupt handler code
It is better to read ivr and react on it than do long parsing from two regs. Interrupt controller returs actual irq number. Signed-off-by: Michal Simek <monstr@monstr.eu>
This commit is contained in:
parent
b26640971a
commit
8125c980cc
@ -141,8 +141,8 @@ int interrupts_init (void)
|
|||||||
|
|
||||||
void interrupt_handler (void)
|
void interrupt_handler (void)
|
||||||
{
|
{
|
||||||
int irqs = (intc->isr & intc->ier); /* find active interrupt */
|
int irqs = intc->ivr; /* find active interrupt */
|
||||||
int i = 1;
|
int mask = 1;
|
||||||
#ifdef DEBUG_INT
|
#ifdef DEBUG_INT
|
||||||
int value;
|
int value;
|
||||||
printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
|
printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
|
||||||
@ -150,23 +150,17 @@ void interrupt_handler (void)
|
|||||||
R14(value);
|
R14(value);
|
||||||
printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
|
printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
|
||||||
#endif
|
#endif
|
||||||
struct irq_action *act = vecs;
|
struct irq_action *act = vecs + irqs;
|
||||||
while (irqs) {
|
|
||||||
if (irqs & 1) {
|
intc->iar = mask << irqs;
|
||||||
|
|
||||||
#ifdef DEBUG_INT
|
#ifdef DEBUG_INT
|
||||||
printf
|
printf
|
||||||
("Jumping to interrupt handler rutine addr %x,count %x,arg %x\n",
|
("Jumping to interrupt handler rutine addr %x,count %x,arg %x\n",
|
||||||
act->handler, act->count, act->arg);
|
act->handler, act->count, act->arg);
|
||||||
#endif
|
#endif
|
||||||
act->handler (act->arg);
|
act->handler (act->arg);
|
||||||
act->count++;
|
act->count++;
|
||||||
intc->iar = i;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
irqs >>= 1;
|
|
||||||
act++;
|
|
||||||
i <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_INT
|
#ifdef DEBUG_INT
|
||||||
printf ("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n", intc->isr,
|
printf ("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n", intc->isr,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user