From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marc Zyngier Date: Fri, 30 May 2014 09:56:58 +0100 Subject: [U-Boot] smp_kick_all_cpus() function's role In-Reply-To: References: Message-ID: <538847DA.7010404@arm.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Liu, On 30/05/14 03:25, TigerLiu at 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. -- Jazz is not dead. It just smells funny...