blob: 4c50618ec70f062a69b9a1fe4843198606ddb698 [file] [log] [blame] [edit]
/*
* Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: GPL-2.0-only
*/
#include <autoconf.h>
#include <elfloader/gen_config.h>
#if CONFIG_MAX_NUM_NODES > 1
#include <types.h>
#include <elfloader.h>
#include <armv/machine.h>
#include <armv/smp.h>
#include <printf.h>
unsigned long core_stacks[CONFIG_MAX_NUM_NODES][STACK_SIZE / sizeof(unsigned long)] ALIGN(BIT(12));
volatile int core_up[CONFIG_MAX_NUM_NODES];
extern void core_entry_head(void);
extern void non_boot_main(void);
void core_entry(uint32_t sp)
{
int id;
// get the logic ID
id = (sp - (unsigned long)&core_stacks[0][0]) / STACK_SIZE;
core_up[id] = id;
dsb();
non_boot_main();
}
int is_core_up(int i)
{
return core_up[i] == i;
}
#endif