Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Written by: Patricia Gaughen, IBM Corporation | |
3 | * | |
4 | * Copyright (C) 2002, IBM Corp. | |
5 | * | |
6 | * All rights reserved. | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License as published by | |
10 | * the Free Software Foundation; either version 2 of the License, or | |
11 | * (at your option) any later version. | |
12 | * | |
13 | * This program is distributed in the hope that it will be useful, but | |
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or | |
16 | * NON INFRINGEMENT. See the GNU General Public License for more | |
17 | * details. | |
18 | * | |
19 | * You should have received a copy of the GNU General Public License | |
20 | * along with this program; if not, write to the Free Software | |
21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
22 | * | |
23 | * Send feedback to <gone@us.ibm.com> | |
24 | */ | |
25 | ||
1da177e4 LT |
26 | #include <linux/mm.h> |
27 | #include <linux/bootmem.h> | |
28 | #include <linux/mmzone.h> | |
29 | #include <linux/module.h> | |
30 | #include <linux/nodemask.h> | |
31 | #include <asm/numaq.h> | |
32 | #include <asm/topology.h> | |
e1474e2d | 33 | #include <asm/processor.h> |
1da177e4 LT |
34 | |
35 | #define MB_TO_PAGES(addr) ((addr) << (20 - PAGE_SHIFT)) | |
36 | ||
37 | /* | |
38 | * Function: smp_dump_qct() | |
39 | * | |
40 | * Description: gets memory layout from the quad config table. This | |
41 | * function also updates node_online_map with the nodes (quads) present. | |
42 | */ | |
43 | static void __init smp_dump_qct(void) | |
44 | { | |
45 | int node; | |
46 | struct eachquadmem *eq; | |
47 | struct sys_cfg_data *scd = | |
48 | (struct sys_cfg_data *)__va(SYS_CFG_DATA_PRIV_ADDR); | |
49 | ||
50 | nodes_clear(node_online_map); | |
51 | for_each_node(node) { | |
52 | if (scd->quads_present31_0 & (1 << node)) { | |
53 | node_set_online(node); | |
54 | eq = &scd->eq[node]; | |
55 | /* Convert to pages */ | |
56 | node_start_pfn[node] = MB_TO_PAGES( | |
57 | eq->hi_shrd_mem_start - eq->priv_mem_size); | |
58 | node_end_pfn[node] = MB_TO_PAGES( | |
59 | eq->hi_shrd_mem_start + eq->hi_shrd_mem_size); | |
60 | ||
61 | memory_present(node, | |
62 | node_start_pfn[node], node_end_pfn[node]); | |
63 | node_remap_size[node] = node_memmap_size_bytes(node, | |
64 | node_start_pfn[node], | |
65 | node_end_pfn[node]); | |
66 | } | |
67 | } | |
68 | } | |
69 | ||
70 | /* | |
71 | * Unlike Summit, we don't really care to let the NUMA-Q | |
72 | * fall back to flat mode. Don't compile for NUMA-Q | |
73 | * unless you really need it! | |
74 | */ | |
75 | int __init get_memcfg_numaq(void) | |
76 | { | |
77 | smp_dump_qct(); | |
78 | return 1; | |
79 | } | |
e1474e2d | 80 | |
539eb11e | 81 | static int __init numaq_tsc_disable(void) |
e1474e2d | 82 | { |
539eb11e | 83 | if (num_online_nodes() > 1) { |
84 | printk(KERN_DEBUG "NUMAQ: disabling TSC\n"); | |
85 | tsc_disable = 1; | |
86 | } | |
e1474e2d DH |
87 | return 0; |
88 | } | |
539eb11e | 89 | arch_initcall(numaq_tsc_disable); |