This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

GICv3 ICC_EOIR

Hi

When I test Cortex-R52 with GIC500 (GICv3), I find an issue.

The interrupt is handled by the following order:

1. save context

2. read ICC_IAR0, get INTID

3. jump to ISR of the associated INTID

4. write ICC_EOIR0

5. restore context

The IRQ is unmasked before writing ICC_EOIR0.

When an IRQ is triggered frequently, I find the CPU will never goes to the last step - restore context. Could you explain the reason for that ?

BR, Grace

Parents
  • Hi Martin

    No other exception and the CPU does not get stuck. My set-up is as follows:

    1. put a breakpoint at step 5, it never stops there

    2. put a count variable to increment in the ISR, the variable is counting up all the time until to 536

    3. put a breakpoint at step 2, at each time stop here, the stack address in the r13 decreases

    4. as the stack address decreases all the time then overflows and overwrite other variables (the registered ISR address in the variable), so the count stops.

    5. the interrupt is level triggered

    I also do the comparing test: 

    If IRQ is masked before writing EOIR, the step 5 can be executed and the ISR stack never overflows.

    If IRQ is unmasked before writing EOIR, the step 5 is not executed. 

    I think there must be some reason to mask the IRQ/FIQ before notify the end of interrupt by ICC_EOIR1/0. 

    BR, Grace

Reply
  • Hi Martin

    No other exception and the CPU does not get stuck. My set-up is as follows:

    1. put a breakpoint at step 5, it never stops there

    2. put a count variable to increment in the ISR, the variable is counting up all the time until to 536

    3. put a breakpoint at step 2, at each time stop here, the stack address in the r13 decreases

    4. as the stack address decreases all the time then overflows and overwrite other variables (the registered ISR address in the variable), so the count stops.

    5. the interrupt is level triggered

    I also do the comparing test: 

    If IRQ is masked before writing EOIR, the step 5 can be executed and the ISR stack never overflows.

    If IRQ is unmasked before writing EOIR, the step 5 is not executed. 

    I think there must be some reason to mask the IRQ/FIQ before notify the end of interrupt by ICC_EOIR1/0. 

    BR, Grace

Children
No data