summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c b/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c
index d5fd79dd7b..715dbd64fa 100644
--- a/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c
+++ b/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c
@@ -81,11 +81,13 @@ static void BSP_irq_disable_at_opbintc (rtems_irq_number irqnum)
*/
static void BSP_irq_handle_at_opbintc(void)
{
- uint32_t ipr, mask, i, c;
+ uint32_t ipr, i, c;
+
+ /* Get pending interrupts */
ipr = get_ipr();
- c = 0;
- mask = 0;
+ /* Acknowledge all pending interrupts now and service them afterwards */
+ set_iar(ipr);
for (i = 0;
(i < BSP_OPBINTC_PER_IRQ_NUMBER)
@@ -95,17 +97,11 @@ static void BSP_irq_handle_at_opbintc(void)
if ((ipr & c) != 0) {
/* interrupt is asserted */
- mask |= c;
ipr &= ~c;
bsp_interrupt_handler_dispatch(i+BSP_OPBINTC_IRQ_LOWEST_OFFSET);
}
}
-
- if (mask) {
- /* ack all the interrupts we serviced */
- set_iar(mask);
- }
}
/*