MIPS: Loongson64: Give chance to build under !CONFIG_NUMA and !CONFIG_SMP
In the current code, we can not build under !CONFIG_NUMA and !CONFIG_SMP on the Loongson64 platform, it seems bad for the users who just want to use pure single core (not nosmp) to debug, so do the following things to give them a chance: (1) Do not select NUMA and SMP for MACH_LOONGSON64 in Kconfig, make NUMA depends on SMP, and then just set them in the loongson3_defconfig. (2) Move szmem() from numa.c to init.c and add prom_init_memory() under !CONFIG_NUMA. (3) Clean up szmem() due to the statements of case SYSTEM_RAM_LOW and SYSTEM_RAM_HIGH are the same. (4) Remove the useless declaration of prom_init_memory() and add the declaration of szmem() in loongson.h to avoid build error. Signed-off-by: Youling Tang <tangyouling@loongson.cn> Signed-off-by: Jinyang He <hejinyang@loongson.cn> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
This commit is contained in:
Родитель
dbafd5105c
Коммит
cf8194e46c
|
@ -491,8 +491,6 @@ config MACH_LOONGSON64
|
|||
select SYS_SUPPORTS_ZBOOT
|
||||
select SYS_SUPPORTS_RELOCATABLE
|
||||
select ZONE_DMA32
|
||||
select NUMA
|
||||
select SMP
|
||||
select COMMON_CLK
|
||||
select USE_OF
|
||||
select BUILTIN_DTB
|
||||
|
@ -2758,6 +2756,7 @@ config ARCH_SPARSEMEM_ENABLE
|
|||
config NUMA
|
||||
bool "NUMA Support"
|
||||
depends on SYS_SUPPORTS_NUMA
|
||||
select SMP
|
||||
help
|
||||
Say Y to compile the kernel to support NUMA (Non-Uniform Memory
|
||||
Access). This option improves performance on systems with more
|
||||
|
|
|
@ -31,6 +31,8 @@ CONFIG_PERF_EVENTS=y
|
|||
CONFIG_MACH_LOONGSON64=y
|
||||
CONFIG_CPU_HAS_MSA=y
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_NUMA=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_HZ_256=y
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_MIPS32_O32=y
|
||||
|
|
|
@ -23,8 +23,8 @@ extern u32 memsize, highmemsize;
|
|||
extern const struct plat_smp_ops loongson3_smp_ops;
|
||||
|
||||
/* loongson-specific command line, env and memory initialization */
|
||||
extern void __init prom_init_memory(void);
|
||||
extern void __init prom_init_env(void);
|
||||
extern void __init szmem(unsigned int node);
|
||||
extern void *loongson_fdt_blob;
|
||||
|
||||
/* irq operation functions */
|
||||
|
|
|
@ -47,6 +47,51 @@ void virtual_early_config(void)
|
|||
node_id_offset = 44;
|
||||
}
|
||||
|
||||
void __init szmem(unsigned int node)
|
||||
{
|
||||
u32 i, mem_type;
|
||||
static unsigned long num_physpages;
|
||||
u64 node_id, node_psize, start_pfn, end_pfn, mem_start, mem_size;
|
||||
|
||||
/* Parse memory information and activate */
|
||||
for (i = 0; i < loongson_memmap->nr_map; i++) {
|
||||
node_id = loongson_memmap->map[i].node_id;
|
||||
if (node_id != node)
|
||||
continue;
|
||||
|
||||
mem_type = loongson_memmap->map[i].mem_type;
|
||||
mem_size = loongson_memmap->map[i].mem_size;
|
||||
mem_start = loongson_memmap->map[i].mem_start;
|
||||
|
||||
switch (mem_type) {
|
||||
case SYSTEM_RAM_LOW:
|
||||
case SYSTEM_RAM_HIGH:
|
||||
start_pfn = ((node_id << 44) + mem_start) >> PAGE_SHIFT;
|
||||
node_psize = (mem_size << 20) >> PAGE_SHIFT;
|
||||
end_pfn = start_pfn + node_psize;
|
||||
num_physpages += node_psize;
|
||||
pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
|
||||
(u32)node_id, mem_type, mem_start, mem_size);
|
||||
pr_info(" start_pfn:0x%llx, end_pfn:0x%llx, num_physpages:0x%lx\n",
|
||||
start_pfn, end_pfn, num_physpages);
|
||||
memblock_add_node(PFN_PHYS(start_pfn), PFN_PHYS(node_psize), node);
|
||||
break;
|
||||
case SYSTEM_RAM_RESERVED:
|
||||
pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
|
||||
(u32)node_id, mem_type, mem_start, mem_size);
|
||||
memblock_reserve(((node_id << 44) + mem_start), mem_size << 20);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef CONFIG_NUMA
|
||||
static void __init prom_init_memory(void)
|
||||
{
|
||||
szmem(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
void __init prom_init(void)
|
||||
{
|
||||
fw_init_cmdline();
|
||||
|
@ -57,7 +102,11 @@ void __init prom_init(void)
|
|||
|
||||
loongson_sysconf.early_config();
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
prom_init_numa_memory();
|
||||
#else
|
||||
prom_init_memory();
|
||||
#endif
|
||||
|
||||
/* Hardcode to CPU UART 0 */
|
||||
setup_8250_early_printk_port(TO_UNCAC(LOONGSON_REG_BASE + 0x1e0), 0, 1024);
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <asm/time.h>
|
||||
#include <asm/wbflush.h>
|
||||
#include <boot_param.h>
|
||||
#include <loongson.h>
|
||||
|
||||
static struct pglist_data prealloc__node_data[MAX_NUMNODES];
|
||||
unsigned char __node_distances[MAX_NUMNODES][MAX_NUMNODES];
|
||||
|
@ -81,57 +82,6 @@ static void __init init_topology_matrix(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void __init szmem(unsigned int node)
|
||||
{
|
||||
u32 i, mem_type;
|
||||
static unsigned long num_physpages;
|
||||
u64 node_id, node_psize, start_pfn, end_pfn, mem_start, mem_size;
|
||||
|
||||
/* Parse memory information and activate */
|
||||
for (i = 0; i < loongson_memmap->nr_map; i++) {
|
||||
node_id = loongson_memmap->map[i].node_id;
|
||||
if (node_id != node)
|
||||
continue;
|
||||
|
||||
mem_type = loongson_memmap->map[i].mem_type;
|
||||
mem_size = loongson_memmap->map[i].mem_size;
|
||||
mem_start = loongson_memmap->map[i].mem_start;
|
||||
|
||||
switch (mem_type) {
|
||||
case SYSTEM_RAM_LOW:
|
||||
start_pfn = ((node_id << 44) + mem_start) >> PAGE_SHIFT;
|
||||
node_psize = (mem_size << 20) >> PAGE_SHIFT;
|
||||
end_pfn = start_pfn + node_psize;
|
||||
num_physpages += node_psize;
|
||||
pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
|
||||
(u32)node_id, mem_type, mem_start, mem_size);
|
||||
pr_info(" start_pfn:0x%llx, end_pfn:0x%llx, num_physpages:0x%lx\n",
|
||||
start_pfn, end_pfn, num_physpages);
|
||||
memblock_add_node(PFN_PHYS(start_pfn),
|
||||
PFN_PHYS(node_psize), node);
|
||||
break;
|
||||
case SYSTEM_RAM_HIGH:
|
||||
start_pfn = ((node_id << 44) + mem_start) >> PAGE_SHIFT;
|
||||
node_psize = (mem_size << 20) >> PAGE_SHIFT;
|
||||
end_pfn = start_pfn + node_psize;
|
||||
num_physpages += node_psize;
|
||||
pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
|
||||
(u32)node_id, mem_type, mem_start, mem_size);
|
||||
pr_info(" start_pfn:0x%llx, end_pfn:0x%llx, num_physpages:0x%lx\n",
|
||||
start_pfn, end_pfn, num_physpages);
|
||||
memblock_add_node(PFN_PHYS(start_pfn),
|
||||
PFN_PHYS(node_psize), node);
|
||||
break;
|
||||
case SYSTEM_RAM_RESERVED:
|
||||
pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
|
||||
(u32)node_id, mem_type, mem_start, mem_size);
|
||||
memblock_reserve(((node_id << 44) + mem_start),
|
||||
mem_size << 20);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void __init node_mem_init(unsigned int node)
|
||||
{
|
||||
unsigned long node_addrspace_offset;
|
||||
|
|
Загрузка…
Ссылка в новой задаче