1/* 2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) 3 * 4 * SPDX-License-Identifier: GPL-2.0-only 5 */ 6 7#pragma once 8 9#include <config.h> 10#include <util.h> 11#include <kernel/stack.h> 12 13#ifdef ENABLE_SMP_SUPPORT 14 15#define LD_EX "ldxr " 16#define ST_EX "stxr " 17#define OP_WIDTH "w" 18 19extern char kernel_stack_alloc[CONFIG_MAX_NUM_NODES][BIT(CONFIG_KERNEL_STACK_BITS)]; 20compile_assert(kernel_stack_4k_aligned, KERNEL_STACK_ALIGNMENT == 4096) 21 22#define CPUID_MASK (KERNEL_STACK_ALIGNMENT - 1) 23 24static inline CONST cpu_id_t 25getCurrentCPUIndex(void) 26{ 27 cpu_id_t id; 28 if (config_set(CONFIG_ARM_HYPERVISOR_SUPPORT)) { 29 asm volatile("mrs %0, tpidr_el2" : "=r"(id)); 30 } else { 31 asm volatile("mrs %0, tpidr_el1" : "=r"(id)); 32 } 33 return (id & CPUID_MASK); 34} 35 36#endif /* ENABLE_SMP_SUPPORT */ 37