Skip to content

Commit

Permalink
sparc64: Add JBUS NUMA detection.
Browse files Browse the repository at this point in the history
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
davem330 committed Aug 25, 2008
1 parent 83097ac commit 072bd41
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions arch/sparc64/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,10 @@ int of_node_to_nid(struct device_node *dp)
int count, nid;
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)
return -1;

Expand Down Expand Up @@ -1206,8 +1210,44 @@ static int __init numa_parse_mdesc(void)
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)
{
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;
}

Expand Down

0 comments on commit 072bd41

Please sign in to comment.