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