On 17 January 2011 10:53, Russell King - ARM Linux
[off-list ref] wrote:
On Mon, Jan 17, 2011 at 10:37:39AM +0000, Russell King - ARM Linux wrote:
quoted
3. Do we always need a dsb prior to a sev? ?Maybe the SPEAR patches need
another review to determine how they're using sev()?
FYI, this is how the SPEAR patches use sev():
| +static void __init wakeup_secondary(void)
| +{
| + ? ? /* nobody is to be released from the pen yet */
| + ? ? pen_release = -1;
| +
| + ? ? /*
| + ? ? ?* Write the address of secondary startup into the system-wide
| + ? ? ?* location (presently it is in SRAM). The BootMonitor waits
| + ? ? ?* for this register to become non-zero.
| + ? ? ?* We must also send an sev to wake it up
| + ? ? ?*/
| + ? ? __raw_writel(BSYM(virt_to_phys(spear13xx_secondary_startup)),
| + ? ? ? ? ? ? ? ? ? ? __io_address(SPEAR13XX_SYS_LOCATION));
| +
| + ? ? mb();
| +
| + ? ? /*
| + ? ? ?* Send a 'sev' to wake the secondary core from WFE.
| + ? ? ?*/
| + ? ? sev();
| +}
so the dsb() is inside mb(), before the outer sync call.
BTW, don't we need some cache flushing for the pen_release?
--
Catalin