void HAL_SMPStartup(int core, unsigned int addr)
Entry | |
---|---|
core | Core number to start |
addr | Physical address of code to execute |
Exit | |
---|---|
- |
This is an internal call for OS use only and should not be used by user software.
Starts the indicated core (core number in the range [0, HAL_CPUCount)). Behaviour is undefined if the call is made for a core which has already started.
addr
provides the physical address of the code that the core should jump to once it starts. Depending on the platform and bootloader, the HAL may be required to perform basic initialisation beforehand (e.g. enabling the SMP bit in CP15, enabling the snoop control unit, GIC CPU interface initialisation, etc.). Essentially the core should be in the same state as the primary core was when OS_Start was called.
The HAL can assume that all required code/data located at addr
has been fully flushed to main memory prior to the call.
The HAL need not wait for the core to fully initialise; the OS will contain its own wait loop that will be exited once the desired core executes the startup code located at addr
.
The OS will not attempt to initialise multiple cores in parallel. E.g. it is safe for the HAL to reuse the same portion of NCNB workspace to store any dynamic bootstrap code/data that is required.