The latest RPi firmware leaves secondary cores in a wait-for-event (WFE)

state to save power, so after writing the entry point address for a core to
the mailbox, use a dsb() to synchronize the execution pipeline to the data
written, then use an sev() to wake up the core.

Submitted by:	Sylvain Garrigues <sylgar@gmail.com>
This commit is contained in:
Ian Lepore 2017-09-02 19:20:11 +00:00
parent d419d89ec9
commit ac0a9a9064
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=323132

View File

@ -117,7 +117,9 @@ bcm2836_mp_start_ap(platform_t plat)
/* set entry point to mailbox 3 */
BSWR4(MBOX3SET_CORE(i),
(uint32_t)pmap_kextract((vm_offset_t)mpentry));
wmb();
/* Firmware put cores in WFE state, need SEV to wake up. */
dsb();
sev();
/* wait for bootup */
retry = 1000;