1/*
2 * Copyright 2017, Data61
3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4 * ABN 41 687 119 230.
5 *
6 * This software may be distributed and modified according to the terms of
7 * the GNU General Public License version 2. Note that NO WARRANTY is provided.
8 * See "LICENSE_GPLv2.txt" for details.
9 *
10 * @TAG(DATA61_GPL)
11 */
12
13#include <config.h>
14#include <mode/model/smp.h>
15
16#ifdef ENABLE_SMP_SUPPORT
17
18nodeInfo_t node_info[CONFIG_MAX_NUM_NODES] ALIGN(L1_CACHE_LINE_SIZE) VISIBLE;
19char nodeSkimScratch[CONFIG_MAX_NUM_NODES][sizeof(nodeInfo_t)] ALIGN(L1_CACHE_LINE_SIZE);
20extern char kernel_stack_alloc[CONFIG_MAX_NUM_NODES][BIT(CONFIG_KERNEL_STACK_BITS)];
21
22BOOT_CODE void
23mode_init_tls(cpu_id_t cpu_index)
24{
25    node_info[cpu_index].stackTop = kernel_stack_alloc[cpu_index + 1];
26    node_info[cpu_index].irqStack = &x64KSIRQStack[cpu_index][0];
27    node_info[cpu_index].index = cpu_index;
28    x86_wrmsr(IA32_KERNEL_GS_BASE_MSR, (word_t)&node_info[cpu_index]);
29    swapgs();
30}
31
32#endif /* ENABLE_SMP_SUPPORT */
33