arm64: provide API for coordinating secondary CPU bringup
Provides a minimal API for coordinating with the SoC for bringing up the secondary CPUs. There's no eventloop or dispatcher currently nor does it do anything proper when one of the secondary CPUs are brought up. Those decisions are deferred to the SoC. BUG=chrome-os-partner:31545 BRANCH=None TEST=Built and brought up 2nd cpu using this API. Change-Id: I3b7334b7d2df2df093cdc0cbb997e8230d3b2685 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/214775 Reviewed-by: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
parent
813b0a8b3f
commit
5303ae3d6b
2 changed files with 43 additions and 2 deletions
|
|
@ -17,9 +17,11 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <arch/stages.h>
|
||||
#include <arch/cache.h>
|
||||
#include <arch/cpu.h>
|
||||
|
||||
#include <arch/exception.h>
|
||||
#include <arch/mmu.h>
|
||||
#include <arch/stages.h>
|
||||
|
||||
/*
|
||||
* This variable holds entry point for CPUs starting up. Before the other
|
||||
|
|
@ -33,6 +35,11 @@ void __attribute__((weak)) arm64_soc_init(void)
|
|||
/* Default weak implementation does nothing. */
|
||||
}
|
||||
|
||||
void __attribute__((weak)) soc_secondary_cpu_init(void)
|
||||
{
|
||||
/* Default weak implementation does nothing. */
|
||||
}
|
||||
|
||||
static void seed_stack(void)
|
||||
{
|
||||
char *stack_begin;
|
||||
|
|
@ -57,3 +64,24 @@ void arm64_init(void)
|
|||
arm64_soc_init();
|
||||
main();
|
||||
}
|
||||
|
||||
static void secondary_cpu_start(void)
|
||||
{
|
||||
mmu_enable();
|
||||
exception_hwinit();
|
||||
soc_secondary_cpu_init();
|
||||
/*
|
||||
* TODO(adurbin): need a proper place to park the CPUs. Currently
|
||||
* assuming SoC code does the appropriate thing.
|
||||
*/
|
||||
while (1);
|
||||
}
|
||||
|
||||
extern void arm64_cpu_startup(void);
|
||||
void *prepare_secondary_cpu_startup(void)
|
||||
{
|
||||
c_entry = &secondary_cpu_start;
|
||||
dcache_clean_invalidate_by_mva(c_entry, sizeof(c_entry));
|
||||
|
||||
return &arm64_cpu_startup;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,4 +58,17 @@ void *cpu_get_stack(unsigned int cpu);
|
|||
/* Return the top of the exception stack for the specified cpu. */
|
||||
void *cpu_get_exception_stack(unsigned int cpu);
|
||||
|
||||
/*
|
||||
* Do the necessary work to prepare for secondary CPUs coming up. The
|
||||
* SoC will call this function before bringing up the other CPUs. The
|
||||
* entry point for the seoncdary CPUs is returned.
|
||||
*/
|
||||
void *prepare_secondary_cpu_startup(void);
|
||||
|
||||
/*
|
||||
* Function provided by the SoC code that is called for each secondary
|
||||
* CPU startup.
|
||||
*/
|
||||
void soc_secondary_cpu_init(void);
|
||||
|
||||
#endif /* __ARCH_CPU_H__ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue