xref: /linux/arch/arm64/include/asm/smp_plat.h (revision 24bce201d79807b668bf9d9e0aca801c5c0d5f78)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Definitions specific to SMP platforms.
4  *
5  * Copyright (C) 2013 ARM Ltd.
6  */
7 
8 #ifndef __ASM_SMP_PLAT_H
9 #define __ASM_SMP_PLAT_H
10 
11 #include <linux/cpumask.h>
12 
13 #include <asm/smp.h>
14 #include <asm/types.h>
15 
16 struct mpidr_hash {
17 	u64	mask;
18 	u32	shift_aff[4];
19 	u32	bits;
20 };
21 
22 extern struct mpidr_hash mpidr_hash;
23 
24 static inline u32 mpidr_hash_size(void)
25 {
26 	return 1 << mpidr_hash.bits;
27 }
28 
29 /*
30  * Retrieve logical cpu index corresponding to a given MPIDR.Aff*
31  *  - mpidr: MPIDR.Aff* bits to be used for the look-up
32  *
33  * Returns the cpu logical index or -EINVAL on look-up error
34  */
35 static inline int get_logical_index(u64 mpidr)
36 {
37 	int cpu;
38 	for (cpu = 0; cpu < nr_cpu_ids; cpu++)
39 		if (cpu_logical_map(cpu) == mpidr)
40 			return cpu;
41 	return -EINVAL;
42 }
43 
44 #endif /* __ASM_SMP_PLAT_H */
45