Commit 072bd413 authored by David S. Miller's avatar David S. Miller

sparc64: Add JBUS NUMA detection.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 83097aca
...@@ -938,6 +938,10 @@ int of_node_to_nid(struct device_node *dp) ...@@ -938,6 +938,10 @@ int of_node_to_nid(struct device_node *dp)
int count, nid; int count, nid;
u64 grp; u64 grp;
/* This is the right thing to do on currently supported
* SUN4U NUMA platforms as well, as the PCI controller does
* not sit behind any particular memory controller.
*/
if (!mlgroups) if (!mlgroups)
return -1; return -1;
...@@ -1206,8 +1210,44 @@ static int __init numa_parse_mdesc(void) ...@@ -1206,8 +1210,44 @@ static int __init numa_parse_mdesc(void)
return err; return err;
} }
static int __init numa_parse_jbus(void)
{
unsigned long cpu, index;
/* NUMA node id is encoded in bits 36 and higher, and there is
* a 1-to-1 mapping from CPU ID to NUMA node ID.
*/
index = 0;
for_each_present_cpu(cpu) {
numa_cpu_lookup_table[cpu] = index;
numa_cpumask_lookup_table[index] = cpumask_of_cpu(cpu);
node_masks[index].mask = ~((1UL << 36UL) - 1UL);
node_masks[index].val = cpu << 36UL;
index++;
}
num_node_masks = index;
add_node_ranges();
for (index = 0; index < num_node_masks; index++) {
allocate_node_data(index);
node_set_online(index);
}
return 0;
}
static int __init numa_parse_sun4u(void) static int __init numa_parse_sun4u(void)
{ {
if (tlb_type == cheetah || tlb_type == cheetah_plus) {
unsigned long ver;
__asm__ ("rdpr %%ver, %0" : "=r" (ver));
if ((ver >> 32UL) == __JALAPENO_ID ||
(ver >> 32UL) == __SERRANO_ID)
return numa_parse_jbus();
}
return -1; return -1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment