summaryrefslogtreecommitdiff
path: root/arch/loongarch/include/asm/topology.h
diff options
context:
space:
mode:
authorHuacai Chen <chenhuacai@loongson.cn>2022-05-31 18:04:12 +0800
committerHuacai Chen <chenhuacai@loongson.cn>2022-06-03 20:09:29 +0800
commitd4b6f1562a3c3284adcef81d6e4f183d7d34b8a9 (patch)
tree365dc4b9e63fe8b038078a8fe6e8b8acb32527b1 /arch/loongarch/include/asm/topology.h
parent46859ac8af52ae599e1b51992ddef3eb43f295fc (diff)
downloadlwn-d4b6f1562a3c3284adcef81d6e4f183d7d34b8a9.tar.gz
lwn-d4b6f1562a3c3284adcef81d6e4f183d7d34b8a9.zip
LoongArch: Add Non-Uniform Memory Access (NUMA) support
Add Non-Uniform Memory Access (NUMA) support for LoongArch. LoongArch has 48-bit physical address, but the HyperTransport I/O bus only support 40-bit address, so we need a custom phys_to_dma() and dma_to_phys() to extract the 4-bit node id (bit 44~47) from Loongson-3's 48-bit physical address space and embed it into 40-bit. In the 40-bit dma address, node id offset can be read from the LS7A_DMA_CFG register. Reviewed-by: WANG Xuerui <git@xen0n.name> Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch/loongarch/include/asm/topology.h')
-rw-r--r--arch/loongarch/include/asm/topology.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/loongarch/include/asm/topology.h b/arch/loongarch/include/asm/topology.h
index da135841e5b1..66128dec0bf6 100644
--- a/arch/loongarch/include/asm/topology.h
+++ b/arch/loongarch/include/asm/topology.h
@@ -7,6 +7,27 @@
#include <linux/smp.h>
+#ifdef CONFIG_NUMA
+
+extern cpumask_t cpus_on_node[];
+
+#define cpumask_of_node(node) (&cpus_on_node[node])
+
+struct pci_bus;
+extern int pcibus_to_node(struct pci_bus *);
+
+#define cpumask_of_pcibus(bus) (cpu_online_mask)
+
+extern unsigned char node_distances[MAX_NUMNODES][MAX_NUMNODES];
+
+void numa_set_distance(int from, int to, int distance);
+
+#define node_distance(from, to) (node_distances[(from)][(to)])
+
+#else
+#define pcibus_to_node(bus) 0
+#endif
+
#ifdef CONFIG_SMP
#define topology_physical_package_id(cpu) (cpu_data[cpu].package)
#define topology_core_id(cpu) (cpu_data[cpu].core)