We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am trying to work out a loop SGI0 ~ SGI15 triggering and handling test.
I made it work for only one round. A72 can trigger SGI0~SGI15 and handle it.
But when I try to trigger any SGI again, it will not enter pending state, and be distributed to A72 again.
my first round code is like
init a53/a72/GIC
use a53 to kick off a72
use a72 to read out MPIDR_EL1
use a72 to configure affinity and set ICC_SGI0R_EL1 (SGI0 from A53 to A72)
use a72 to check redistributor GIR_ISPENDER (make sure SGI enter is generated and enter pending state)
use a72 to install interrupt handler (read out IAR0 and set EOIR0)
use a72 to enable interrupt (GICR_WAKER / GIC_PRIORITY / GICR_CFG / GICR_GROUP/ GICR_ISENABLER )
SGI0 ~ SGI15 can be triggered and handled without error. but when I set ICC_SGI0R_EL1 again to trigger anyone of SGI. GIR_ISPENDER is always 0x40000000, seems SGI can't enter pending state again?
why's that? thanks in advance.
Hi Martin,
Much appreciated for your help!!!!! I made it after delete the GICR_IGROUPR0 register access!!!
I wondered why I need to access IGROUP0 after access IENABLER, but I didn't pay more attention on it. (Legacy code issue from colleague I suppose)
And I found that my access to EOIR is also wrong. After I correct them all. Looping SGI triggering and handling test can be run and pass.
Thanks very much again. And have a wonderful day!