xref: /openbmc/linux/arch/loongarch/include/asm/numa.h (revision ba2929159000dc7015cc01cdf7bb72542e19952a)
1d4b6f156SHuacai Chen /* SPDX-License-Identifier: GPL-2.0 */
2d4b6f156SHuacai Chen /*
3d4b6f156SHuacai Chen  * Author: Jianmin Lv <lvjianmin@loongson.cn>
4d4b6f156SHuacai Chen  *         Huacai Chen <chenhuacai@loongson.cn>
5d4b6f156SHuacai Chen  *
6d4b6f156SHuacai Chen  * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
7d4b6f156SHuacai Chen  */
8d4b6f156SHuacai Chen 
9d4b6f156SHuacai Chen #ifndef _ASM_LOONGARCH_NUMA_H
10d4b6f156SHuacai Chen #define _ASM_LOONGARCH_NUMA_H
11d4b6f156SHuacai Chen 
12d4b6f156SHuacai Chen #include <linux/nodemask.h>
13d4b6f156SHuacai Chen 
14d4b6f156SHuacai Chen #define NODE_ADDRSPACE_SHIFT 44
15d4b6f156SHuacai Chen 
16d4b6f156SHuacai Chen #define pa_to_nid(addr)		(((addr) & 0xf00000000000) >> NODE_ADDRSPACE_SHIFT)
17d4b6f156SHuacai Chen #define nid_to_addrbase(nid)	(_ULCAST_(nid) << NODE_ADDRSPACE_SHIFT)
18d4b6f156SHuacai Chen 
19d4b6f156SHuacai Chen #ifdef CONFIG_NUMA
20d4b6f156SHuacai Chen 
21d4b6f156SHuacai Chen extern int numa_off;
22d4b6f156SHuacai Chen extern s16 __cpuid_to_node[CONFIG_NR_CPUS];
23d4b6f156SHuacai Chen extern nodemask_t numa_nodes_parsed __initdata;
24d4b6f156SHuacai Chen 
25d4b6f156SHuacai Chen struct numa_memblk {
26d4b6f156SHuacai Chen 	u64			start;
27d4b6f156SHuacai Chen 	u64			end;
28d4b6f156SHuacai Chen 	int			nid;
29d4b6f156SHuacai Chen };
30d4b6f156SHuacai Chen 
31d4b6f156SHuacai Chen #define NR_NODE_MEMBLKS		(MAX_NUMNODES*2)
32d4b6f156SHuacai Chen struct numa_meminfo {
33d4b6f156SHuacai Chen 	int			nr_blks;
34d4b6f156SHuacai Chen 	struct numa_memblk	blk[NR_NODE_MEMBLKS];
35d4b6f156SHuacai Chen };
36d4b6f156SHuacai Chen 
37d4b6f156SHuacai Chen extern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
38d4b6f156SHuacai Chen 
39d4b6f156SHuacai Chen extern void __init early_numa_add_cpu(int cpuid, s16 node);
40d4b6f156SHuacai Chen extern void numa_add_cpu(unsigned int cpu);
41d4b6f156SHuacai Chen extern void numa_remove_cpu(unsigned int cpu);
42d4b6f156SHuacai Chen 
numa_clear_node(int cpu)43d4b6f156SHuacai Chen static inline void numa_clear_node(int cpu)
44d4b6f156SHuacai Chen {
45d4b6f156SHuacai Chen }
46d4b6f156SHuacai Chen 
set_cpuid_to_node(int cpuid,s16 node)47d4b6f156SHuacai Chen static inline void set_cpuid_to_node(int cpuid, s16 node)
48d4b6f156SHuacai Chen {
49d4b6f156SHuacai Chen 	__cpuid_to_node[cpuid] = node;
50d4b6f156SHuacai Chen }
51d4b6f156SHuacai Chen 
52d4b6f156SHuacai Chen extern int early_cpu_to_node(int cpu);
53d4b6f156SHuacai Chen 
54d4b6f156SHuacai Chen #else
55d4b6f156SHuacai Chen 
early_numa_add_cpu(int cpuid,s16 node)56d4b6f156SHuacai Chen static inline void early_numa_add_cpu(int cpuid, s16 node)	{ }
numa_add_cpu(unsigned int cpu)57d4b6f156SHuacai Chen static inline void numa_add_cpu(unsigned int cpu)		{ }
numa_remove_cpu(unsigned int cpu)58d4b6f156SHuacai Chen static inline void numa_remove_cpu(unsigned int cpu)		{ }
set_cpuid_to_node(int cpuid,s16 node)59*ae9e39a2SJiaxun Yang static inline void set_cpuid_to_node(int cpuid, s16 node)	{ }
60d4b6f156SHuacai Chen 
early_cpu_to_node(int cpu)61d4b6f156SHuacai Chen static inline int early_cpu_to_node(int cpu)
62d4b6f156SHuacai Chen {
63d4b6f156SHuacai Chen 	return 0;
64d4b6f156SHuacai Chen }
65d4b6f156SHuacai Chen 
66d4b6f156SHuacai Chen #endif	/* CONFIG_NUMA */
67d4b6f156SHuacai Chen 
68d4b6f156SHuacai Chen #endif	/* _ASM_LOONGARCH_NUMA_H */
69