diff options
Diffstat (limited to 'arch/arm64/include/asm/smp_plat.h')
-rw-r--r-- | arch/arm64/include/asm/smp_plat.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/smp_plat.h b/arch/arm64/include/asm/smp_plat.h new file mode 100644 index 000000000..97ddc6c20 --- /dev/null +++ b/arch/arm64/include/asm/smp_plat.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Definitions specific to SMP platforms. + * + * Copyright (C) 2013 ARM Ltd. + */ + +#ifndef __ASM_SMP_PLAT_H +#define __ASM_SMP_PLAT_H + +#include <linux/cpumask.h> + +#include <asm/smp.h> +#include <asm/types.h> + +struct mpidr_hash { + u64 mask; + u32 shift_aff[4]; + u32 bits; +}; + +extern struct mpidr_hash mpidr_hash; + +static inline u32 mpidr_hash_size(void) +{ + return 1 << mpidr_hash.bits; +} + +/* + * Retrieve logical cpu index corresponding to a given MPIDR.Aff* + * - mpidr: MPIDR.Aff* bits to be used for the look-up + * + * Returns the cpu logical index or -EINVAL on look-up error + */ +static inline int get_logical_index(u64 mpidr) +{ + int cpu; + for (cpu = 0; cpu < nr_cpu_ids; cpu++) + if (cpu_logical_map(cpu) == mpidr) + return cpu; + return -EINVAL; +} + +#endif /* __ASM_SMP_PLAT_H */ |