
Hi Liu,
On 30/05/14 03:25, TigerLiu@via-alliance.com wrote:
Hi, Marc: I am studying ARMv8's u-boot code with FVP model. In do_nonsec_virt_switch() function in bootm.c : It will call smp_kick_all_cpus() function : It seems it would set GICD_SGIR[24] = 1, forward the interrupt to all CPU interfaces except tha tof the processor that requested the interrupt.
So, who generated the interrupt(which would be forwarded to other cores)?
I suggest you have a look at the GICv2 architecture document, section 4.3.15, which describes the GICD_SGIR register. Writing to this register generates the interrupt (SGI number in GICD_SGIR[3:0}), and GICD_SGIR[25:24] determines who gets it.
In short, if you're setting GICD_SGIR[24] to 1, you're sending SGI0 to all CPUs but yourself. This seems to match the name of the function, doesn't it?
M.