Generic Timer IRQ Handling

According to


The interrupts generated by the timer behave in a level-sensitive manner. This means that, once the timer firing condition is reached, the timer will continue to signal an interrupt until one of the following situations occurs:

  • IMASK is set to one, which masks the interrupt.
  • ENABLE is cleared to 0, which disables the timer.
  • TVAL or CVAL is written, so that firing condition is no longer met.

When writing an interrupt handler for the timers, it is important that software clears the interrupt before deactivating the interrupt in the GIC. Otherwise the GIC will re-signal the same interrupt again.

Does it mean we need a synchronization barrier (e.g. isb()) between two points:

P1. TVAL gets updated. The firing confition is no longer met.

-> ISB()


Or ISB() is not enough and we need something else there?

Thanks in advance